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 — I'm sharing it here for anyone interested to do the same.

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, aim high. Set insane goals. You can achieve things much faster than you think. Shorten your expected timeline by 10-50x.

  • Learn backwards. Start with building what you want to build. Try building things, identify knowledge gaps and learn what you need to learn.

Essential Skills

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

  • Use Unix. If you're on Windows, set up a dual-boot with Linux. Learn the command line - it's your most powerful tool.

Computer Science Fundamentals

  • First Principles. Start from the ground up to truly understand how computers work.

  • Digital Logic. Study transistors, logic gates, and how they form the building blocks of computers. Practice with tools like Verilog.

  • Computer Architecture. Understand CPU design, memory hierarchy, and how instructions are executed at the hardware level.

  • Assembly & Machine Code. Learn how high-level code translates to machine instructions.

  • Compilation. Understand how programming languages are compiled and optimized.

Resources:

Systems Programming (C/C++)

  • Core Concepts. Master variables, control flow, and data types.

  • Memory Management. Understand pointers, stack vs heap, and manual memory handling.

  • Program Structure. Learn about compilation units, linking, and code organization.

  • Edge Cases. Handle integer overflow, floating-point precision, and other low-level concerns.

DSA (Data Structures & Algorithms)

  • Essential Algorithms. Searching, sorting, and graph traversal.

  • Core Data Structures. Implement and understand:

    • Arrays and Linked Lists
    • Stacks and Queues
    • Trees and Graphs
    • Hash Tables
    • Tries
  • Analyse. Learn Big O notation and algorithm complexity.

(OOP) Object Oriented Programming

  • Classes and Objects
  • Inheritance and Polymorphism
  • Design Patterns
  • SOLID

Python

  • Be grateful
  • Just hack projects
  • NumPy, Pandas
  • Plotting / Data visualization
  • Machine learning basics, sklearn

Networking

  • TCP/IP Protocol Suite
  • DNS and HTTP
  • REST
  • Security Basics

Web Development

  • Frontend (HTML, CSS, JavaScript, React)
  • Backend Frameworks
  • Authentication & Authorization
  • Database Design
  • API Development