My Thoughts
I’m a computer science undergraduate student from India, and I’ll be starting my second year (out of 4) of university in little more than a month. I’ve found the courses in Uni to be very superficial and exam-oriented [1], and I would like to go beyond and give myself a strong understanding of at least the foundations of computer science.
While researching a list of topics to self-study over the next 3 years, I came across the Teach Yourself Computer Science (TYCS) syllabus at https://teachyourselfcs.com/. It suggests nine topics along with book and video recommendations that the authors feel "every practising software engineer should know, irrespective of specialty or industry. Looking through the list and their arguments for each choice, it seems like a very grounded line up and there was very little I disagreed with.
I can definitely vouch for the first book in that list, SICP. I started reading SICP in middle school during Covid, and over the course of a year, I was able to work through the first chapter (including exercises). I found the book to be genuinely “mind blowing” (as TYCS puts it), and it gave me a solid base which I used to learn FP languages like Elixir and Erlang, and make meaningful open source contributions in the BEAM community in my teen years. This is inspite of reading only the first of 5 chapters. Unfortunately, I haven’t really been able to get back to SICP since.
My hope is that the items in this list gives a strong base in each of these topics and computer science in general. I’m not yet sure what sub-field of CS I want to work in, and my expectation is that this list would give me the prerequisite knowledge to approach most topics in depth.
I do realize that this is very theory-heavy list, focused on “Computer Science” rather than “Software Engineering” which are different things. I’m focusing on the CS because I have found that I am good at learning “practical skills” from documentation and just using these skills. I’m a moderately active FOSS contributor, and I have picked up some real-world Software Engineering discipline from this. Generally, I find my lack of CS knowledge to be the bigger blocker in the quality and kinds of Open Source work I can do, hence my focus. (Though resources on SE are still appreciated).
Questions
So, here are my questions;
- What are your general thoughts on this list?
- Is any topic skip-able? Conversely, is any other essential topic missing?
- Do you disagree on any of the book/video suggestions?
- Is this a well rounded base, with a lot of relevant topics for further in-depth study?
- Are there any other resources you would point me to?
- What are your thoughts on balancing learning “CS” and “SE”?
Learning Questions
I’m not a disciplined or systematic student, so I have a few questions on actually executing this herculean list:
- How do you take fast, effective notes of such dense topics?
- How do you organize notes, exercises and projects across topics?
- How should you “approach” learning any given topic?
- TYCS budgets 100-200 hrs per topic. Taking the worst-case of 1800 hrs for 9 topics, over 3 years, that works out to 12 hrs a week. If I try to match the pace and courses in Uni, this can double upto 25 hrs a week for some semesters. How do I sustainably balance my self-learning, Uni, FOSS commitments and my personal life?
This is a fairly common problem in India, and is a whole another discussion on the Indian Education System and the Indian attitude to Education in general which I don’t want to get into. ↩︎