Why I'm revisiting software fundamentals and my learning plan
I'm sure we all agree that mastering the fundamentals is important. This is true for any discipline. In this blog post, I will be sharing my learning roadmap/plan for revisiting the fundamentals of CS/Software and discuss why I'm doing this. I will also discuss with my thoughts about a master's, an actual software engineer job, coding bootcamps, and the bigger picture.
Success is often found by practicing the fundamentals everyone knows they should be doing, but find too boring or basic to practice routinely.
Why go back to the basics?
First, a little background. I earned a Bachelor’s degree in Computer Science & Engineering back in 2019. It took me four years. Between 2019 until now, I got 3.5 years of professional software engineering experience. I also had some career gaps in between due to personal reasons.
I started programming at the age of 16, during my junior year of high school. I am now 28, so that's over 10 years. Though I had a few years in between where I didn't code due to life circumstances.
I feel like I did a decent job at learning the fundamentals during my undergrad. I was motivated, curious, knew how to learn, and practiced deep work principles. I had good exposure to math, algorithms, data structures, basics of programming, computer organization/architecture, networks, OS, etc. You can find my relevant course work on my LinkedIn profile under the Education section.
But as time has passed, I’ve realized there were areas I never got to touch (such as programming languages theory, databases, compilers, cybersecurity, software architecture, etc). These are areas that I feel like learning them would make me a stronger engineer. I'm also curious about learning new areas.
Was my degree not enough? I wouldn't say that. My degree was useful in helping me lay down a foundation. I am extremely grateful for the great professors that taught me during my undergrad. Shoutout to Kelvin Lwin, Daniel, Alberto Cerpa, Florin Rusu, and Angelo Kyrilov. My apologies if I may have missed other great professors. But a CS degree doesn't cover everything. And that's okay. That's what self learning is for.
If I really wanted to, I could go all in on interview prep and maybe land a job in the next 6-12 months. But I'm not. I'm taking a more hollistic, longer-term approach. I will still do interview prep though, as I will mention below in a later section.
I'm revisiting the fundamentals because I want to refine my understanding, close knowledge gaps, visit untouched areas, and revisit concepts with more maturity and context than I had back in school. I'm also rebuilding my career from the ground up and this is a way to get my bases covered. I want to widen and deepen my base of knowledge. I also love learning !
My Learning Roadmap
The goal is to complete the necessary courses from Open Source Society University Computer Science curriculum. Just in case you're not familiar with OSSU, it's a list of online courses meant to mirror the curriculum of an actual Bachelor's degree in Computer Science. It has online courses from top universities such as Harvard, Princeton, MIT, Stanford, etc. The courses are free or cheap.
I started about a month ago, currently taking the courses Systematic Program Design and Mathematics for Computer Science.
Systematic Program Design focuses on how to think systematically about programming. The focus is not the language used but the core principles of program design, which can be applied to any programming language. It's taught using a functional programming paradigm.
Math for Computer Science is also known as discrete math. The topics covered are proofs, structures, counting, and probability. I'm taking this to sharpen my brain. It's also a prerequisite to some of the more math-heavy algorithms courses in the curriculum.
After SPD, I will probably take the next course in its section, which is Class-based Program Design. After Math for CS, I will probably take the course Build a Modern Computer from First Principles: From Nand to Tetris, and continue in that section. But this is subject to change.
I'll keep going down the list for Core Programming section, while concurrently going through another course from another section. Doing just 2 courses concurrently for now but that may change.
I don't plan on completing all of the courses. I'm picking and choosing what I believe to be the most important or relevant, in an order that makes sense. Courses such as computer graphics or machine learning, for example, I might not be taking because I'm not targeting that specific type of job. But if I have some extra time, I might take them out of curiosity.
I won't be taking the calculus courses from the core math section since I already took them in college and feel like I could easily pick up necessary info if needed.
What about a Master's degree?
At one point, I considered pursuing a master’s degree. People sometimes ask me, “Why not just go for a master’s?” The more I thought about it and researched, the more I realized that doing another bachelor's degree instead would be a better investment for me in the long run, especially since my goal is to work in industry in a non-research-related role as a software engineer.
Many might argue that you need strong foundations to complete a master's, and that's probably true. If you are strong in your fundamentals and want to pursue a master's in a topic of interest, then by all means go ahead. I'm not against a master's, it's just not the right fit for my situation.
I think of getting a master's like adding branches to a tree of CS/Software knowledge. And I think of getting a bachelor's as strengthening the trunk of said tree. I already have a bachelor's, but going through another one will make my knowledge tree trunk even stronger, which is more important to me right now because I believe a stronger/bigger trunk may allow for a taller tree with more branches in the future.
Sure, some master's programs teach the fundamentals as well. These are known as knowledge-based Master's programs. For example, Georgia Tech's Online Master's in Computer Science. It's a fine curriculum. But there's a heavy price tag. I could find the same or similar grad course topic online for free and of high quality. If not, then I can find a high quality book on the topic. Money saved.
As for research-based Master's, I have respect for Computer Science research but it's just not a right fit for me and the type of jobs I will be looking for in the future. I'm not interested in academia, with all due respect. I know not all master's degrees make you write a research thesis. The ones that just focus on courses I can replicate for free or a lot cheaper as mentioned above.
I understand the credential aspect of a master's. But at the end of the day it's just a piece of paper. Most important of course is the knowledge obtained from the degree. Although I won't be getting a credential for OSSU, the knowledge is important to me and I have this blog to showcase my learnings and reviews of each course I take. Not to mention I will be putting OSSU on my LinkedIn. I also have the opportunity to earn verified certificates on coursera and edX.
What about a job?
I'm currently unemployed. Yes, a job is important. After all, we study and learn in order to eventually become employed so that we can earn a living. I kinda don't want to start working yet though so that I can focus on this learning path instead. I love having free time.
Long term, I believe this will make me a better overall engineer if I do land an offer later. With a stronger base of core, foundational knowledge, I believe I can reach a higher ceiling for my technical career, which may lead to more money and can make up what I lost from not working.
The money is important, yes. But more important to me is becoming great at software engineering, learning for the love of it, and satisfying my curiosity.
If I was offered a job at a company that's a right mutual fit today though I might just take it. Then, I'll learn these online courses on the side. This will stretch out my learning timeline, which I'm okay with. But it has to be the right opportunity. I'm doing okay with enough resources to keep me afloat for a while without having to work. This is a priviledged position to be in, and I'm grateful.
I plan on doing interview prep along with going through the curriculum. This includes leetcode, system design, mock interviews, etc. This is so I'll be prepared towards the end of the curriculum when I'll be looking for a job anyway.
What about on the job learning? The experience from on the job learning will be valuable, of course. I just don't think many companies will let you use company time to focus on fundamentals learning at a deep level.
They want you to already have strong fundamentals, which is fair, of course. I believe I do have strong fundamentals already, and that I'm good enough now to adapt and perform well in many software engineer positions. But I'm taking a few steps back to try to get to a whole new level.
I might apply for Google Summer of Code though. Haven't decided yet and applications don't open until like March of 2026.
What about The Odin Project or Free Code Camp or Bootcamps or similar?
Those are solid curriculums too. The Odin Project is a free, open-source, and project-based online bootcamp for learning full-stack web development. It provides a comprehensive, self-paced curriculum, guiding users from absolute beginner to building, deploying, and creating a portfolio with real-world technologies like HTML, CSS, JavaScript, React, and Node.js.
Free Code Camp is a non-profit organization that offers a free, interactive, and comprehensive online platform for learning web development and computer programming. It features a project-based curriculum, certifications, a massive YouTube channel, and a community forum to help users secure jobs as software engineer.
A coding bootcamp is an intensive, short-term training program (typically 3–7 months) designed to teach practical, job-ready skills in software development, data science, cybersecurity, or UX/UI design. They focus on rapid skill acquisition, allowing beginners or professionals looking to pivot careers to enter the tech industry without a traditional 4-year degree.
These are all practical and closer to what one would actually be doing on a web-based software engineering job. They seem to be close to what fullstack open is trying to achieve, but they seem to go more in-depth and have a longer time commitment. Fullstack open is under the Final Project section in the OSSU curriculum. So that means getting into practical skills-building is reserved for towards the end of the OSSU curriculum, which makes sense.
I think I'll be fine with just fullstack open. When I get there, I'll look more into The Odin Project and Free Code Camp curriculums to see if there's anything important that I should cover that fullstack leaves out.
Not too sure about bootcamps. From what I heard, they tend to focus too much on the how and not the why. I'm all about the why, which is part of the reason why I'm doing the OSSU curriculum.
Coding bootcamps are often criticized for high costs ($5,000 - $20,000), low-quality training that favors speed over depth, and oversaturated job markets make placement difficult. Critics argue they often fail to teach essential fundamentals, leaving graduates with gaps in knowledge, intense debt, and limited job prospects.
Coding bootcamps are a no for me due to price alone. I'm sticking with OSSU.
The Bigger Picture
This isn’t just about landing a job or checking boxes on a résumé. I’m taking a long-term view.
I don’t just want a job. I want a thriving career as a software engineer. That means investing in the skills that will still matter decades from now: fundamentals, reasoning, design, and adaptability.
By revisiting the core ideas behind programming and computer science, I’m (re)building a foundation that will support everything else I learn moving forward.
Looking Ahead
I'm genuinely excited to learn! I’ll be documenting this entire journey through blog posts, notes, and reflections. I want this blog to serve as both a record of my growth and a resource for others walking a similar path.