When you search the internet for how to become a programmer or learn to code you will undoubtedly be met with never-ending advertisements seeking to sell you the easiest or quickest path. I can tell you up front that it is never easy or quick. As a software developer with over a decade of experience I can say simply that it will take a decent portion of time and effort to become a “good” developer. While it isn’t too terribly difficult to write a few lines of intro code, it is another effort entirely to write software. The difference? “Hello World” vs. Tying together multiple components in your code to build a comprehensive system that solves a problem. How can you bridge the gap?
There are several options for people with varying situations:
When I first started, this is how I got my first job. I had no previous coding experience and was absolutely lost from the get go. I didn’t know which language to start learning, or even how to begin practicing. I think at this point you need to ask yourself, what is a problem I want to solve? For everyone this will be different, but it is important you choose a very specific one since it will dictate which programming language(s) you will want to start learning to solve that problem.
Herein lies a common problem for beginners, what should you make? I recommend most people create something pretty small and most importantly something you enjoy. Like going surfing? Make a python script that sends you a text when the waves are good for riding. Enjoy graphics or video games? Create a C# application that produces trippy kaleidoscope effects. It is also very important that the project is small enough to finish and interesting enough for you to actually want to finish it. Another very critical part of starting out is to remember not to re-invent the wheel. You don’t need to code everything from scratch. By its’ very nature code is reusable and you should try to take advantage of third-party libraries (code someone else wrote) whenever possible. This is a typical scenario that you would find yourself in if you decide to have a career as a software developer and it would be very beneficial to pick this up early. A good example of this would be to use the PyQt GUI libraries to build an interface for a simple python app.
One problem with teaching yourself to code is the motivation it takes to continue learning. I can’t tell you how many times my friends are eager to start learning but the flame of interest quickly fades within a few weeks. For people struggling with motivation I recommend watching CS Dojo on YouTube, his videos got me up off my ass and practicing my craft once again. As a result I am now moving to Washington to work for Microsoft!
Resources teaching yourself are absolutely everywhere and you shouldn’t care so much about which language a site/book teaches since the practices and concepts transfer easily between most popular programming languages.
I can vouch for the following sites (I have not been paid or influenced in any way to endorse these):
- MIT OpenCourseware (FREE) – The only site I am going to link, just because it is so awesome and is absolutely FREE. They have actual MIT courses online for free and available for anyone. Depending on your experience level they have something for just about everyone.. beginner and advanced. There are videos to watch and homework problem sets for practice.
- Pluralsight (PAID) – More advanced features such as interactive tutorials and knowledge checkpoints along with an intuitive interface. Used by top tech companies to train employees.
- CodeAcademy (FREE trial – Paid for extended access) – Usually the first place most beginners end up due to advertising, but surprisingly intuitive and features in-browser IDE for compilation and testing.
- LeetCode (FREE)- A site to practice algorithms and general problem solving using most major languages. Use this to also prepare for technical interviews.
- GeeksForGeeks (FREE) – A broad outline of coding concepts in major languages and common algorithmic problems.
- HackerRank (PAID) – Not at the top of my list but still a viable source. It presents many aspect of workplace language knowledge and provides interactivity for learning concepts.
If you don’t enjoy learning online I recommend picking up any of the following books (again not paid to endorse):
- Head First Java (O’Reilly) – I actually laughed out loud a few times while reading this book. Simplistically explains some complicated subjects about Java while making jokes and making you solve puzzles. Highly recommended.
- C Programming Language (Ritchie) – A stark contrast to the above in terms of writing style but is absolutely packed with information about C and how the programming language. I used this as my own personal coding Bible during a few particularly difficult University courses.
- Crack The Coding Interview (McDowell) – Possibly considered more advanced, but if you are looking to get a job at a larger tech company this is your ticket. I read and re-read this book several times over and did all of the problems offered. When I interviewed at Google, Microsoft, Amazon, and Twitter the questions that were asked were very close to the concepts learned in the problem sets given in the book. It even prepared me for what to expect outside of the interview and pointed me to other good resources for learning coding.
Maybe you just absolutely hate reading and learn by watching others. While this may be a problem for you later down the line when you have to read documentation and specifications it won’t stop you from learning in the short term.
Here are some YouTube channels that I have used in the past to learn about programming and computers in general:
- CS Dojo (https://www.youtube.com/channel/UCxX9wt5FWQUAAz4UrysqK9A)
- MIT OpenCourseware (https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
- The New Boston (https://www.youtube.com/user/thenewboston/playlists)
- Eli the Computer Guy (https://www.youtube.com/user/elithecomputerguy/playlists)
- Tushar Roy (https://www.youtube.com/channel/UCZLJf_R2sWyUtXSKiKlyvAw)
- HackerRank (https://www.youtube.com/watch?v=KEEKn7Me-ms&list=PLI1t_8YX-ApvMthLj56t1Rf-Buio5Y8KL)
Coding boot camps are accelerated and intensive courses that seek to teach new-comers about how to use a particular set of technologies. I have never been to a Boot Camp and cannot relate my personal experiences here. However, I can offer advice from the countless stories I hear from friends and work colleagues about how Boot Camps compare to traditional education. The general consensus is that if you have no previous technical work experience and can’t consider investing the time into college or higher education then Boot Camps may be worth looking into. Some Boot Camps guarantee you employment after completion of their program or your money back. Most of the people I talk to say that they felt confident enough in their skills after completion of their courses to land themselves a job in low-level positions where they could continue to learn from more experienced developers.
Since I opted for the self-taught and University route I can lend a little bit of an outsider perspective. Boot camps are expensive … considering that the average cost of Boot camps is 80% of what University tuition costs and is considerably more expensive than most community colleges. The major pull for Boot Camps is the time to completion. Everyone holds time as a valuable asset and people, in most cases, cannot afford to drop their current life to attend 4 years of college. Another outsider opinion is that Boot Camps do not do a good job of teaching computer science fundamentals such as data structures and algorithms. There may be a brief overview of how certain data structures are used in a particular technology stack but a lot of candidates I see coming out of camps could not tell me how a stack is implemented or when/why to use a list versus an array.
Employers are looking for people with coding experience and will opt to hire someone with a coding Boot Camp on their resume rather than someone with no experience. Just be aware that the scope of your learning at Boot Camps will be limited and cannot hold up against a more traditional education.
COLLEGE / UNIVERSITY
Money and time my friends…. Money and time. Higher education is VERY highly recommended by me but will suck you dry of both of these commodities; especially at better known schools. One of the things about universities and colleges that is often overlooked is the connections and networking that can be achieved by just attending school. Becoming a teacher’s assistant or research assistant for the right person could get you a foot in the door with some of the places you could only dream of working.
This one is really a no-brainer — if you have the means and the time DO IT. Doors will open to you that you always believed would be shut and you will learn about subjects you didn’t even know existed. Whenever I told people I was in school for computer science they would always say “I could never do that, it’s too much math. I hate math.”. There is a good deal of math involved but in computer science the problems you will be solving are infinitely more interesting then learning things like algebra and grade-school arithmetic. The first time I learned I could use linear algebra to manipulate images and create 3D graphics it reversed my negative opinion about math and I really started to enjoy the meaning behind it all.
All of these are viable options to learn how to code and become a software developer. It will take time and blood and sweat and tears, but at the end of it you will be able to create awesome things entirely by yourself in the comfort of your own home. The path you choose to get there will vary greatly dependent on your current circumstances but it is achievable for anyone that is willing to put in the effort. Just pick up a book, sign up for a course, or just start coding and you will be one step farther than you were the day before. Remember to stick with it!! Happy coding 🙂