3 minute read

A free online, software education

I have been of the belief that software takes too long to learn. I am still learning, and often think I am not good at it!

Goal of this guide

This is a curated list of free software courses in exactly the order I recommend studying software to effectively.

This guide is targeted toward making anyone effective in the field. This list can be used starting as early as 12 years old.

  1. 10 years old is appropriate for Scratch.
  2. Python for Everybody can be started at 12 years old

The list assumes zero prior software experience or understanding.
Anyone could follow this guide and have a rewarding and high paying software career as there are still not enough strong engineers to meet demand.

What is here

Most of this applies for non-CS graduates who wish to be experts.

Without the complete set of these courses completed you can not be considered a strong software engineer as all of these are undergraduate courses and don’t cover many important practical applications of software.

To work in software, one only needs to be proficient enough for the task at hand.

The List

Everything on this list is free.

Professional entry level

  1. “Scratch”: The best early beginning
    1. Learn “Scratch” the MIT language for kids programming; videos on YouTube.
    2. Tutorials explanation: Tutorails link
    3. Tutorials lightbulb on this page: Scratch Editor
    4. YouTube videos: Scratch Game programming for Young Adults
  2. Python: Beginners Python with Python for Everybody.
    1. Coursera: Python for Everybody
    2. Sign up for Coursera and take those 5 classes for free.
    3. After this you can almost get a job.
  3. CS 50: Harvard Freshman Seminar
    1. CS 50 on EdX link
    2. Take the venerable CS50 for free on EdX or online Harvard.
  4. Stamford Java: Freshman year
    1. CS106a: Freshman year Stamford Java See.stamford.edu
    2. This course gives you a solid intro to Java and good practical foundations.
    3. One you reach here you have done both Harvard and Stamford freshman year courses.
  5. Stanford 106B: Abstractions
    1. Second semester freshman year Stamford
    2. Abstractions at see.stamford.edu

You will be able to find an entry level job at this stage.

Senior level software education

To become strong you must be an expert at these courses and materials. Completion of all of these and the ability to teach each of these courses should be a requirement to be a senior software engineer.

This is different from taking the courses; it means relative mastery of the material at an A+ level and the ability to TA or teach any of these courses.

  1. University of Brown: Threading
    1. Threading is important for Java server side and life.
    2. Repeat this process once; revisit 5 and 10 years later, repeat
      1. Watch the YouTube lectures by the authors
      2. Read the book
      3. Watch the lectures again
      4. Read the book again.
    3. Videos
      1. Maruice Herily intro to Threading
      2. [Nir ]
    4. Book (buy the book, The Art of Multiprocessor Programming)
      1. $22 rental for 3 months
      2. Read the book and try to do the exercises; grasp everything
    5. Mini-courses from Brown
      1. Watch the Transactional Memory and Locking from Maurice and Nir respectively.
      2. https://neerc.ifmo.ru/sptcc/courses.html#shavit
      3. Watch any other goodies in here, looks strong; I found this today.
  2. Princeton Algorithms 1 and 2
    1. Some of the most incredible lectures ever
    2. Necessary to be an effective database user; as you understand what they do internally
    3. Algorithms I
    4. Algorithms II
  3. UML Design: Larman
    1. Buy and read the Craig Larman “UML and Patterns” book
  4. Understand “Refactoring” code
    1. Refactoring by Martin Fowler
    2. Read and understand refactoring by Martin Folwer
    3. Study the automated refactoring built into IntelliJ
  5. Designing Data Intensive Applications
    1. Read the O’Reilly book and study it
    2. Read the code for Postgres and study the design
    3. Book
    4. Study Apache Druid and what is better at than a database, and why
    5. MIT operating systems online
    6. Operating Systems: Three Easy Steps - https://pages.cs.wisc.edu/~remzi/OSTEP/
    7. MIT offers operating systems for free; it is worth taking online.

Practical knowledge and application

Interviews are generally tests of practical application of the concepts and theories above. Passing the interviews is good but better is understanding the problems that are asked in interviews. In studying for the interviews you become a much stronger programmer.

  1. Design books
    1. System Design Interview, Alex Xu
  2. Cracking the Coding interview (The green book)
    1. Google asks you to prepare by reading this
    2. Cracking the Coding interview 2023
  3. more to come…

Appendix

Other interesting (have not taken these myself)

  1. PBS: https://www.youtube.com/watch?v=O5nskjZ_GoI
  2. Socio-Software methods: Socio-software

Updated: