Benjamin-Philip

Benjamin-Philip

Thoughts on the Teach Yourself Computer Science curriculum

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;

  1. What are your general thoughts on this list?
  2. Is any topic skip-able? Conversely, is any other essential topic missing?
  3. Do you disagree on any of the book/video suggestions?
  4. Is this a well rounded base, with a lot of relevant topics for further in-depth study?
  5. Are there any other resources you would point me to?
  6. 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:

  1. How do you take fast, effective notes of such dense topics?
  2. How do you organize notes, exercises and projects across topics?
  3. How should you “approach” learning any given topic?
  4. 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?

  1. 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. ↩︎

First Post!

apsori

apsori

Maybe the guide needs to be updated in this age of AI?

Where Next?

Popular General Dev topics Top

brentjanderson
From wikipedia: The zettelkasten (German: “slip box”) is a knowledge management and note-taking method used in research and study. ...
New
PragmaticBookshelf
Craft your dream role at work by guiding your manager to take your priorities into account when making decisions. Ken Kousen @kenko...
New
AstonJ
On my Mac I would just use Apple’s Preview which open’s PDF files, and on the Kindle their standard app. On the iOS devices I am preferr...
New
OvermindDL1
An interesting and yet simple programming question making the rounds the past few days, how does everyone here answer: Given an input f...
New
AstonJ
Have you changed the way you learn? Maybe you started off using docs and tutorials and are now an avid book reader or course watcher? Or ...
New
conwy
I’ve been thinking of trying to apply the concept of “moats” from investing to knowledge acquisition. A business moat is a competitive ...
New
Benjamin-Philip
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 litt...
New

Other popular topics Top

AstonJ
You might be thinking we should just ask who’s not using VSCode :joy: however there are some new additions in the space that might give V...
New
AstonJ
poll poll Be sure to check out @Dusty’s article posted here: An Introduction to Alternative Keyboard Layouts It’s one of the best write-...
New
PragmaticBookshelf
Create efficient, elegant software tests in pytest, Python's most powerful testing framework. Brian Okken @brianokken Edited by Kat...
New
foxtrottwist
A few weeks ago I started using Warp a terminal written in rust. Though in it’s current state of development there are a few caveats (tab...
New
AstonJ
We’ve talked about his book briefly here but it is quickly becoming obsolete - so he’s decided to create a series of 7 podcasts, the firs...
New
PragmaticBookshelf
Author Spotlight Mike Riley @mriley This month, we turn the spotlight on Mike Riley, author of Portable Python Projects. Mike’s book ...
New
First poster: AstonJ
Jan | Rethink the Computer. Jan turns your computer into an AI machine by running LLMs locally on your computer. It’s a privacy-focus, l...
New
AnfaengerAlex
Hello, I’m a beginner in Android development and I’m facing an issue with my project setup. In my build.gradle.kts file, I have the foll...
New
PragmaticBookshelf
Fight complexity and reclaim the original spirit of agility by learning to simplify how you develop software. The result: a more humane a...
New
PragmaticBookshelf
A concise guide to MySQL 9 database administration, covering fundamental concepts, techniques, and best practices. Neil Smyth MySQL...
New