Hacker News new | past | comments | ask | show | jobs | submit login
CS101: Introduction to Computing Principles (stanford.edu)
366 points by tosh on July 10, 2022 | hide | past | favorite | 92 comments



This course looks "fine"; however, I would recommend that anyone interested in exploring CS (or perhaps even if you are a self-taught and very able coder who wants to learn those missing fundamentals ) takes CS50 out of Harvard.

It is easily the most engaging course I have ever taken and it's available for free on edx.org or you can take the "real" class from Harvard extension for a couple grand. You can go into this class as an underwater basket weaver or a strong coder and get a ton out of it.


I think this Stanford course is aiming at a different goal than Harvard’s CS50. Harvard’s course seems to be aimed at people who are coders or want to be better at coding, so you learn about different languages, algorithms/data structures, SQL and such.

The Stanford course, especially the second half, appears to be more in the spirit of liberal arts. It covers high-level concepts in CS (server vs client, how does the internet work, what is encryption) that even someone who never writes code professionally will be able to use. They’ll be better able to read newspaper articles on tech topics, or perhaps more to the point, better equipped to be a PM/lawyer/BD in the tech space.


Yes, I believe CS 106A would be more analogous to Harvard’s CS 50.

https://web.stanford.edu/class/archive/cs/cs106a/cs106a.1228...


> Harvard’s course seems to be aimed at people who are coders or want to be better at coding, so you learn about different languages, algorithms/data structures, SQL and such.

Hard disagree on this one. I learned how to program from CS50 with no prior experience. That introduction got me interested enough to pursue it as a career. I would highly recommend it for anyone who just wants to see what the whole programming thing is all about.


I did not intend to suggest CS50 required coding experience. My comment was more that the goal of CS50 seems to be about making the student a better coder by the end (including the case where the student has no coding experience). That does not seem to be the goal of Stanford’s CS101.


Harvard's CS50 is specifically described as a programming course for non-programmers.


there was too much hand-waving going in with CS50.


I’d recommend CS 61a/b/c from UC Berkeley. I think it’s available online as well. The reason I like these three courses is that they cover the three key aspects of computing — programming, data structures, and machine structures. I find that the last part is often left out because we “abstract” away low level features of computers, but learning even the basics of page tables, caches, instruction sets, timing, etc. is extremely critical to a complete understanding of what’s going on.


I was the most recent instructor of 61A and just wrote up tips on auditing it: http://blog.pamelafox.org/2022/07/how-to-audit-cs61a.html However, I don't recommend 61A for folks new to programming, it's better as a second course.


I took it when I was an undergrad (that was ten years ago, but I hope the spirit remains the same) as my first CS class. It was very tough given my preparation, but the thing I appreciated was that it gave a very general introduction to many high-level concepts in fairly good detail. I felt I had a solid starting point in many things- programming paradigms, understanding data abstractions, levels of abstraction in program design, etc that I don't always see replicated in other introductory material.


I took 61a under DeNero as a transfer with high school APCS and college intro class experience, since the dept didn't let me waive the scheme/lisp part. And I was shocked at difficulty, like "no way kids programming for the first time as freshmen can keep up with his course pace"


Hm I took it under someone else so I’m not sure what it’s like these days. Sad that it has such a reputation.. I was able to ace the course and transfer into EECS my freshman year, so things probably have gotten much harder in the last ten years.


I remember some kind of test to get into it (1997) which asked people to write a recursive function (I think it said something like "please write a recursive function in the programming language of your choice"). If you could do this, you could take CS 61A; otherwise, you were asked to take CS 3.


Alternative to the recursive function question, was also one testing mathematic induction (1999). I didn't know enough CS or Scheme to get into CS61A, but they were fine with getting the underlying concept in a language that was safer to assume people were familiar. (I wasn't lucky enough to have any CS or programming courses in high school unlike most of my classmates.)


Oh yeah, I think that was on the 1997 test too... I think it may have been something like "please write a recursive function in the language of your choice, or prove a property of integers by mathematical induction".

I don't remember if there were suggestions (like factorial for recursion or a summation formula for induction).

At that time it was taught by Brian Harvey. I liked him a ton. I know there have been other excellent 61A teachers, too.


i dont think writing a recursive function is that hard; it takes an hur of instruction to be able to do this.


Some students supposedly require weeks of instruction and/or practice in order to be able to use variable assignment!

If there's a kind of instruction that reliably teaches students as a whole to write recursive functions successfully in just an hour, that will be a great advance for computer science education.


@schoen: there is. the problem with traditional teaching methods is that they start from the ground up, without providing a motivation. I would be seriously worried about the state of a world whose denizens need a week or so to learn variable assignment! :)


Strongly second CS50. I took it when first getting into tech, and it was a very solid starting point to build my CS foundation. I’ve heard from folks I’ve recommended it to that they’ve continued to iterate and improve the course as well.


I honestly don't understand why people keep recommending CS50. Maybe I'm just a slow learner, but I really think that if I had had to learn programming with that course, I would never have learned it - the learning curve is really steep, and it crams way too many languages into a very short amount of time, making you a jack of all trades and a master of none. I also don't understand the obsession of CS curricula to have people implement things like sorting algorithms by hand. This would've really put me off as a beginner.


> making you a jack of all trades and a master of none.

- it's not about learning a language

- I don't think it's crammed either - it covers a lot but everything is explained in a very accessible way from first principles

- if an introductory course was using only one language, you still wouldn't master the language

- being exposed to different ways to do the same thing is very valuable and very underrated for beginners imo because it teaches you to abstract over concepts - when you learn how to read a file, write a loop, sort an array in each one of C/Python/JS, you develop better understanding of the concept of reading/looping/sorting instead of thinking that the only way to do it is the way your first language does it; you begin to develop a sense of which concepts are language-specific and which ones carry over across languages. I think it's better if this understanding happens early instead of late.


> I really think that if I had had to learn programming with that course, I would never have learned it

This is one of the most common misconceptions in general with educational institutions and the general software engineering job market.

Programming is not Computer Science.

Computer science teaches you how computers work, concepts of how encryption works, concepts of security, concepts of memory management, and so forth. More recently computer programming has been added as a part of Computer Science degrees, but actually just a decade or so ago (when I was going through it), you could graduate with Computer Science degree without programming experience at all.

There is no doubt that learning computer science makes you a better programmer, but it is different and it is possible to be a good programmer without it.

Programming is one of the practical applications that benefit from strong computer science knowledge. Just like how taking a human anatomy course or a biology course doesn't train you to become a doctor. But it's pretty important knowledge needed for doctors to be good at their jobs (so much so that we don't let people practice medicine without it).


Quoting someone else in this thread:

> Harvard’s course seems to be aimed at people who are coders or want to be better at coding, so you learn about different languages, algorithms/data structures, SQL and such.

CS50 is definitely somewhere between "comp sci course" and a "get coding quick" bootcamp.


What Computer Science programs were you aware of where someone could graduate with no programming experience? I am unaware of any.


I’ve never heard of one. I refuse to believe a self respecting CS program would let people through without taking some kind of computer organization/low level programming type class where you _at least_ program in some C.


this whole "low-level" thing and C-elitism is very off-putting to the smart folks like us--who are not stuck in the past and want to get on with the future. You don't need low level details to program well--you need a good language like APL, to truly learn how to program.


> smart folks like us--who are not stuck in the past and want to get on with the future

The future has pointers and memory allocation, even if you want to pretend it’s to there and leave the complexity to other smart folks.

> You don't need low level details to program well--you need a good language like APL, to truly learn how to program

We’re not talking about a programming degree. We’re talking about a computer science degree.


@l33t2328 programming IS the language and method of expression in computer science. I agree that pointers and mem alloc is necessary if you want to do research in CS and will continue to be so in the future, but as far as programming (post 2022) is concerned, I don't see why any sane person would want to "get down to bare metal", given the improvements in hardware and language design.


programming is not computer science--but it is the language of computer science.


> making you a jack of all trades and a master of none

This is exactly the point of any introductory college level course. They're never intended to be the end of your education, they're designed to be a broad introduction to most of the different concepts that you will be learning throughout the program.

Even if you're not taking the rest of the program, having a broad overview as a starting point is valuable. You won't "master" anything in 3 months no matter what you do, so starting by going deep just needlessly limits your perspective on how much there is to learn.


CS50 is really good, and the instructor is real rockstar, not a shame to recommend it too. Guess many people expected a course like Codecademy with `print 'Programming is fun!'`.


The instructor is definitely great. Me, however, I prefer to learn in a bit of a slower style, with less distracting acting/performing.


All of these are compelling reasons to take this course. I do believe you've talked me into it.


I remember learning mergesort as a beginner was a really eye-opening experience. Going through the progression of sorting algorithms seems like a perfect way to showcase the power of algorithms- they are easy to implement and are used everywhere. It's easy to forget how magical recursive algorithms are to the uninitiated.


> making you a jack of all trades and a master of none.

Master of a single programming language is a moot concept, it either boils through to other languages or you just memorized the syntax really well.


This is going too far in the other direction. There are absolutely people who have mastered e.g. Java, CPP or whatever with language-specific knowledge. Being an expert on JVM internals won't boil through to Haskell.


Well, being a master of JVM internals does give you a very strong grasp on a very useful basket of concepts for GC and programming language implementations, so I'm not sure I would necessarily agree that there's no transferable overlap. But regardless, neither of these are applicable metaphors for a 101 level CS class—at the introductory level, you're better getting a broader survey of lots of different languages, because learning the transferable fundamentals is more important than learning the specific "trivia" of any particular language.


JVM is essentially project knowledge, if you're writing code that requires you to understand JVM internals really well, unless you're working on JVM directly, something is wrong within the division of labor. Programming with java requires no internal JVM knowledge bare the bare minimal surface ones (execution args, etc).


Why? If you're working on a performance critical application, you need that knowledge. Plenty of HFT firms use Java.


What's the reasoning behind picking Java for a performance critical application over something like C or C++?



We do have CLR, BEAM, HaLVM, and LLVM. Understanding the JVM translates to understanding similar architectures.


Are you saying that beginners should always be taught multiple languages? Why?


That's the whole point of the course. It's designed to be a catchall introduction to CS.

Learning Programming != Learning CS


My experience was the opposite. I went in with absolutely no programming experience. It took me a week to figure out how to do the first problem set (boy are loops ever amazing).

CS50 got me interested enough in programming to pursue it as a career. I have a CS degree now, and work at a well known tech company.

I don’t think the audience is “people who know some programming already.” It is designed for absolute beginners and assumes very little about your prior programming knowledge. I recommend it to any beginner looking to see what computer science is about.


Agreed. I also didn't like CS50 very much, and I wouldn't recommend it to folks. I think people love it because it's entertaining.


Has it occurred to you that your dislike for it may be due to the fact that you're not the target audience, rather than that there's a problem with the course? In your previous comment (since deleted), you noted that you had been programming for a few years before you tried it. It's an introduction to the subject, so you were bound to find a lot of it to be beneath you.

In my own experience working with a lot of brand new programmers, making the subject entertaining is 80% of the battle. Most introductions to CS are unbearably dry and do a very very poor job of motivating further study. The job of an introductory course is to give an overview of what you'll learn going forward and make you want to learn those things, and by all accounts (even yours) CS50 does that.


It absolutely has occurred to me that I'm not the target audience. That said, I still think there's a problem with the course in as much as I don't agree with the method selected.

In other words, CS50 is probably great if it is the one and only course a new person would take. This is due to the broad focus on so many concepts.

However, if it is the first out of many courses, I would not choose such broad focus. I would (and have done many times) create a curriculum based on the student's needs and desires.

That's why I don't like CS50. It's not because I'm not the target audience necessarily, it's that CS50 is overhyped and, in my humble opinion, not suited to be the first course for serious self learners.

By not suited, I mean that there are a number of specifications on Coursera that are a) also free, and b) will lead one better to the goal if the goal is known (which is where most newbies need a mentor). I do not mean that CS50 is unsuitable; I mean that it is suboptimal. In my experience, that is.


Thanks for the substantive reply! It's good to get a different perspective.

I think you may be right about it being suboptimal for self learners. It was, after all, not really designed for that. I disagree that the breadth of the course is a flaw.

One major problem I consistently see with self-taught individuals (including myself before college) is that they have major blind spots, places where they don't know what they don't know. A broad introductory course that intentionally doesn't restrict itself to topics the student is already interested in is the best way I know to quickly turn those unknown unknowns into known unknowns. Whether or not the student chooses to fill those gaps in later with further courses, they'll be better for knowing where the gaps are.


you are right, CS50 is just a mish-mash without a clear focus and a timeline and action-plan for "what's next".


I have been hearing a lot about cs50/cs50x. I will take as a sign and start the course.


can you elaborate on why it is that good? why is it so engaging?


For me, they teach the fundamental (basic) concepts and then have you cycle through a bunch of programming languages week to week to reinforce they are simply the tool and they all have their own pros and cons. When I took it, they had javascript, c, python, php, java, snap, integrating APIs and libs... maybe more.

The course has 2 tracks which are graded the same: "regular" for those new to cs/programming and "hacker" which has a bit more of a challenge to keep it interesting, and you just do whatever one you want to do that week.

Each assignment has additional optional material explaining and reinforcing the concept so if you are a little opaque in an area you can go and study that a bit more before returning to the assignment. Ultimately, there is a walkthrough for each week that gives you about 95%+ of the answer in case you get really stuck. If you understood the concept well enough from the lecture or your own background, you can just blast right through the assignment, or put your own spin on it.

Supposedly this course is responsible for hundreds (if not thousands) of people changing their planned field of study to be more technical due to the huge accessibility of the material to what they call "less comfortable" students.

They also teach you a few adjacent things that are relevant and probably wouldn't be covered by most modern programming courses. They teach you how to use desktop VMs for your IDE. They teach you how to use a basic IDE. They teach you the basics of Linux command line. They teach you what memory leaks are and how to find them. You're graded on style, there is an automated style checker.

For me, I got a kick out of all the sorting algorithms and how it applied to big O notation and software complexity. Previously I understood roughly how it worked but the course went deep enough where I tried implementing some of them on my own "for fun" to see if I could do it.

For my final project, I built a native android app, and although they didn't teach anything specifically about mobile app design, I had enough confidence at that point to knock it out.

On top of all those items, production value of the course seemed huge, very well done.


Well selected material and great quality of teaching. It's for complete beginners and it's very accessible without being dumbed down in any way.


CS50 is a good course but this one has a very useful discussion of open source and licensing issues related to various formats that CS50 seems to lack.


I'd highly recommend looking at the edX course "How to Code: Simple Data" and "How to Code: Complex Data" as an introduction to computer science. Those two classes were created around a solid pedagogy of how students learn to break real world problems down into code. Dr. Kiczales is incredibly good at taking everything step by step and making sure nothing gets left out or missed.


Flagging my two favorite introductions to computing:

How To Design Programs: [https://htdp.org]

A Data-Centric Introduction to Computing: [https://dcic-world.org]


Great suggestions. Thank you.


When a person completes week 4, they'll have learned boolean logic, if/for loops, bytes & variables, and had an overview of hardware from the previous weeks.

If the person is ambitious, that is the minimum required to begin, and it might be worth seeing just how far they can get in Nand2Tetris[0] where a person simulates building elementary logic gates and circuits leading to an also very basic Arithmetic logic unit and simple ram from nand gates.

I wouldn't expect the person with just a few weeks of CS101 to do week 4 of Nand2Tetris where they try out machine language on their machine that leads to building an assembler, and then a compiler, as this eventually requires knowing Java or a similar language, but more power to them if they preview the course and see how much they can understand.

[0] https://www.nand2tetris.org/


This has already been mentioned, but I can’t recommend CS50 highly enough. It literally changed my life. I was doing a music degree and ran into CS50 on Reddit somewhere and decided to give it a shot. Long story short I ended up getting a CS degree and working for a large tech company.


What I ultimately came to realize about all computer science is that all problems are basically figuring out how you will do 3 steps:

1. Organize data 2. Transform the data according to some input. 3. Output a result.

Once you’ve very clearly mapped out your data structures, everything else becomes fairly trivial. Functions are nothing more than turning data from one form into another. Outputs are just data in some new structure that can be easily consumed for some other purpose.

I challenge anyone to find a problem that doesn’t fit this formula.


BTW this is not the intro stanford cs course. Take CS 106A! It is the best intro to CS I've ever seen. This course is like AP CS Principles whereas CS 106A is like AP CS A.


This looks like a very practical course that introduces a lot of tools/concepts valuable for any student in any field relying on the modern computational setup. However, actually learning programming however is just a time-consuming effort and there's no real way around it. There's a whole industry built around 'we can teach you programming in ten weeks' or whatever and it's all nonsense.

Some years ago I was working full-time in a molecular biology lab, and part of the job involved using a lot of computational bioinformatics tools. I knew a couple of CS people who were writing bioinformatics software and they showed me pages of code, and I asked "realistically, how long would it take me to learn to write these kinds of programs" and the answer was always "at least two years of full-time effort" (It was mostly C code they were working with at the time, plus Java for the user interfaces). My personal experience finally learning to program over the past few years is right in line with those estimates.

There aren't really any shortcuts, you just have to put in the hours of work, week after week, month after month, year after year. As with most fields, a lot of the introductory material is outdated for modern industry but since the more advanced technology relies on an understanding of the basics, you can't just leapfrog it, that's like trying to learn calculus without ever taking any algebra, or trying to grok CRISPR without knowing how basic DNA replication works.


Not that I disagree with you but I don't see what the course is promising as anything close to what you juts described and rant about, and neither does it claim that it won't take time. Were you perhaps attempting to respond to someone else's comment?


Are functions part of the course? Functions are both extremely practical for real world problems where code is repeated but with different values, as well as of course being fundamental to the theory of computation.

I very much enjoy introducing my pupils to functions. It is the first time they really get to use the computer as a tool for accelerating their abilities. Up until then, their code has utility in the order of how much they wrote. Functions can let you write a page of code that does so much more.


It is much more programming specific focused, but I still think my favorite intro to programming course ever is the original 1986 Structure & Interpretation [1].

[1] https://www.youtube.com/playlist?list=PLE18841CABEA24090


The impression I get from this schedule is that this is a collection of quite ad hoc topics that are in some cases quite far removed from what I expected to see covered in a course that is intended to introduce computing principles.

For instance, are "For Loops", "If Statements" and "Spreadsheets" really essential to computing, can these concepts be considered "computing principles"?

What about logic? I note there is a reference to "Boolean Logic" as one part of the "Spreadsheets and Data" lecture. What about models of computing, or defining what we even mean when we say "computing"? The lecture notes hint at some of these topics in the final lecture ("Theory and Conclusions"), almost like an afterthought.


In my experience, the huge majority of people who take an intro CS class want to learn how to solve problems with programs and to learn how other people solve problems with programs. At Stanford, almost every single undergrad takes an intro CS class but only a fraction of those go on to major in CS or get a job in software. You've got one class to provide useful information to people - teaching people about models of computation or set theory is not going to capture people's interest or help them meaningfully in the future. But if somebody says "hey, I know enough python to figure out how to split up a huge PDF into individual files, one for each page, then suddenly they are empowered to solve problems.

Same reason we wait until Real Analysis to teach delta-epsilon limits while the engineers are off taking PDEs.


> Same reason we wait until Real Analysis to teach delta-epsilon limits while the engineers are off taking PDEs.

This is very country dependent, we were taught delta-epsilon limits in high school. Maybe not with the same depth, I don't know.


It's a first course in programming, with occasional glances at other relevant topics, whatever the title.

MIT tried to do an intro course which was actually an introduction to principles, but the effect was so harsh that undergrads without previous background in programming were often advised to take a more conventional "intro to programming" couse first. The textbook, "Structure and Interpretation of Computer Programs", is still available -- but the course is no longer taught at MIT, after they decided it was no longer serving the needs of the students.


Thank you for giving me a flashback to 20 years ago, realizing that I couldn't perform in 6.170 because I didn't know Java but there were no Course 6 classes that taught Java.


I agree it's weird, but as someone with a decent CS background...

> What about models of computing, or defining what we even mean when we say "computing"?

... I found all I've learn is worth nearly nothing in industry. Which saddens me and it shouldn't be, but it is so. Really basic principles get useful but only in very high-end areas, stuff that I can barely comprehend (eg. automata for model checkers etc).


> I found all I've learn is worth nearly nothing in industry

It really depends what you work on. Doesn't even have to be high end. When working on performance critical code I was glad about my computer science and math education more than once. And performance can get interesting even at a few million users or regardless of user-count in realtime applications. When writing business logic without performance and scalability in mind, yea, all that knowledge remains dormant. Reality is that there is simply far more business logic work out there than performance critical code.


All my understanding of perf-critical code has come from understanding of the usual - pathological cases for algorithms, memory layout, cache friendliness etc. etc. None of that except perhaps a very little of the first, came from my formal education, it's all been down to me reading up on stuff.

Can you give me an idea of what your CS & maths education gave you that you found so useful for tuning code? Maybe I'm missing something important.


> algorithms, memory layout, cache friendliness

all of this was an integral part of my formal education. Algorithms and datastructures and complexity analysis was mandatory in the undergraduate studies, the lower-level stuff mostly in elective postgraduate classes of my computer science program. From the top of my head also things like operating systems, compilers, networking, vectorization (SIMD), instruction pipelining, branch prediction, threading, NUMA, thread-pinning/affinity that help understanding how my code is actually executed. On the math side set theory, probability theory and analysis also came in handy more than once. Linear algebra I guess if I had to deal with matrices, which is probably relevant in the AI/machine learning fields (not my area of expertise). All of my math education was mandatory undergraduate classes.

Sure, it's well established that you don't need formal education to learn all these things (which applies to most fields, not just CS), but they are certainly part of computer science and taught as part of formal education at I would assume most good universities.

From my experience (which is Germany and Japan, not the US) especially postgraduate degrees are what you make of them. You can learn nothing relevant for performance critical engineering or you can learn a ton.


>> algorithms, memory layout, cache friendliness

> all of this was an integral part of my formal education.

Other than algos, we got none of this.

> the lower-level stuff mostly in elective postgraduate classes of my computer science program. From the top of my head also things like operating systems, compilers, networking, vectorization (SIMD), instruction pipelining, branch prediction, threading, NUMA, thread-pinning/affinity that help understanding how my code is actually executed.

We got compilers. Otherwise none of this - in fact these are not computer science by some definitions. It was pretty much maths at the end. I don't think we were well served in some ways.

> which is Germany and Japan, not the US

I'm in the UK.


> We got compilers. Otherwise none of this

Did you have the option to take the relevant classes as electives in your postgraduate studies? My postgraduate had a single mandatory course and otherwise just required that I spread my classes among 3 of ~7 major focus areas. One of these areas was computer architecture, which taught me most of the low-level things I listed above.

Another thing I forgot above was formal education in distributed systems and databases, especially the postgraduate databases class that covered the inner workings (like transactions, WAL, dependencies, rollbacks, etc.) and distributed databases, which nicely connected with the distributed systems lecture (which dealt a lot with CAP theorem and consensus, e.g. paxos). That's also something you can learn on the job, but the formal education gave a pretty broad background that I would think is hard to learn on the job.

> computer science by some definitions

I guess if there is a distinction between computer science and for example computer engineering they would mostly end up on the computer engineering side of things, which sits somewhere between computer science and electrical engineering. Though the level on which I studied these concepts in our computer science department was to understand how it works, history and state of the art and it's implications on software. It was less about how to create such a system from the electrical engineering side of things.


> Did you have the option to take the relevant classes as electives

Dunno. It was a long time ago. To be fair, a lot of the stuff you mention learning just didn't exist back then - it was a long time ago. Then again, we did a database course and we got no hands-on with a real DB at all. It was all random guff about functional dependencies etc. I learnt literally nothing useful. I know about WAL etc from learning after.

> I guess if there is a distinction between computer science and for example computer engineering

You nailed it. Engineering vs science. The science was taught purely in the abstract, application of it to real problems was even held somewhat in contempt by one lecturer. It could and should have been so much better.


all of that was part of my undergraduate degree in the mid 2000s as part of the core course

(oxbridge)


Which part of the industry do you work in?


IT contractor. Much of it DB stuff. The range of work you do goes from 'sit here and scrub data' to being given a free-ish rein when you've proven yourself, and then you can be very creative.

It's all business-oriented work, as in, we need this ASAP. I'd like to do more research-oriented work, or at least cutting edge. Something that's solving longer term business problems, not just 'get it done yesterday'.


I remember finding out that a Biology major taking an "Introduction to Computing" course had still not touched the keyboard after six weeks. If a course like this helps people without a programming background get started then that seems good to me.


If you look at the "lecture notes", yes it seems ad hoc. After looking through some of the readings, I think this is a fantastic, very comprehensive survey class.


> What about models of computing, or defining what we even mean when we say "computing"?

IMO starting with that is the worst possible way to introduce CS to students who are (statistically) far more interested in programming and software engineering than in CS. Hell, most students in this class are probably there only because it’s a prereq for the class they actually want to take.


How hard does it get later on? This looks very tame and quite fun. In comparison, here in Hungary our "Basic computer science" was filled to the brim with graph theory and was absolutely joyless.


It's a weird porridge of topics.

Just do this instead: https://dcic-world.org/


that books reads like an infomercial to a bad programming language


HTDP by the same authors is a much more solid foundation. DCIC is okay but I feel for a very narrow spectrum of people.


There is an error on the 16th slide of the second lecture: XOR only returns true when the inputs are not the same. (https://web.stanford.edu/class/cs101/lecture02.html#/16)


I like the course, but more than the course I like various recommendation in this post. This is best part of HN.


After learning programming, practicing with leetcode is a good way to learn Computer Science. It will cover Algorithms, System Design and Databases.


This is better plus you learn programming https://www.learncs.online/




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: