Monday, April 30, 2018

How to become a professional software developer

Employment of software developers is growing faster than the average for all occupations. The Bureau of Labor Statistics projects a growth of 24 percent from 2016 to 2026, which translates into 302,500 new job openings for software developers.

Despite the abundance of job openings for software developers, only around 3 percent of college students graduate with a degree in computer science, according to Computer Science Education WeekWhat is perhaps even more surprising is the fact that only 8 percent of graduates are in computer science.

One possible explanation for the discrepancy between the high demand for software developers and the low supply of recent graduates who want to become professional software developers is the seemingly thorny path that leads to many attractive software development jobs.

Many people believe that the median annual wage for software developers, which is currently around USD 100,000.00, is reserved for a small handful of extraordinarily talented developers who have been programming since childhood and have a natural aptitude for math.

In this article, I try to dispel some of the myths that surround the profession and lay down a clear path for aspiring developers to follow.

Do I need a degree to become a professional software developer?

In 2012, Microsoft published a study which showed that less than one-fourth to less than one-half of workers in computing occupations have a computer science degree. As noted back in 1998 by the Government Accounting Office, "IT workers come from a variety of educational backgrounds and have a variety of educational credentials such as master’s degrees, associate degrees, or special certifications."

In fact, 36 percent of IT workers do not hold a college degree at all, as explained in a 2013 paper from Economic Policy Institute, which reviewed and analyzed the STEM labor market and workforce. Furthermore, a 2015 software developer survey conducted by Stack Overflow, an online community where software developers and others ask tough questions and get answers from their peers, revealed that over 40 percent of software developers are self-taught.

Considering these numbers, it is clear that one does not need a degree to become a professional software developer. As I'll explain more in the following section of this article, software developers are judged mainly by their skills and professional experience and not by their educational background.

Of course, having a computer science degree from a prestigious university can increase one's chances of landing a great job, but it is just one of many things to which recruiters and interviewers pay attention.

Do you have to be good at math to be a good software developer?

Every day, there is a new thread on some programming forum posted by someone wondering whether they need to be good at math to be good at developing software. The answer to this question is simple: no. But it takes more than one word to get to the bottom of the issue.

There is a good reason why people who are good at math have a natural inclination toward software development. Both math and programming are about breaking down complex problems into smaller parts and spotting patterns.

Or you can just take the word of Richard P. Gabriel, an American computer scientist who is known for his work related to the Lisp programming language and his essay Lisp: Good News, Bad News, How to Win Big, who said, "Programmers are not mathematicians, no matter how much we wish for it."

But just because software developers are not mathematicians does not mean that math has no place in software development - far from it! There are many areas of software development, such as data cleaning, data aggregation, anomaly detection, game development, 3D imaging, or graphics in general, where a solid grasp of fairly complex math (variable calculus, discrete mathematics, derivatives, integrals, statistics, many physical equations, just to give a few examples) is essential. 

Lalit Kundu, who works in Google's core payments backend team as a software engineer, provides some examples of the math he used since he started working for Google in his post on Quora. "Depending on the team and field you’re working in, the amount of maths you’ve to know could range from high school algebra to graduate level stuff", Lalit says.

Because the world of software development is so complex and large, there is a place for every software developer regardless of their knowledge of math. The key is to be honest during the interview process to avoid getting a job that would be better suited for someone with a different skillset.

Which programming language should I learn?

Wikipedia currently lists around 750 programming languages. Needless to say, only a fraction of the languages listed on Wikipedia are used in practice, and even fewer are useful for becoming a professional software developer.

Every year, GitHub, a web-based hosting service for version control that provides access control and several collaboration features such as bug tracking, feature requests, task management, and wikis for every project hosted there, publishes its State of the Octoverse report, showing, among other things, which programming languages are on the rise, and which are on their way to obsolescence.

In 2017, the top 15 most popular languages on GitHub were JavaScript, Python, Java, Ruby, PHP, C++, CSS, C#, Go, C, TypeScript, Shell, Swift, Scala, and Objective-C, in this order. 

With 2.3 million pull requests, JavaScript is more than twice as popular as the second most popular programming language, which is Python. The fifth most popular programming language, PHP, is more than four times less popular than JavaScript, and the tenth most popular programming language, C, is almost ten times less popular than JavaScript. 

However, only because a certain programming language is popular, does not necessarily mean it’s sought after by employers, nor does it make it the best choice for solving every problem. In other words, if you plan a lifelong career as a software developer, be prepared to learn multiple programming languages. Once you learn just two languages, you realize that it does not really matter all that much which language you study first, or even which language you choose as your primary, because software development is more about being able to divide complex problems into smaller and simpler pieces and understanding popular software development practices and patterns, which comes with practice and experience.

As software engineer Mahesh Mathapati excellently puts it in his post on Quora, "[Programming languages] are mere mediums to convert logic into instructions which computers can understand. Don't worry about them now, you will learn them in 4 years engineering course. The real gems are your aptitude, analytical skills, basic mathematics, understanding of the problem, good communication skills to explain yourself to colleagues and clients, etc."

How can I gain programming experience?

Companies do not expect software developers applying for a job to have a computer science degree, but they do expect them to have some kind of proof that they are qualified.

Arguably the best way how a software developer can demonstrate their skills, and improve them at the same time, is to build software. 

Personal projects that solve real problems in a demonstrable way and earn praise from the wider developer community are an excellent way to impress an interviewer and land a job. Some software developers take things a step further and purposefully build software with the same software stack the company they would like to land a job at uses.

Besides projects, internships are also a great way to gain hands-on programming experience and learn how teams of professional software developers function. While paid internships are becoming harder and harder to come by, even unpaid internships could pay off further down the road. 

How to stand out and get a job?

Having excellent software development skills is not enough to stand out from other equally skilled software developers. While working on projects and learning various programming languages, software developers who want to make it big in the industry should also focus on cultivating their professional network.

Software developers gather in places such as Stack Overflow, GitHub, Reddit, LinkedIn, Medium, or Quora, where they ask questions, submit answers, post blog posts, and publish source code. Having a solid online presence can be a huge advantage when looking for a job since 40 percent of new hires come via employee referral, according to Jobvite.

Last but definitely not least, software developers should not forget about their soft skills. Professional software development is a team effort, and there is very limited space for software developers who struggle to express themselves and cooperate with others.  


More people can become software developers than they realize. One does not need a computer science degree to get a job as a software developer, and one certainly does not need to be a math whiz to develop software applications used by millions of people around the world. 

What is needed is an aptitude for breaking down complex problems into smaller parts and the willingness to constantly learn new things in order to keep up with new technologies and thinking models.