🐝 The Waggle Dance 🐝 - a guide to learning programming
What is this?
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.
Who is this for?
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.
Who made this?
This guide was originally written by opheron aka Andrew Chong. 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.
Why is it opinionated and curated?
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.
Why the Waggle Dance?
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.
Level 1: Intro (2 - 6 weeks)
Try programming to figure out if a programming career is right for you.
- Step 1: Pick a first programming language (1 day)
- Step 2: Work through a short intro programming course (14 - 45 days)
- Step 3: Decide if you actually want to become a professional programmer (1 - 7 days)
Level 2: Beginner (3 months - 4 years)
Follow a program to learn and develop useful skills in programming.
- Step 4: Research and pick an in-depth learning program (1 - 2 weeks)
- Step 5: Work through the learning program (3 months - 4 years)
Level 3: Intermediate (3 - 5 years)
Get a programming job, and continue to improve your skills.
- Step 6: Self-teach while you prep and apply for jobs (1 month - 12 months)
- Step 7: Use your work to improve your skills (1+ years)
Level 4: Advanced (1 lifetime)
- Step 8. Do good in the world; hack the planet (1 lifetime)
Level 1: Intro
Step 1: Pick a first programming language (1 day)
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:
- Python: Back-end web dev, data scientist, data engineer
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.
- Extremely popular
- Easiest to get a decently-paying job
- Kind of a quirky language, even with a lot of modern improvements, so:
- It’s a little harder to pick up as a first language
- It can be a little difficult to pick up other languages
- Constant, rapid change in the ecosystem can be tiring to keep up with
- Web development
- Is basically the only language used for front-end web development
- Can be used for back-end web development
- Lots of startup jobs use JS primarily, as do a fair amount of jobs at mid-size and large companies
- Mobile & desktop apps - a small but rapidly growing area
- Very popular
- Easy to learn
- Translates pretty well to learning other dynamic languages, and to a lesser degree compiled languages
- Really useful in technical assessments
- Slightly slower development in the ecosystem (although this is dependent on the specific topic/field)
Python job prospects
- Back-end web app dev
- Data science
- Moderately difficult to get a well-paying job in data science without a college degree due the need to have other specialized skills (good knowledge of algorithms & data structures, statistics, theoretical math, etc.)
Step 2: Work through a short intro course on programming (14 - 45 days)
Decide on a learning medium (videos or text + images)
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 fast as possible.
Tips for learning from this course
- Until further notice, you are now banned from copy-pasting any code. Every bit of code you use must be hand-typed. This will help you ingrain programming syntax into your brain.
- Your goal every day is to work at least 5 minutes per day EVERY DAY. Use a timer to make sure you do at least 5 minutes.
- Use a calendar to make sure you hit your goal every day and remind yourself.
- It is recommended to use a paper calendar and place it in a prominent location. Otherwise, an electronic calendar with a recurring reminder will work fine.
- If you screw up and skip a day or days, forgive yourself and then, that day, return to doing 5 minutes of work every day.
- Set up a time when you are supposed to start working on the course every day. Stick to that time.
Intro course choices
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.
Python video lecture series
Do this course: The Modern Python 3 Bootcamp by Colt Steele
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.
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
Python text + images course
Do this: Think Python
Here is an incomplete list of topics that you should feel comfortable with upon completion of the intro course:
- Data types
- Complex Types (Lists, collections, multidimensional arrays, etc.)
- Type Manipulation
- Decisions, conditions, control flow & loops
- File Input and Output
- Exceptions, error handling and logging
- Object oriented programming basics
On completion of Step 2
Congrats, you should now have a handle on the fundamentals of programming!
Step 3: Decide if you want to pursue a tech career (1 - 7 days)
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.
Level 2 (Beginner)
Step 4: Choose an in-depth learning program (7 days - 14 days)
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:
- Coding bootcamp (3-12 months)
- Courses at your local community college
- Post-baccalaureate program at a university (1-4 years)
- Bachelor’s degree at a university (4 years)
- Master’s degree at a university (1-2 years)
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.
Coding bootcamps: things to consider
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.
- How much is it?
- Do they have scholarships, grants, or fellowships you could apply for?
- Would you need to take out a loan? What would the rates be for this loan?
- Program application deadlines & start dates
- Bootcamps usually run by cohorts so you’re going to be limited by timing.
- In-person or online
- You get a lot more guidance and will likely learn faster
- You have the social pressure of showing up and working every day, so it’s way harder to procrastinate.
- It’s significantly harder to get into a good school.
- You’re limited by the amount of good schools in the area (usually 1-3 in a small city, 3-8 in a big city)
- Less stressful typically
- Easier to slack off and/or procrastinate
- Slower learning pace
- Quality of the bootcamp & instructors
- What do people who’ve gone through the bootcamp or worked at it say about it? How recent are their comments?
- What is the general recent reputation for the bootcamp online, on Reddit, on Hacker News, and on SwitchUp, and Course Report?
- How difficult is it to get in?
- The best programs are fairly selective, with a somewhat difficult interview process. You need to study for these. The ones you can get into without studying are usually not worth your time and energy.
- Duration of the program
- Programs usually run anywhere from 3 months - 1 year.
- Full-time vs. part-time
- Full-time: You’ll learn at a very fast pace, and be prepared to get a tech job much faster
- Part-time: You’ll be able to learn at a slower pace and thus pick up more stuff, and
- What is the bootcamp going to teach you?
- What’s the tech stack?
- What kind of jobs will you be prepared for?
- How much help will they give you in getting a job afterwards?
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.
In-Depth Learning Programs
Check out the five in-depth learning programs listed below, and choose one to work on.
- Free Code Camp
- FCC works primarily through interactive browser exercises.
- App Academy Open
- App Academy Open has a lot of material, but is potentially more difficult to navigate without a mentor.
- The Odin Project
- The Odin Project does a good job of covering the developer tooling ecosystem, and has you work in parallel on your own PC rather than in the browser.
- CS50 is an excellent program, and will ingrain more computer science fundamentals into your learning than the other programs. The tradeoff is that this track will take longer than the other programs to get you job-ready.
- Choose CS50 if you want a solid CS base and you aren’t in a rush to get a job immediately.
- Aalto University’s Full Stack Open course
Step 5: Work through the learning program (3 months - 2 years)
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.
- Git and Github/Gitlab
- Terminal/Command Line
- HTML & CSS
- Testing basics
- Object oriented programming
- Regular expressions and pattern matching
- Using libraries
- Data Structures basics
- Linked list
- Binary search tree
- AVL tree
- Hash map
- Algorithms basics
- Linear search
- Binary search
- Insertion/Selection Sort
- Merge Sort
- Radix Sort
- Depth First Search
- Breadth First Search
- Dijkstra’s Algorithm
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!
Step 6: Self-teach while you prep and apply for jobs (1 month - 12 months)
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:
- Test-driven development and testing frameworks
- Python: Pytest
- RESTful API design and use
- Database usage
- SQL and relational databases: PostgreSQL
- NoSQL databases: MongoDB
- Python backend frameworks
- Django (Batteries-included)
- Flask (Lightweight)
- Javacript web frameworks
- Express (Lightweight)
- Authorization & permissions
- App/Site deployment
- Compiled languages: Mess around with C, C++, C#, Java, Go, Rust, etc.
- Operating systems: Linux, Unix
- Visual Design, UI & UX
- Security & privacy
- Free & open-source software
- Mobile development
- Cloud development: Amazon Web Services
- Roadmap after the Stanford Code In Place program
Search for job and prep for the interview process
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:
Job Sites, Boards & Lists
- Stack Overflow Jobs
- Github Jobs
- Hiring Without Whiteboards: List of companies that hire without whiteboarding
Build a personal site/portfolio
Build yourself a personal site or portfolio page. Add personal projects you’re proud of, with clean code and documentation.
Improve your résumé
Take a look at what Career Cup’s sample résumé looks like.
Practice data structures & algorithms interview questions
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:
- 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.
- MIT’s Introduction to Algorithms: This course is taught with Python
If you prefer reading a book:
- Cracking the Coding Interview: This is often recommended as the interview prep book.
- Grokking Algorithms: This book is in Python, but does not focus on language-specific stuff.
- Problem Solving with Algorithms and Data Structures using Python: The authors provide a free interactive version of the book online, along with video instructions on some in-chapter exercises.
Alongside either, browse this:
Reading surveys related to your field helps you understand it better. Check out these surveys:
Read news and culture
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!
Level 3 (Intermediate)
Step 7: Use your work to improve your skills (1+ years)
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.
- Functional languages: Haskell, Common Lisp, Scheme, Clojure
- Computer architecture: Nand2Tetris and accompanying Coursera course
- Parallel programming & concurrency
- Operating systems
- Programming languages, compilers & interpreters
- Distributed systems
- Machine learning, AI and deep learning
- Information theory
- Cryptocurrencies & blockchain
- Systems Administration
- Discrete math
- Linear algebra
Level 4 (Advanced)
Step 8: Do good in the world; hack the planet (1 lifetime)
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:
- Joining our community
- Mentoring a new programmer
- Building and using technology for social good
This section is separate from the learning plan detailed above. The following is a collection of various resources that may be useful to the learning programmer.
- Free Code Camp and their Youtube channel
- Rithm School
- [udemy-warning][Warning about Udemy course pricing]
- Warning about Udemy course pricing! Please read this important purchasing note: Any Udemy course you buy should cost approximately $10 - $15 as an out-the-door/final price, depending on the “sale” they are currently offering, and you should absolutely not pay more than $15 for any one course. If the course is not “on sale”, do one of the following:
- Search online for a coupon for the course.
- Open an incognito tab on your browser and check if the Udemy course is listed at an appropriate price in that tab.
- Look to see if the specific course is offered on another platform for an appropriate price.
- Wait until the course is “on sale”.
- About Udemy’s shady marketing tactics: The list price of any Udemy course is typically shown as ~$50 - $200, but Udemy runs “sales” (in other words, selling the course at the actual, reasonable price) for most courses that are available the vast majority of the time. This is an attempt to pressure potential customers into purchasing courses through the use of such tricks as displaying a text block that describes the course price as “XX% off” (see this article about deceptive “original prices” and this article about deceptive pricing) along with text that says “N hours left at this price!” (see this article about the illusion of scarcity). For more information on Udemy’s unscrupulous marketing tactics, please see:
- Udemy employees, if you’re reading this, please stop using these crooked marketing and pricing tactics and just set the list price to be the reasonable price. Your marketing and pricing tactics are dodgy at best and unethical at worst, and it’s a shame that your own tactics make your business look bad.
- Khan Academy
- Awesome Resources
- Your Local Library: Don’t underestimate this one! Aside from books, many libraries have subscriptions to Lynda and other high-value educational sites.
- Hackr.io: a collection of programming courses and tutorials
- HyperSkill / JetBrains Academy
- InterviewBit: A Place to practice coding and prepare for interviews online.
News & Culture
General Programming Subreddits
Programming language sub-reddits
Mentors & Communities
Git & Repositories
- Traversy Media
- Also check out this Udemy Course List based on a Traversy Media video
- Also check out this Udemy Course List based on a Traversy Media video
- Become a Full Stack Web Developer
- Wes Bos
- Jonas Schmedtmann’s web dev resources list
- Udemy - The Web Developer Bootcamp 2020 by Colt Steele
- Udemy - The Advanced Web Developer Bootcamp by Colt Steele
- Udemy - The Complete 2020 Web Development Bootcamp by Dr. Angela Yu
Front-End Web Development
- U. Washington’s INFO 340: A book teaching client-side web development
- Frontend Masters
- Modern HTML & CSS From The Beginning
Static Site Generators
Blogs & Content Management Systems
DevOps, Operations & Deployment
- Teach Yourself Programming in Ten Years: Peter Norvig’s advice on teaching yourself programming the slow and steady way
- Programmer Competency Matrix
- p1xt guides
- codeSTACKr’s Web Dev Roadmap 2020
- Game Developer Roadmap
- Data Scientist Roadmap
- iOS Developer Roadmap
- Every Programmer Should Know
- Grow Your Technical Skills With Google
- Association for Coding Machinery’s Coding Bootcamp
- andreasbm’s guide to web skills
Programming & Coding Languages & Programming Paradigms
General resources for programming
- Design of Computer Programs: Peter Norvig’s Udacity course on programming principles
General resources for programming languages
- Free Code Camp
- You Don’t Know JS and You Don’t Know JS Exercises
- JS tl;dr
- JS Vault: a collection of tricky JS interview questions
- Awesome JS Conferences
- React Developer Roadmap
- The Modern React Bootcamp by Colt Steele
- Complete React Developer in 2020 (w/ Redux, Hooks, GraphQL)
- Angular - The Complete Guide (2020 Edition)
- Vue JS 2 - The Complete Guide (incl. Vue Router & Vuex)
- Learn Python
- Full Stack Python
- Automate the Boring Stuff: online book (free/gratis) and Udemy course (paid, although offered free/gratis from time to time)
- How to Think Like a Computer Scientist
- Awesome Python
- Python Cheat Sheets
- Socratica Youtube Channel
- Test-Driven Development with Python
- Python Tips
- 100 Days of Code - The Complete Python Pro Bootcamp for 2021 by Dr. Angela Yu
Django is a batteries-included web framework written in Python.
- The Bootstrap 4 Bootcamp by Colt Steele
Golang / Go
- A Tour of Go
- Effective Go
- Learn How To Code: Google’s Go (golang) Programming Language
- Derek Banas’ Go Programming Youtube series
- Gophercises - Coding exercises with Go
- The Ultimate MySQL Bootcamp
- The Complete SQL Bootcamp
- R for Data Science: A modern take on R used widely in Data Science via the Tidyverse set of packages
- Shiny: Shiny is an R package for creating interactive web apps
- Mastering Shiny: Online resource for learning and developing R Shiny applications. R Shiny is a web application framework
- R Programming - Johns Hopkins University - Coursera: Learn to program in R for data analysis.
- Swirl: “swirl teaches you R programming and data science interactively, at your own pace, and right in the R console!”
Regular Expressions (RegEx)
Design, UI and UX
- sharpen.design: Generates practice design challenges
- UX Tools Survey (2019)
- Antony Conboy’s free design course
- Design Resources for Developers
- Teach Yourself CS by Bradfield CS
- Online Learning Bachelor’s Level
- A Self-Learning, Modern Computer Science Curriculum
- Open Source Society University
- The Open Source Computer Science Degree
- Open Source Computer Science Degree
- Khan Academy CS
- CS Video Courses
- What CS Majors Should Know
- Awesome CS Courses
- Four Semesters of Computer Science in Six Hours
- Crash Course Computer Science
- OpenLib.cs: “A Collection of Free & Open Resources for University Coursework in Computer Science”
- SICP in Python: The classic textbook “Structure and Interpretation of Computer Programs” rewritten in Python
- No Debt Computer Science
- CMU CS Academy for High Schoolers
- CS Textbooks Free Online: A collection of CS textbooks that are freely available online
Data Structures & Algorithms
- Big O Cheat Sheet
- Base CS: Website and Podcast
- mycodeschool Youtube channel
- Algorithm Examples
- Coding Problems
- List of Practice Problems
Computer Architecture and Assembly
- Data School: Youtube channel
- 2021 Python for Machine Learning & Data Science Masterclass: by Jose Portilla
- Complete 2020 Data Science & Machine Learning Bootcamp by Philip Muellauer and Dr. Angela Yu
- The Analytics Edge - MIT - EdX: A course on data analyis and statics, taught using the R programming language
Security & Privacy
- Cybersecurity Base by University of Helsinki
- Awesome Pentest
- OverTheWire Wargames
- Hack This Site
- Stanford’s CS 253 - Web Security
- The Open Web Application Security Project
- Learn Security Engineering
- Cracking the Coding Interview
- Programming Interviews Exposed
- Elements of Programming Interviews
- Grokking the System Design Interview
- Interactive Coding Challenges: in Python
- System Design Primer
- 1-on-1 Questions
Competitive Programming, Coding Challenges
- Interactive Coding Challenges in Python
- TechieDelight List of Problems
Practice App / Projects
- App Ideas
- Project-Based Learning
- r/dailyprogrammer subreddit
- r/beginnerprojects subreddit
- Awesome Project Ideas
- Nifty Assignments
Open Source Contribution Opportunities
Contributing to open source projects is a good way to gain experience and also give back to the community.
- The Missing Semester of Your CS Education
- See also this Reddit post
- Text Editors & IDEs
- Visual Studio Code: popular open-source Integrated Development Environment
- Sublime Text
- RStudio: Definitive IDE for R + Shiny + Markdown Development
- Repl.it: a collaborative code editor
- Git: Industry-standard version control. Learn it. You need to know it.
- File Transfer
- Cyberduck (sftp)
- Forklift (sftp)
- Truck (rsync)
- Transmission (Bittorrent)
- Visual Design
Free Resources for Students/Devs
Technology stack info
- The Book of Secret Knowledge: “A collection of inspiring lists, manuals, cheatsheets, blogs, hacks, one-liners, cli/web tools, and more”