My Recipe to Depth in Software

April 9 2024

While in Helsinki, I created a roadmap to anchor my computer science and software engineering fundamentals. Here’s the plan I’m following to gain a deep understanding of computers — decided to share it here for anyone interested.

My learning framework

  • You can learn anything. The most complex concepts in the universe are built on top of basic ideas, that anyone, anywhere can understand.
  • Move fast, break things & aim high. Set an insane goal or timelines. Break stuff. You can make things happen way faster than you think. Shorten your expected timeline 10-50x
  • Learn backwards. If you really want to build something. Try to reverse engineer what you want to build. Try to build the thing, find out what you don't know, and try your best to learn it.

The basics

  • Search skills. Learn how to properly find answers to the question you are asking. Master how to Google & craft prompts that get you what you want.
  • Get Unix. If you’re on Windows, dual-boot with Linux. Learn key commands and experiment with the shell.

The Foundation

  • Start from the ground up. Understand computers from first principles.
  • Transistors, logic gates and flipflops. Study how transistors form logic gates, which in turn build circuits. Try designing basic circuits with a tool like Verilog.
  • Explore CPU and memory. Study computer architecture. CS50 has a pretty good lecture on this.
  • Machine language and assembly. Find out how instructions are executed and how they translate into machine operations.
  • Dive into compilers and programming languages. Understand how code is compiled and what that means for the CPU.
  • Useful resources: geohot course, fromthetransistor.com, sebastian lague's series, CS50.

Get close to hardware with C/C++

  • Fundamental building blocks. Learn how to use Variables, conditionals loops and data types.
  • Compilation & structure. Understand the differences between source code and machine code, learn how to organize and share stuff between multiple files.
  • Memory Management. Learn about pointers and use them. Understand memory management techniques, heap & steak, I/O operations.
  • Annoying but important. Learn about integer overflow & floating point impercision.

Data Structures and Algorithms (DSA)

  • Core algorithms. Study search algorithms and sorting methods.
  • Foundational data structures. Get familiar with queues, stacks, linked lists, trees, and hash tables.
  • Other. Explore graphs, tries, and Big O notation.

Object-Oriented Programming (OOP)

  • Classes
  • Decorators
  • Inheritance
  • Methods
  • Overloading

Python

  • Be Grateful
  • Hack Projects, build stuff, have fun
  • List, Tuple, Disctionary, Set
  • numpy, math, how to plot stuff

SQL and Databases

Learn, sql and how to interact with databases.

  • Tables
  • Types
  • Statements
  • SQL Injection

Network, learn how data flows across networks

  • Routers
  • TCP/IP
  • DNS
  • HTTP
  • GET POST
  • How the Web Works

Rust (optiona)

Web Development:

  • HTML, CSS, JS
  • Frameworks
  • Routes, Decorators, Requests
  • Sessions, Cookies
  • Authentication
  • Middleware

Data Science:

  • Numpy, Pandas