How to make a career shift to programming

adminguy's picture
Posted July 29th, 2015 by adminguy



Career changes to technology and programming is probably one of the largest among career shifts. Somehow it doesn't surprise me. Where else can you get paid for doing something you love? Where else can you get the satisfaction of building products that can change the way we live, relate and work? It's a very rewarding field to be in and it doesn't pay badly either :-)
Maybe it's because programming is one of the few fields where you can be self taught and very competent. I can imagine an accountant who has got her hands dirty with Excel macros beginning to consider a career change to programming. I have personally known mechanical engineers, accountants, and even a doctor who successfully moved to programming and are lovin' it! This was unthinkable a few decades back. Most people spend their entire life working in the field they studied. The Internet has made it easier than ever to learn new things and change the way we work. In fact we are rapidly entering an age where self-learners will be spoiled for choices. There are online courses, YouTube videos, online programming environments with exercises like, forums where you can ask questions and open source projects where you can be a real contributor and get your hands dirty writing real code. All the raw material a learner requires is in place. All you need now is some time, discipline, motivation and a good plan.
If you are the kind of person who likes diving in at the deep end and wading your way out, then you may not think much about having a plan - but I personally think it's very important. The field of programming is way too huge. It's full of different options and there are decisions to be made at every step. It's very easy to get lost without a proper plan. A plan need not be set in stone, but just having one will make your life a lot easier, allowing you to put all your focus on learning.
Decide the broad category of programming
There are several broad categories in programming. Even though a good developer can move between categories, in the initial stages, it's better to focus on one category and build skills in it. It's very similar to how a photographer might choose to focus on wild life, or urban life, or shooting models. Nothing prevents a wild life photographer from changing their focus to fashion models, but there are many subtle skills that differ. Since these skills take time to build, it's better too have focus and become really good at what you do.
Very broadly speaking, there are a few high level categories of programming: web development, mobile development, enterprise development, systems programming, and embedded development. There are others also, but these are the most common ones. 
My advice to those who are moving into software development, is to choose something which you can learn within a year and start working on real world projects. The best categories, in my opinion, are mobile and web development. Both can be learned within a year and they also offer a very wide range of work options. After learning mobile development, you can be self employed and build your own apps, or work as a freelancer building apps for businesses, or go the route of traditional employment. Similar choices are available to web developers as well.
I did not suggest enterprise development because it is very difficult to be a self-employed enterprise developer, and most jobs in this field need college degrees. Embedded development does support independent work, and you will be able to find work without a college degree, but the learning curve is fairly high - much higher than mobile or web development.
If I were to make a career shift to programming, I'd choose to begin with exactly what I am suggesting - mobile or web.
Choose the development stack
Choosing to focus on mobile or web development isn't the end of your choices. Each category comprises of several competing technologies. Even experienced developers find it hard to master all competing technologies. As a novice you should choose one and focus on mastering it, before you dabble with other technologies in your category.
Mobile developers need to choose among the two most popular technologies: Android, and iOS. These are not the two only technologies. There are others, but since Android and iOS make up the bulk of mobile projects, it's hard to go wrong with one of them.
Web developers on the other hand need to select a primary programming language and a web development framework. There is a fairly long list of popular languages to choose from. The most popular languages right now are: Python, Javascript,  Ruby, Java, C#, PHP, Go-Lang, and several others. My suggestion is to start with either Python, Ruby, or Javascript. Many universities have moved from Java to Python for their courses. It's a good choice, applauded by many, so you can follow their lead, and you won't go wrong. Another thing I like about these languages is the kind of communities that have come up around them. These communities value skills and not degrees. This means it is far easier to find work within these communities if you are skilled, but don't have a formal degree. The same can be said about PHP as well, but somehow PHP projects lack the engineering rigour and design thought that I have noticed in projects that use the former languages. My intention is not to deride PHP and I am certain there are plenty of PHP projects that use high levels of engineering rigor, but it's just that I have noticed it far more in projects that use Python, Ruby, or Node+Javascript. Once you have chosen a language, you need to chose a good web framework for that language. If you have chosen Python, then I'd suggest going with the Django web framework. I am keeping the choices simple for now because a comprehensive treatment of all the frameworks in all the languages is way beyond the scope of this article. I will discuss different languages and frameworks in detail in separate articles.
A few other choices you will have to make are selecting the operating system, the database and a development environment. Feel free to work with the operating system that you are most comfortable with: Windows, Mac, or Linux. As far as the database is concerned, the choice is automatic if you have decided to focus on mobile development (the particular technology will also determine the database). Web developers on the other hand are spoilt for choice in databases. I am again going to cut through all the cruft of arguments and debates and suggest using Postgres!
The final thing you will have to choose is the development environment (version control, IDE, and other tools). I am not going to make any suggestions here because it's not very difficult to change these, and it's very likely you will want to experiment with different tools as you go. Do a few web searches and select whatever is simple and makes sense to start with. 
Make a learning plan
Once you have selected the category, and development stack, you know the area you have to become familiar with. But even this is a fairly large field - so to speak. The simplest way to begin is to speak to a few people who are already working with your chosen track and ask them for guidance. You can ask for guidance on the Internet. There are several discussion boards where experienced developers will be very happy to guide novices. You can try asking for guidance on, or the specific sub-reddit for your particular stack.
You might get many suggestions and sometimes it may seem as if they contradict each other. However, this is to be expected. People are suggesting what's worked for them. They are all different ways and none is better than the others. You have to figure out what will work for you.
Making a learning plan is going to need a little bit of self reflection. You have to find out how you learn best and then make a plan that can utilize your natural style.
Once you have a reasonably clear idea of how you learn, you will find that there is a huge range of courses, videos, books and places where you can practice with coding challenges. Get started with the most appropriate resources and tweak as you proceed.
In Conclusion
I hope this blog post has opened the possibility of learning programming on your own. I have had to keep the discussion at an abstract level because discussing the details is beyond the scope of a web article. I'd end up writing a book if I tried it. What I really wanted to convey in this article is that it is possible to make a career shift to software development on your own without enrolling in a formal computer science program. I have provided a brief overview of how you can begin your journey. I will address specific issues and choices related to different categories and their stacks in future blog posts.