“How do I become a developer?” — I’ve heard this question a lot, so I decided to write the best guide I can, using only free resources. If you’re an experienced software developer already, feel free to save yourself the time and do something else. Otherwise, read on :).
“The journey of a thousand miles begins with one step” — Lao Tzu
Before you get started, I need to warn you: Unfortunately, programming is not for everyone, at least not if you want to stand out.
- It requires immense dedication. I mean, forever. I am a software developer for 11 years now and my “learning list” keeps getting bigger instead of the opposite. You are either willing to be a forever student, or you should be considering something else.
- It requires passion. Of course you don’t have to feel passionate right now, you’re just getting started, but it has to happen somewhere down the road. Otherwise you’re going to be mercilessly left behind by those who are.
- It’s challenging and a lot of people get burned out. Oftentimes you’ll be dealing with long hours of “mentally taxing” work, impossible deadlines, legacy unmaintainable code, inconsistent/ambiguous requirements and sub-optimal office environments.
- It requires analytical thinking, good decision making, patience and curiosity, lots of curiosity.
- It requires you to be self-taught. Yes, you can learn the theory from the books, but when your code breaks, nobody is going to hold your hand.
With that in mind, since you’re still reading this, I think you should really try it. Try it and see how it goes, and don’t feel frustrated if after some time you don’t feel like it’s for you. I, for one, really enjoy being a developer. I’m natural builder. Few things are more appealing to me than creating and automating stuff. I find it extremely beautiful and rewarding, and hopefully you will feel that way too :).
Also, the job market is definitely not bad and I don’t see it changing in the foreseeable future. Radio, cable TV, education, brick-and-mortar stores and the movie/music industries are examples of markets that will certainly be transformed, if not completely defaced, by software in the next 20 years. The future looks bright.
“You are either a software company, or being disrupted by one” — Scott Farquhar
How to become a developer
This is the list of free resources that will turn you into a software developer. This is not going to be a walk in the park. This will be tough, there will be no teacher holding your hand, you’ll probably regret it sometimes, but think twice before giving up. Believe me.
“Self-education is, I firmly believe, the only kind of education there is” — Isaac Asimov
Where it all begins
I know you’re excited and you can’t wait to see that brilliant idea in action but please, hold on. The fundamentals are the most important part. Programming languages and especially frameworks and libraries will come and go, but the fundamentals will remain.
“As to methods there may be a million and then some, but principles are few. The man who grasps principles can successfully select his own methods. The man who tries methods, ignoring principles, is sure to have trouble” — Harrington Emerson
CS50x is a free course from Harvard provided by Edx. It will teach you the basics of how computers, programming languages, algorithms and data-structures work and pave the way for the rest of your journey. You can take this course for free and optionally get a certification for $90. After you complete this one, you’ll be ready to move on.
Getting your hands dirty
Once you’ve learned the principles with CS50x, now it’s time to put them in practice.
“For the things we have to learn before we can do them, we learn by doing them” ― Aristotle
Hackerrank is a free online service that will provide you with hundreds of algorithm problems and a platform on which you can implement solutions online using your favorite programming language. And the best part: It’s able to check whether or not your solution is correct automatically. Here’s why Hackerrank is an amazing tool:
- It starts from the easy level and progressively becomes more difficult as you solve more problems.
- You can pick problems from a variety of “tracks”, depending on your interests. Examples: SQL, Python, Artificial Intelligence, Functional Programming, Security…
- It has “tutorial tracks” that actually include lessons. For instance, I highly recommend Cracking the Code Interview, where Gayle McDowell gives a great introduction on data structures and algorithms. I find this track a great follow up for CS50x.
- Most of the jobs you will apply for, will require passing some sort of coding challenge. That’s how they assess your problem solving skills. This process often starts through an automated tool like Codility or Hackerrank, before going to a real whiteboard. Having solved lots of Hackerrank problems will definitely help you landing your first job.
CodinGame is a platform similar to Hackerrank, but you actually train your coding by “automating” video-games. The main difference is that you get instant visual feedback from the code you are writing. CodinGame may feel more exciting and appealing, while Hackerrank is still better for actually learning the specific kinds of algorithms that companies look for in interviews. Both are fantastic tools, nonetheless.
FreeCodeCamp is an open-source community where you learn how to code, especially web development, by completing a series of self-paced challenges. It’s also possible to engage in real world projects for non-profits. Also, the other “campers” seem to be very helpful along the way.
Asking for help
Stackoverflow is the biggest Q&A community about software development, but there’re not known for being very receptive to beginners. The best place to ask beginner’s questions is probably on /r/learnprogramming, but be sure to read their “Asking Questions FAQ” beforehand. After you get some confidence and experience, Stackoverflow will be your best friend.
Getting to the next level
After you got yourself introduced to coding and trained a little, you may find it interesting to delve into more advanced Computer Science topics like Databases, Cryptography, Parallel Computing and so forth. Fortunately, there’s OSSU. From their website:
This is a solid path for those of you who want to complete a Computer Science course on your own time, for free, with courses from the best universities in the World.
You should definitely give it a try.
The final frontier
One day, a guy named Josh Washam got obsessed about working at Google and made the world a favor by compiling a ginormous list with very useful resources about computer science. Apparently (or not), this is what it takes to work for Google. From his website:
I originally created this as a short to-do list of study topics, but it grew to the large list you see today. Working at Google was the original motivator, hence the name. I didn’t get an interview at Google, but the repo name lives on, and it would mess up a lot of folks to change it now. The items listed here will prepare you for a career at just about any software company, including the giants: Amazon, Microsoft, Google, and Facebook.
As you can see, unfurtunately he didn’t get hired :(, but his work will sure help many others.
Where to go from here
There’s an overwhelming amount of resources online about learning how to code, but I think the best you can possibly find is this: The top posts ever on /r/learnprogramming. Amazing Subreddit. Amazing list. You’ll learn everything from Web Development, to Data Science with Python, to Mobile development.
I handpicked some of the best for you:
- I’ve taught 30,000 students how to code. Now I’m offering my course for free, forever.
- I made 47 free C++ tutorials on YouTube and wanted to share them with you guys
- Here’s a SANITIZED list of 530+ free online programming/CS courses (MOOCs) with feedback(i.e. exams/homeworks/assignments) that you can start this month (December 2016)
- 40 Key Computer Science Concepts Explained In Layman’s Terms (x-post from r/interestingas****)
Also, be sure to read these 2 articles of mine:
- How I stay up-to-date as a Developer
- The best way to learn new technologies is by doing. Here’s some inspiration.
I hope you enjoyed it. Happy hacking!