waggledance

A learning guide for new programmers

View on GitHub

🐝 The Waggle Dance 🐝 - a guide to learning programming

Intro

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.

Some caveats

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.

The Plan

Level 1: Intro (2 - 6 weeks)

Try programming to figure out if a programming career is right for you.

Level 2: Beginner (3 months - 4 years)

Follow a program to learn and develop useful skills in programming.

Level 3: Intermediate (3 - 5 years)

Get a programming job, and continue to improve your skills.

Level 4: Advanced (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:

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!

More info about Javascript and Python

Below is more information about the languages, to help you make up your mind.

Javascript pros
Javascript cons
Javascript job prospects
Python pros
Python cons
Python job prospects

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

Intro course choices

Javascript video course

Do this course: The New Modern Javascript Bootcamp 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: Udacity: Introduction to Javascript

Javascript text + images course

Do Free Code Camp, starting with: “JavaScript Algorithms and Data Structures Certification” -> “Basic Javascript”

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

Beginner topics

Here is an incomplete list of topics that you should feel comfortable with upon completion of the intro course:

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:

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.

Self-Directed Learning

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.

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.

Beginner Topics

Here is a very incomplete list of topics you should be covering as you work through your learning program.

Tooling

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.

Mindset

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.

Roadmaps

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.

Intermediate Topics

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:

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
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:

If you prefer reading a book:

Alongside either, browse this:

Read surveys

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.

Advanced Topics

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.

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:


Resources

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.

General Resources

News & Culture

General Programming Subreddits

Programming language sub-reddits

Mentors & Communities

Technical Reference

Git & Repositories

Web Development

Front-End Web Development

Static Site Generators

Blogs & Content Management Systems

DevOps, Operations & Deployment

Hosting

Curriculae/Roadmaps

Programming & Coding Languages & Programming Paradigms

General resources for programming

General resources for programming languages

Functional Programming

Declarative Programming

Javascript

React
Angular
Vue

Python

Django

Django is a batteries-included web framework written in Python.

HTML

CSS

CSS Frameworks

C

Rust

Golang / Go

Java

SQL

R

(Thanks, Tyler!)

Regular Expressions (RegEx)

Design, UI and UX

Computer Science

Data Structures & Algorithms

Computer Architecture and Assembly

Operating Systems

Data Science

Machine Learning

Cloud Computing

Security & Privacy

Cryptography

Interview Prep

Competitive Programming, Coding Challenges

Practice App / Projects

Open Source Contribution Opportunities

Contributing to open source projects is a good way to gain experience and also give back to the community.

Linux/Unix

Bash

Tools

Free Resources for Students/Devs

APIs

Technology stack info

App Collections

Career Development

Academia

Non-Programming Topics

Assorted