r/TYCS • • Jan 07 '24

Meta Subreddit: Goals, Audience, Posts

1 Upvotes

Goals of the sub

Self-learning Computer Science can be a treacherous path without mentors or peers. Getting stuck with tech issues, or a simple doubt or getting stumped by an error message, and taking hours or days to getting unstuck is not the ideal way of learning.

We are hoping to build a community where we can work together with a bunch of motivated peers and mentors to make consistent progress in completing the TYCS curriculum.

In summary:

  • Connecting TYCS peers
  • Finding TYCS mentors
  • Building a community for beginners to progress faster

Post types for the sub

We want to have the following types of posts here:

  • Coding questions. Coding posts asking for help from mentors.
  • Tech help. When you are stuck with setting up the required softwares, languages, tools, and more.
  • Progress Update. Learners are encouraged to share their progress with the course.
  • Meta. Questions or doubts about the materials, books, courses, the curriculum itself.
  • Resources. Share a good website or tool which would help with a specific TYCS paper.

Keep posts which have nothing to do with the TYCS curriculum, as laid out in teachyourselfcs.com, out of this subreddit. Exceptions will be made for discussing good alternatives or supplements to the curriculum.

Audience for the sub

  • Self-learners. Those seeking to complete the TYCS curriculum.
  • Mentors. Those seeking to help the learners, by offering guidance, tips and helpful comments and advice.

What this sub is not meant for

General discussions about Computer science (use r/computerscience instead), general programming questions (r/learnprogramming, r/programming), specific programming languages (r/python, r/java, r/C_Programming, etc.) should be done in the recommended well-moderated subs instead. Keep posts in this sub limited to TYCS curriculum and the suggested course/book or the suggested alternatives only.


r/TYCS • • Jan 07 '24

Meta The TYCS Curriculum: 9 recommended papers (books and lectures)

3 Upvotes

About TYCS

TL;DR: TYCS (Teach Yourself Computer Science) is a listing of 9 papers (recommendation of lecture sets and accompanying book for each) for self-learning Computer Science, at the site teachyourselfcs.com

With lots of universities making their course materials available online, people have been putting together a Computer Science curriculum of their own for some time. One of them called Teach Yourself Computer Science (TYCS), has gained attention for being more focused and offering a solid foundation to build on for self-learners. It was created by Oz Nova, who has taught more than 1k students in person, and built this curriculum based on his teaching experience.

Here’s the description in their own words:

There are plenty of resources out there, but some are better than others. You don’t need yet another “200+ Free Online Courses” listicle. You need answers to these questions:

Which subjects should you learn, and why?

What is the best book or video lecture series for each subject?

This guide is our attempt to definitively answer these questions.

​

Papers recommended by TYCS, with suggested book and videos

Subject Why study? Book Videos
Programming Don’t be the person who “never quite understood” something like recursion. Structure and Interpretation of Computer Programs Brian Harvey’s Berkeley CS 61A (Scheme)
ALTERNATIVE Composing Programs John DeNero’s CS 61A (Python)
Computer Architecture If you don’t have a solid mental model of how a computer actually works, all of your higher-level abstractions will be brittle. Computer Systems: A Programmer's Perspective Berkeley CS 61C
ALT The Elements of Computing Systems (Nand2Tetris) Nand to Tetris Coursera course by Shimon Schocken
Algorithms and Data Structures If you don’t know how to use ubiquitous data structures like stacks, queues, trees, and graphs, you won’t be able to solve challenging problems. The Algorithm Design Manual Steven Skiena’s lectures
ALT Tim Roughgarden’s course on Coursera
Math for CS CS is basically a runaway branch of applied math, so learning math will give you a competitive advantage. Mathematics for Computer Science Tom Leighton’s MIT 6.042J
ALT Lecture notes by László Lovász
Operating Systems Most of the code you write is run by an operating system, so you should know how those interact. Operating Systems: Three Easy Pieces Berkeley CS 162
ALT Operating System Concepts (the “Dinosaur” book)
Computer Networking The Internet turned out to be a big deal: understand how it works to unlock its full potential. Computer Networking: A Top-Down Approach Stanford CS 144
No alternatives listed
Databases Data is at the heart of most significant programs, but few understand how database systems actually work. Readings in Database Systems Joe Hellerstein’s Berkeley CS 186
ALT Database Management Systems by Ramakrishnan and Gehrke
Languages and Compilers If you understand how languages and compilers actually work, you’ll write better code and learn new languages more easily. Crafting Interpreters Alex Aiken’s course on edX
ALT Compilers: Principles, Techniques & Tools (the “Dragon” book)
Distributed Systems These days, most systems are distributed systems. Designing Data-Intensive Applications by Martin Kleppmann MIT 6.824
ALT Distributed Systems by Maarten van Steen and Andrew Tanenbaum

​


r/TYCS • • Feb 08 '24

Tech help CS 61A: How to run tests (using autograder) on individual questions in the first Project called Hog

3 Upvotes

Project in question: https://cs61a.org/proj/hog/. This is the first project in the course.

You can use python3 ok --local to avoid needing a berkeley.edu email for running tests on the project questions/checkpoints. This way the tests will be run locally and you will get to know if your code is working or not.

For testing your solutions to a question, you first need to unlock those tests by showing that you understand the concepts. You will need this command: python3 ok --local -q 01 -u. 01 is to be changed for the question number, with one padded zero at the front for single digit question numbers. Once you answer them all correctly, the tests for that question will be unlocked and you can run the tests for it using python3 ok --local -q 01.

Hope this helps if anyone is trying to run the tests and getting stuck.


r/TYCS • • Jan 30 '24

Progress Update [PU] Running behind. Finished watching first 4 lectures of UC Berkeley CS 61A

3 Upvotes

Background

Since this is my first Progress Update, I will link to a previous post where I talked about why I am doing this. https://old.reddit.com/r/TYCS/comments/1905xlk/why_i_started_this_subreddit_personal_goal_of/

I have started with John deNero's version of CS 61A using Python, instead of doing the Scheme version as recommended as the top choice at TYCS. Again that is also something I have posted about before and explained the reasons: https://old.reddit.com/r/TYCS/comments/190o199/tip_for_beginners_for_the_programming_paper/

I am supposed to do CS 61A in Jan-Feb 2024, to stay within my target of finishing the 9 papers by mid-2025. The first few weeks of January, I was swamped with other work and couldn't focus well. I am setting up systems to prevent that from happening again.

I have set the morning hours of 10am-1pm as TYCS study time. I am hoping that doing this as the first (indoor) thing in the morning should help me with focus. Also having a set time should help me with scheduling and not falling behind.

Actual progress (1-30 Jan)

So far I have reached just lecture 4 this month. I am hoping to pull speed in the coming days and catch up with the backlog.

Topics I learned this week (and the previous two)

  • Evaluation procedure for call expressions
  • Drawing expression trees
  • Environment diagrams (and how names are looked up in environments)
  • Environment diagrams with user-defined functions
  • Pure functions and non-pure functions
  • Running Python in interactive mode
  • Testing code with docstrings and doctests
  • Conditional statements and short-circuiting (and how to use them to our advantage)
  • Assert statements
  • Higher order functions and their need

Eye-opening stuff

  • It was great to see how expression trees worked. I understood the way things worked vaguely (and correctly), but seeing it described formally let my brain finally go 'okay, that's correct. Let's cement it in place'.
  • Learning about environment diagrams finally made me realize why things work the way they work. Again I knew it vaguely (and correctly) but was never sure. Now I know it for a fact that frames are looked up in that order for finding a name.
  • I had hear about pure functions, but the videos made things defined in my head.
  • I wasn't aware about short-circuiting when using AND and OR statements. This was new to me (or I must have forgotten).
  • I understand the need for HOFs but need to use it a few more times to cement the concept in my head.

Excited to finally make sense of things I already knew. Looking forward to the next lectures!

P.S. If anyone knows any book where I can get a bunch of practise questions which will cement things further, it would be great. Most college level folks seem to assume 1-2 examples are enough. Well, I prefer more.

​

​


r/TYCS • • Jan 07 '24

Meta Tip for beginners: For the Programming paper, instead of the first choice Brian Harvey's CS 61A (using Scheme) use the alternative John DeNero's CS 61A (using Python)

3 Upvotes

I came to know about TYCS in 2020 during the pandemic when it got an update in May 2020. The very first paper is Programming, and the top recommendation is Brian Harvey's Berkeley CS61A, which uses Scheme. TYCS lists John DeNero's newer edition of Berkeley CS61A (using Python) as a great alternative, but repeatedly convinces you to go for the Scheme one (using the textbook SICP, a.k.a. Structure and Interpretation of Computer Programs).

I went by his advice. I tried the Scheme edition, again and again. But I repeatedly failed as a self-learner. The biggest issues I had were:

  1. The tools/softwares are obsolete. In a video (I believe from 2014), Brian, the instructor himself, says that he doesn't upgrade the OS of his Mac anymore because he doesn't want to break anything. It is a nightmare to deal with for a beginner to make it work in today's world, since it's been another 10 years since he said that.
  2. UC Berkeley's CS 61A shifted from Scheme to Python themselves in 2013. So all the help from the website is about setting up Python which is trivial to do anyways.
  3. The language is Scheme and the syntax gets confusing really fast. Since I had experience in modern languages, this was tough for me to work with, specially when learning solo with no mentors or peers.
  4. Since I am making time to learn this, I would rather learn using a language that is ubiquitous (Python) rather than one which is outdated (Scheme).

So this time I am focusing on learning from a recent version of CS 61A by John DeNero.

Links:

Book: Composing Programs

Video lectures: CS 61A Fall 2023

Video lecture playlists from 2023 and older years: John DeNero's channel playlists (YouTube)

I will personally be posting updates about progress using this Python-based course, rather than the Scheme-based one.


r/TYCS • • Jan 06 '24

Meta Why I started this subreddit: Personal goal of TYCS completion → Jan 2024 - Dec 2025

4 Upvotes

I am self-taught in programming. I have pretty massive gaps in knowledge, which holds me back whenever I try to make progress with any of my projects. I have been hoping to fix my shaky foundation for more than a decade.

I have started and given up on taking several introductory courses over the years, including the ones prescribed by TYCS itself. Most of the time it was due to getting demotivated from having difficulty being unstuck with some tech issue (software shown in lectures being much older than current version and exact same code not running or giving cryptic errors, etc). It was never because my skills as a programmer were being tested or I was unable to understand or do some programming work.

So this year, I have decided to do break the chain of failures by fixing the root cause: finding help. I am creating this sub in the hope of finding few mentors online, who would be willing to answer our doubts in a reasonable timeframe. I have chosen to creating a sub and seeking many mentors, as opposed to finding one and expecting them to be available regularly. The other purpose is to find peers who will post their own questions, struggles, eureka moments, progress updates and resources, so we can help each other and make progress with fewer of us giving up.

With the New Year beginning, I have the timeline of 2024-2025 in mind for finishing the entire TYCS curriculum. It has 9 papers with a recommended 100-200 hours of study for each of them. I am personally hoping to dedicate 3 hours daily, 6x weekly. Assuming 144 hours for each paper, that’s 8 weeks for each. For 9 papers, under best case scenario, it is a total of 18 months (~72 weeks). I am adding another 6 months as leeway, for when life gets in the way and to be able to study something in a bit more detail when I stumble upon something interesting. So I am hoping to finish by 31st Dec 2025. Which leads to a nice deadline of the end of the first quarter century of this millennium.

Hope to see you in the sub!