OSSU Blog 3 - Plan Update
In my last blog post, I discussed my next OSSU run plan. The plan was to take 4 courses concurrently. The courses are CS50, Class-based Program Design, Software Construction, and Math for CS.
After much thinking, I decided to not follow this plan anymore. I came up with a new plan, one that aligns better with my goals. Although going sequentially will make my knowledge base stronger, being more direct and strategic with which courses I take can save me some time and help me get to where I want to go more efficiently.
I'm still going to skim the topics of the previous courses though, just to get a basic idea of what concepts are covered, and to get sort of a landscape or big picture view. Maybe I'll remember some of them and can revisit if I need the concept later if my brain thinks it's important.
IMPORTANT NOTE FOR OSSU LEARNERS: I don't recommend doing what I did if OSSU is your first Computer Science curriculum. Skipping ahead like I am can lead to struggle later due to potentially weaker foundational pre-requisite knowledge structures.
However, choosing a course from outside the curriculum can be okay and beneficial. It depends what course it is and the quality of it. With enough research, one can get an informed opinion to decide what's best for them to take, whether it's sticking with OSSU or a different curriculum or mixing.
The reason why I believe I can do this is because I already went through a Computer Science degree at a university and have a few years of professional experience, so I have somewhat solid base of foundational knowledge structures/networks that allow me to pick things up easier and skip courses that are similar to what I've learned before.
Still, I have to be humble and careful. I am not perfect or claiming to know it all. There's always room for improvement, and I can definitely benefit from taking all the courses still.
I am using discernment based on my experience, and I have different goals that I want to accomplish. If I had all the time in the world, I would go sequentially in the original ordering. But I am trying to be more strategic based on my specific goals and time frame.
Of course, I would be better off long term if I took the recommended courses in sequence. But there's a tradeoff here. I am sacrificing wider, stronger, foundational knowledge structures for more direct knowledge structures that are closer to my specific goals. There's also the time tradeoff. By going more direct, I am saving time.
By directness, I mean knowledge/skills closer to what you would be doing for the software engineer job or for your specific goals.
OSSU is designed to go wide (foundational courses) then direct (fullstackopen, etc.), with some directness along the way (MIT Missing Semester). I think I have enough wideness to be able to go more direct sooner.
Eventually, I do want to revisit the original ordering, especially because I really want to take Programming Languages part A/B/C courses. But that will have to wait.
There's also the thought that I can get somewhat diminishing returns from going through a CS degree again. There's still a lot of value in going through a CS degree of course, because of star courses like Programming Langauges parts A/B/C, and just the fact that I would be getting different perspectives from high quality courses, thereby strengthening my knowledge structures. But it's a huge time investment.
Every individual is different, with different knowledge structures, goals, time frames, etc. I am choosing to tailor the courses I take based on my particular background and goals.
I am also considering a hybrid approach of doing both more direct learning along with foundational sequential learning. For now, more direct.
Stick with the recommended OSSU ordering unless you have a specific reason to modify it. But at the same time, be open to seeking alternative courses, or mixing things together. DYOR and ask experienced folks in the discord or elsewhere to help you make an informed decision.
End OSSU learners note.
One my next goals is to write a desktop app. I chose Electron as the technology, which uses JavaScript/TypeScript. Before I create this app, I want to build any related foundational knowledge. So I decided to instead take the following courses:
- MIT Missing Semester course
- Software Construction - MIT version, SP2026; CMU version, SP2024
- Stanford Algorithms Specialization from Coursera
For MIT Missing Semester, I plan to go through all the previous versions in order, which are 2019, 2020, then finally 2026. There's a good chance the knowledge learned from here can be applicable to the process of writing my desktop app.
For Software Construction, will be taking the MIT one first, then CMU. There is some overlap with Class-Based Program Design and maybe some of Object Oriented Design from what I can tell.
I think OSSU used Software Construction in one of its iterations years ago, before the NEU courses. It seems like Software Construction could fit in around Class-Based Design, so I'm not jumping too much ahead in ordering with this course.
If you want to strengthen fundamentals even more, maybe some extra credit would be to do Software Construction course right after CBD. The 2015 MIT version on OCW is in Java, and has homework assignments.
Unfortunately, there is no access to the homework starter files in the more recent MIT Software Construction courses. For the CMU version, the labs are open, but not the homeworks. That's a drawback, but I still think I can extract enough learning value.
And I am taking Software Construction because it uses TypeScript, which is what I'll be using for the desktop app idea.
I believe the algorithms course series will help me implement the desktop app, because there's a good chance I'll be implementing some sort of search algorithm(s).
After taking these courses, I will then focus fully on the desktop app, learning whatever comes up then on an as-needed basis. If I come across a concept that I am not familiar with, I will go into a rabbit hole to build this knowledge then circle back and use it. This could happen in the algorithms courses. Maybe there's some discrete math concept I come across that I am not familiar with. So then, I'll drill in on that, build the missing knowledge, then come back.
I am also working on learning other things, like social media, business, marketing, fitness, etc. so what I plan to do is spend maybe like 2/3 of the day on OSSU, then in the evening learn that other stuff.
Using this path instead, I am being a little more direct and strategic with my learning.
Here will be the schedule:
Monday: MIT Missing Semester
Tuesday: Software Construction (MIT first)
Wednesday: Algorithms
Thursday: MIT Missing Semester
Friday: Software Construction
Saturday: Practice free recall and review what I learned throughout the week. Go on walks to process thoughts. Maybe write summaries of what I’ve learned using free recall and reviewing if needed. Summaries with analysis.
Sunday: Rest day, study the Bible, do low intensity tasks
For the following week, it'll be Algorithms, then MIT Missing Semester, Software Construction, repeat.
As before, I will log my time spent on each course. I’m logging my time as a way for me to gauge my level of effort each week and compare with my benchmark of at least 20 hours per week. It’ll allow me to see what I’m spending time on and keep myself accountable.
The hours spent are not the best indicator of learning, because you can spend many hours passively learning, which is not very effective. What’s important of course is what’s actually done in those hours. That is, deeply processing information, active learning, or deliberately practicing.
Let’s see how this goes. Will post an update sometime during the next few months or at the end of this OSSU session. I have enough knowledge to move forward now. Will probably start tomorrow.