My Recipe to Depth in Software
While visiting Helsinki, I created a personal 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.
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