How to Become a Software Engineer

< A Beginner's Self-taught Guide />

Introduction

This article is aimed at those who have no or little programming knowledge but wish to learn how and transition to become software engineers.

Starting a career as a software engineer, especially as a self-taught, used to be tough about three decades ago. One of the challenges was that personal computers were not cheap, and even if you could afford one, the tools available to get you started as a programmer were limited. Another difficulty was that programming languages at the time were not very beginner-friendly. As a result, during those times, the easiest way to get started was to either borrow a programming book from the local library or seek guidance from someone who was already working in the sector which was hard to come by for most people. The bottom line is that it wasn't that easy to get started and break into software engineering for the average or typical person.

Access to computers has grown increasingly accessible as a result of technological developments in the computing hardware and software domains, and the world is now more connected than ever before as a result of the advent of the internet. If there was ever a time to be alive as a software engineer or learn how to code, now is it, and you should count yourself fortunate to be alive right now. I'm sure a lot of old people would have given anything to be alive in this age of limitless possibilities and opportunity.

Why Should You Learn How to Code?

Software engineering is, in my opinion, one of the most promising professions of this day. A software engineer's average wages are higher than other well-known jobs in today's market. The next is that, in today's world, there are just a few career options that do not necessitate any type of university certification, formal education, or background to obtain a spectacular job. One of them is software engineering. This isn't to suggest that formal education isn't necessary; it just isn't a prerequisite for getting started as a software engineer.

Another motivation to learn to code is that working in the software engineering field makes you immensely smart and improves your problem-solving abilities. Programming is based on the skill of problem-solving. I tend to hear beginners say, "I don't know what code to write." The actual problem is that they don't understand the problem they're trying to solve. The majority of software engineers' work involves recognizing problems and developing effective solutions using the appropriate approaches to tackle the problem through coding. Other reasons exist, but some, such as flexible work hours, community support, learning new skills, and so on, are subjective.

The How?

Software engineering is no different than any other profession in that selecting the correct tool for the job is paramount. To begin, you'll need a well-performing personal computer (desktop or laptop). If you're having trouble getting a computer, you can use one at your local public library or, if you're a student, you can usually obtain permission to use one at your school's computer lab. Both are inconvenient, but where there's a will, there's a way.

The second thing you should do is ensure that your internet connection is reliable. This isn't a requirement, but it's a good idea to have. Knowing where to search for solutions to problems for which you may not have answers is a crucial part of being a skilled software engineer. Most of the time, your go-to source for information is the web, which necessitates a stable, reliable internet connection. With a stable internet connection, it's time to choose an appropriate IDE and install it on your computer. An IDE is an acronym for Integrated Development Environment, and it is essentially a software application that offers computer programmers a set of software development tools. An IDE often comprises a source code editor (where you type the code), a debugger (a tool for diagnosing bugs or errors in your code), a terminal (a text-based interface for executing and displaying the output of your code), and other automated toolkits to help you code. Well for those who are still confused, imagine an IDE as a house. You have a bedroom, a bathroom, a kitchen, a hall, and maybe a garage inside the house, so various compartments serve different purposes. Some houses may have a garage, while others may not, which may be a concern for those who own a car but not for those who do not. One thing is certain: every house has a bedroom. Some homes are more comfortable than others, which is arbitrary. An IDE, like a house, maybe visualized in this way. All IDEs are not quite the same, although they are all designed for the same goal and may include different features to make coding convenient. You may try out various IDEs to find which one suits you best.

So far, I've tried a plethora of IDEs, some of which I honestly don't remember. I recall starting with Notepad (not an IDE, but a text editor), then moving on to Dev-C++, Codeblocks, Netbeans, Sublime Text, Atom, PyCharm (Community Edition), and finally VS Code. These are a few of the most well-known. Simply choose the right IDE for the right job.

Now that you have a computer and stable internet connection is time to choose a programming language. There are about 700 programming languages right now and selecting a language can be very frustrating (writing from personal experience). Just to mention a few are C, C++, C#, Java, Python, Javascript and so on. Each language has its strengths and weakness. Most often a programming language is selected for a problem based on what type of problem is at hand and limiting constraints to successfully solve the problem.

The tendency to bounce from one programming to the next (like I did when I first began out) can stymie your progress. In my situation, I started with C and then C++, then moved on to dabble in Java, then Python, Javascript, and then Typescript. There's a phrase that goes, "Jack of all trades, master of none," and that sums up my coding path in a nutshell. Though this strategy has the advantage of making it easier to get up to speed when switching roles that demand the use of a different language, it does not foster your growth, especially if you are a newbie. I recommend focusing on one and becoming proficient in one language before moving on to the next.

I recommend starting with Python if you're new to programming. Several reasons why I choose python are that it's relatively easy to set up and get started, the syntax is more beginner-friendly, many specialization and application areas to consider, countless libraries to help you accomplish complex tasks and also most importantly large community support. There are no hard and fast rules for choosing a programming language when starting, but from personal experience, I recommend starting with a language with low overhead and focusing on learning the fundamentals of programming concepts such as, but not limited to, variables, data types, arithmetic operations, conditions, data structures, and algorithms. The programming language is the easiest part; the algorithm is the most challenging. With a solid foundation in place, it is much easier to pick up any other programming language and dive right in.

I also propose employing a project-based learning strategy. I endorse this method for three key reasons. The first is that this technique allows you to develop knowledge and skills through meaningful projects based on real-world problems, rather than simply memorizing concepts and probably forgetting them in the long run. The second reason is that there are other important tools commonly used in the software industry that are not necessarily part of the programming principles and language you may be learning. Working on projects exposes you to these tools and how to use them in both direct and indirect ways. The final reason is that these projects will assist you in developing a strong technical portfolio. It is one thing to master programming principles and languages; it is quite another to create a great portfolio to assist you to gain a reputation. At the end of the day, it is the projects you demonstrate that validate what you have learned, and this also boosts your chances of landing a job, especially if you are just starting as a software engineer. With everything out of the way, let's look at where to begin.

Where Do I Start?

Thanks to the internet, there are numerous free and paid resources available to assist you in getting started, including books, video courses, websites, and online boot camps. Most people will think the logical place to begin is with the programming language's official documentation, however, I do not encourage this merely because documentation may be rather technical and intimidating for the typical beginner to read and may end up discouraging you. I propose starting with beginner-friendly courses like W3schools, freeCodeCamp, Coursera, and others. If you have no prior understanding, I recommend that you begin with Havard's cs50 which offers both free and paid versions before moving on to other courses.

There are some excellent programming videos on YouTube to get you started right away, but I don't recommend relying completely on them for your learning. Most newcomers become trapped in an infinite circle of watching tutorials. The benefit of tutorials, particularly project-based tutorials, is that they help you build cool projects and introduce you to a variety of tools that you might not have heard of if you merely read documentation or took a course.

Another effective method is to participate in active tech communities, volunteering groups, forums, conferences, hackathons, and podcasts. Depending on where you reside, you can look for tech communities or reach out to other software engineers on online forums and social media platforms such as Twitter, LinkedIn, Facebook, Discord, Stackoverflow, Reddit, Quora and numerous other sites. This is because, in addition to learning from other tech experts, you get to make and build contacts and network with people who can help you achieve a successful career. Here are just a handful of the many tech groups in Ghana for prospective software engineers to join and help you establish the network you need.

Python Ghana is one of the active communities in Ghana. I strongly recommend you to join this community group if you reside in Ghana. PyData Ghana, PyLadies, PyClubs, and PyScholars are initiatives that have been created to assist individuals in reaching their full potential in their software engineering careers. There are regular events, meetups, workshops and PyCon Ghana that you cannot afford to miss.

Pre-MEST is worth highlighting. I was fortunate to be a part of their first cohort, and I can confidently state that it was a life-changing experience for me. And guess what? It's completely free. They even provide internships and job opportunities after completing their program. It is an early-stage training program developed by MEST in collaboration with the Mastercard Foundation, which is aimed at young entrepreneurs and intrapreneurs who want to advance their technological and business knowledge. They seek to increase participants' employability and contribute value to Ghana's rising demand and interest in software entrepreneurship by teaching them new technical skills needed to launch a successful firm or offer value to current companies. If you reside in Ghana I recommend participating in their training program.

DevCongress is another tech community worth joining. DevCongress is a developer movement to become the most vibrant in Ghana and Africa's software development ecosystem. They boost the confidence in software engineers, present them with a diverse range of resources, collaborate on open source projects with significant social and economic effects, and use the aggregate expertise and resources of the local tech community to solve emerging problems. They organize conferences, hackathons, code camps, and the DevCongress eXchange (where seasoned software engineers talk about their tools, workflow and their lives).

Developers in Vogue is an ardent tech female community I recommend. DiV is an exclusive group of African women who are enthusiastic about leveraging technology to transform Africa and beyond. Their goal is to increase opportunities for African women in the tech ecosystem, and via their community, they have produced African women working at Microsoft, Zipline, Hubtel, Vodafone, and other companies.

GDG Accra is part of a larger network of Google Developer Groups (GDGs) for developers interested in Google's developer technologies, which encompasses all from the Android, Chrome, Drive, and Google Cloud platforms to product APIs such as the Cast API, Maps API, and YouTube API. This dev community is made up of Ghanaian students and employees. At least once every 30 days, events are held, which are frequently held at the capital's innovation hubs.

There's also the Meta Developer Circle: Accra, a forum for developers in Accra, Ghana, who want to create and build on the Meta platform to communicate and work with other developers who have similar interests. They host seminars, gatherings, and online workshops on a diversity of tech topics.

Conclusion

To summarize, becoming a software engineer requires focus, dedication, effort, and consistency, but it is ultimately rewarding and worthwhile. There will be times when you can't figure out something and feel like giving up, but hey! Keep your chin up; every software engineer has been there, and no one said the ride would be smooth. Always remember that there is light at the end of the tunnel.

Thank you for taking the time to read this far; I hope you now have a better understanding of how to start your career as a software engineer. Please leave any comments or recommendations; some helpful hints will assist others in getting started. You can also inspire others by sharing your personal experience as a software engineer.