Skip to content

Latest commit

 

History

History
539 lines (374 loc) · 28.4 KB

index.md

File metadata and controls

539 lines (374 loc) · 28.4 KB
layout title
default
Learning Guide

also see: resources


Learning Guide

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

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.

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

  • Javascript: Front-end web dev, full-stack web dev
  • Python: Back-end web dev, data scientist, data engineer, data analyst

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!

More info about Javascript and Python

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

Javascript pros
  • Extremely popular
  • Easiest to get a decently-paying job
Javascript cons
  • Kind of a quirky language, even with a lot of modern improvements, so:
    • Some language quirks can be frustrating "gotchas" as a beginner
  • Constant, rapid change in the ecosystem can be tiring to keep up with
Javascript job prospects
  • 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
Python pros
  • 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
Python cons
  • Fewer jobs than Javascript (but still a lot!)
  • 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 quickly 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 and prevents your brain from shutting off when you copy-paste.
  • 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.
    • I recommend you use a paper calendar and place it in a prominent location you will see every day. Otherwise, an electronic calendar with a recurring reminder will work fine.
  • If you miss or 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

Javascript video course

Here are two good free JS MOOC courses:

University of California Davis's Javascript Basics course is good.

If you can't/don't want to pay for the course, here is a free alternative: Udacity: Introduction to Javascript

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.

If you can afford the course, I would recommend the Colt Steele course. I have not yet found a free Javascript video course that I think is as good as this course. (If you do find one, please let me know via comment or pull request!)

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.

Javascript text + images course

Do Free Code Camp, starting with: "JavaScript Algorithms and Data Structures Certification" -> "Basic Javascript" Mozilla Document Network (MDN's) Javascript course is also good.

Python video lecture series

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

Python text + images & video lectures course

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

Beginner topics

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

  • Data types
    • Numbers
    • Characters/Strings
      • Booleans
      • Complex Types (Lists, collections, multidimensional arrays, etc.)
  • Type Manipulation
  • Variables
  • Operators
  • Decisions, conditions, control flow & loops
  • Arithmetic
  • File Input and Output
  • Functions
  • Exceptions, error handling and logging
  • Object oriented programming basics
    • Objects
    • Classes
    • Methods
    • Properties
    • Inheritance

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:

  • Self-study
  • Coding bootcamp (3-12 months)
    • In-person
    • Online
  • Courses at your local community college
  • Post-baccalaureate program at a university (1-4 years)
  • Bachelor’s degree at a university (4 years)
    • In-person
    • Online
  • Master's degree at a university (1-2 years)
    • In-person
    • Online

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.

  • Cost
    • 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
    • In-person
      • Pros
        • 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.
      • Cons
        • 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)
    • Online
      • Pros
        • Cheaper
        • Less stressful typically
      • Cons
        • 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?

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.

  • Free Code Camp

    • FCC covers HTML, CSS and Javascript, and covers a wide range of topics.
    • FCC works primarily through interactive browser exercises.
    • Choose Free Code Camp if you want to aim to be a fullstack Javascript developer.
  • App Academy Open

    • App Academy Open covers Ruby/Rails, Javascript, and HTML/CSS.
    • App Academy Open has a lot of material, but is potentially more difficult to navigate without a mentor.
    • Choose App Academy Open if you want to be a Rails and Javascript developer, and you have access to a mentor/instructor.
  • The Odin Project

    • The Odin Project covers Ruby/Rails (optionally), Javascript, and HTML/CSS, similar to App Academy Open, but has less material and is possibly easier to navigate alone.
    • 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.
    • Choose the Odin Project if you want to aim to be a Rails and Javascript developer, and you don't have a mentor to work with.
  • Harvard's CS50 Intro to CS followed by CS50's Web Programming with Python and JavaScript

    • 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.
    • CS50 uses C, Python, and Javascript.
    • 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

    • Full Stack Open is aimed at people with some experience with Javascript already and focuses only on Javascript.
    • Choose this program if you feel like you have a good base in Javascript and HTML/CSS and want to be able to move quickly on to the next level.

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:

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.

  • Git and Github/Gitlab
  • Terminal/Command Line
  • HTML & CSS
  • Testing basics
  • Recursion
  • Object oriented programming
    • Inheritance
    • Polymorphism
    • Encapsulation
  • Regular expressions and pattern matching
  • Using libraries
  • Data Structures basics
    • Linked list
    • Stack
    • Queue
    • Binary search tree
    • AVL tree
    • Graph
    • Hash map
  • Algorithms basics
    • Linear search
    • Binary search
    • Quicksort
    • Insertion/Selection Sort
    • Merge Sort
    • Radix Sort
    • Depth First Search
    • Breadth First Search
    • Dijkstra's Algorithm

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:

  • Test-driven development and testing frameworks
    • Python: Pytest
    • Javascript: Mocha
  • RESTful API design and use
  • GraphQL
  • Database usage
    • SQL and relational databases: PostgreSQL
    • NoSQL databases: MongoDB
  • Python backend frameworks
    • Django (Batteries-included)
    • Flask (Lightweight)
    • FastAPI
    • Pyramid
  • Javacript web frameworks
  • Javascript backend frameworks:
    • Express (Lightweight)
  • Security: identity management, access, authorization & permissions
  • App/Site deployment: CI/CD
  • 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
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.

  • 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
  • JAMstack
  • Machine learning, AI and deep learning
  • Information theory
  • Cryptocurrencies & blockchain
  • Cryptography
  • Systems Administration
  • DevOps
  • Discrete math
  • Linear algebra
  • Firebase

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

Learning Resources

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.