An opinionated guide to learning programming
also see: resources
This is a highly-opinionated, curated guide to becoming a professional programmer, with a focus on fullstack web development. It was originally written in order for one programmer to give guidance to his friends. It is now offered up up to the public in the hopes that it might help others. Feel free to share or offer suggestions for improvement.
This is written for people who don’t have a strong background in programming and computer science, and are trying to figure out if they want to pursue a career using programming.
This guide was originally written by opheron as a resource for programming mentees. It is now maintained by opheron and the rest of the Electric Hive, a free and open programmer/hacker collective focused on mentoring and producing technological solutions for public good. Please check our website out for more information about us and for information on how to join us.
I think exploring the world of programming-related careers can be really confusing to newbies, and it can be very easy to get lost, become overwhelmed by decision paralysis, or simply procrastinate.
This guide is aimed at helping out people with a specific goal of becoming a professional programmer by giving them a simple plan to follow, reducing choices to a handful of options selected for quality and effectiveness to avoid analysis paralysis, and providing advice on how to actually go about the whole process.
Pretty much everything in this guide is my own opinion. For conciseness, I will not be providing caveats about how certain things are my opinion elsewhere. I may omit some things. I may also be inaccurate or flat-out wrong about some things. I’m not perfect, and neither is this guide. Caveat emptor.
The waggle dance is performed by the honey bee to relay information to other bees necessary for locating foraging sites and colony nest locations. Similarly, this guide is meant to lead you on the journey to becoming a programmer.
Try programming to figure out if a programming career is right for you.
Follow a program to learn and develop useful skills in programming.
Get a programming job, and continue to improve your skills.
Much ado is made about picking a first language. There are many good choices but I’m going to narrow them down for you.
Here is a list of languages, along with generally what kind of job(s) you would likely be able to get with competency in that language:
There are of course other areas that you could get using these languages, such as devops-focused roles like site reliability engineering or cybersecurity, but you will need to know those domains’ additional specific skills, which are beyond the scope of this guide.
You will be sticking with this language until you finish a short programming course (14 - 30 days). Once you’ve picked, don’t switch languages until you finish the intro course. In fact, don’t switch languages unless you hate the language you’ve been learning and can pick out a language that you’re really excited to learn. When you’re first starting out, being consistent and gaining fluency in a single language is important.
You have until the end of today to pick a language. To help you get oriented, you may want to read a little about programming from the r/learnprogramming FAQ.
If you have hit the end of the day without choosing a language, I’m going to pick for you: Congratulations, you’re going to learn Python!
Below is more information about the languages, to help you make up your mind.
Evaluate whether you learn better through watching videos, or through reading text and looking at graphics, or if you learn equally well with either medium. Based on this, decide whether you want to learn primarily through a video lecture series or a book/text-and-images-based course. If you’re not sure, try the video lectures first. Start the course for your language and start working through the program as quickly as possible.
Here are two good free JS MOOC courses:
If you don’t mind paying for a course, there are a few good Udemy courses as well:
Any of these courses are great, so just watch some of the free preview video lectures and see whose teaching style works best for you.
Warning: Please read the note linked here about Udemy’s misleading course prices and don’t buy a course if it’s more than $15.
Do this course: Harvard’s CS50’s Introduction to Programming with Python, aka CS50p This course is taught by the illustrious Professor David J. Malan and is part of one of the best free intro CS courses in the world, CS50.
If you want something that feels less academic, there are a few paid Udemy courses that are also good:
If you can’t/don’t want to pay for the course, here is a free alternative: EdX / MIT: Introduction to Computer Science and Programming
Do the University of Helsinki’s Python Programming MOOC 2022 If you don’t like the University of Helsinki’s MOOC, try this book: Think Python
Here is an incomplete list of topics that you should feel comfortable with upon completion of the intro course:
Congrats, you should now have a handle on the fundamentals of programming!
Now that you’ve finished the intro course, it’s time to sit down and figure out if you want to seriously pursue programming as a skill and tech as a career. Spend time researching and considering carefully. If you want input from other people, consider reaching out to friends and family who have experience doing programming work professionally, posting to Reddit in a subreddit like r/learnprogramming or r/cscareerquestions, or asking us at the Electric Hive.
If you do decide you want to pursue programming professionally, keep using this guide. If not, stop and figure out what else you want to do with your life.
So you’re going for it, and committing yourself to learning programming and building a career in tech. This requires a serious investment of time, energy and money, and you should put effort into figuring out a primary way to rapidly and methodically develop employable skills. Set up some coffee interviews with friends, family, or acquaintances to find out more about the industry and how to develop your skills. As Read or post to Reddit in a subreddit like r/learnprogramming or r/cscareerquestions, or asking us at the Electric Hive.
The ways to advance your tech skills that you should consider are:
Since the pros and cons of college and graduate education are frequently and thoroughly discussed elsewhere, this guide will not cover this topic. Caveat emptor, and do not let your schooling interfere with your education.
Whether coding bootcamps are worth it is a hot-button issue. Here are some considerations if you’re thinking about going to a bootcamp. I will definitely say that there is a huge variance in quality between bootcamps, so if you decide to go this route, choose carefully.
Ok, from here onwards we’re going to assume you’re going with entirely self-directed learning, although everything in this plan will still be useful to those going a more traditional route.
Check out the five in-depth learning programs listed below, and choose one to work on.
Also, if you like Udemy, you can teach yourself off of web dev Udemy courses, while supplementing with other material. Here are a few web developer Udemy courses that are good:
Now is the time to start digging in deeper into the world of tech and building serious, job-worthy skills. This is when you should be advancing from the beginner stage into an intermediate stage.
Here is a very incomplete list of topics you should be covering as you work through your learning program.
Time to upgrade your tools! Check out the tools section to see what shiny things you can add to your kit. Don’t go overboard though!
Congrats! You’ve finished the learning program from Level 2, and now you should be at an intermediate capability as a programmer.
Understand that, as a programmer, you are a craftsperson first and foremost. Now that you have all the basics down, you need to use the knowledge base you’ve built up to propel yourself forward.
Great job! You’re off and away. Now is the time to put on the big-kid pants, step out into the world, and build, build, build. Work on making small and medium-sized projects in order to develop your craft.
By this point you should be able to self-direct your learning. For more guidance on what to learn, check out these roadmaps: Roadmap.sh
Pick one roadmap and begin pulling out topics to learn.
The roadmaps recommended above should give you a lot to work on, but here is a brief and incomplete list of topics you may want to look into:
Great, you’ve finished the program you’ve chosen and should now have developed employable skills. Now it’s time to prep for the job interview process. Browse the following:
Build yourself a personal site or portfolio page. Add personal projects you’re proud of, with clean code and documentation.
Take a look at what Career Cup’s sample résumé looks like.
You may have noticed by now that the insanity that is the typical modern-day technical interviews focuses on algorithms and data structures. On your own time, study up with an eye out for applying this knowledge to interviews.
If you prefer video lectures:
If you prefer reading a book:
Alongside either, browse this:
Reading surveys related to your field helps you understand it better. Check out these surveys:
Immerse yourself in aspects of technology culture like programming, software engineering, hacking, and tech startups through subreddits, Hacker News, Medium groups. This will generally help you understand more about what you’re getting yourself into, help you orient your priorities, and start to accumulate a general knowledge of useful resources. In addition, it will help you “talk the talk” when you get to the job application stage, so you can be in-the-know about the tech scene.
Be careful not to spend too much time on this - no more than 30 minutes per day. This is not as important as studying and programming.
At some point along this way, you should be able to get a job. Congratulations!
Keep pushing yourself to improve. Figure out what you want to specialize in and how you can continue to educate yourself.
Set aside some money in your monthly budget to put towards your programming education.
Read Designing Your Life, do the exercises in the book, and try to implement some of the ideas in your life.
By this point, you should be very able to pick out topics on your own! Here are some topics that you can put on your list, if you need any inspiration.
Now that you’re a successful programmer, give back! Hack the planet; free your mind; spread love and joy. Figure out how to help others and improve the world.
As part of this step, please consider contributing to the Electric Hive’s cause by:
There are many good resources for learning programming available online, including plenty of options that are free and open source.
See the learning resources page for a curated collection of learning resources.