16 ms·
Computer Science Curriculum in 1000 YouTube Videos
- maerF0x0 6y agoPretty great resource for those who didn't go to university, but wanted to. I'd say one might learn rust instead of C, and learn python first instead of 2nd... Also IMO UML and those Software Engineering classes are not useful for Bay area styled tech companies.
- anonymousDan 6y agoDo people actually use UML in practice? It's not something I've ever really found useful for my own development. Maybe it's more of a communication tool than a design tool? Or am I being too hasty?
- leeuw01 6y agoI think it also works as a mental tool. It helps you think about the structure of your software.
- stingraycharles 6y agoYes but only pragmatically not dogmatically. Activity diagrams can be an excellent way to reason about and document some more complex processes imho.
- aynyc 6y agoI work mostly in enterprises, I see UML all the time, especially Use Case diagrams and Sequence diagrams.
- maerF0x0 6y agoin my experience sequence diagrams tend to betray the challenges of distributed computing.
- aynyc 6y agoDo you mind explain it a bit more? I use it mostly to document the steps between systems, I don't see how distributed computing changes that.
- maerF0x0 6y agothere's no guarantee that 2 requests kicked off at the same time will arrive or complete at the same time. When time is an axis (often y axis), typically we see parallel lines in sequence diagrams, when in reality they will often cross the latter request will actually arrive/finish before the earlier request. Additionally, any reasonable system will have timeout + retry, but it's not possible to differ btwn timeout and inordinately delayed. Meaning your requests maybe replayed many times, and the system frequently doesn't handle that well
- leeuw01 6y ago> Also IMO UML and those Software Engineering classes are not useful for Bay area styled tech companies. Out of interest, what do you base this opinion on?
- maerF0x0 6y agoLearning it ~15 yrs ago and then never using it again. Anecdata.
- blackrock 6y agoUML is pretty retarded. Hey look. Let’s make system documentation easy by drawing a bunch of stick figure people. Stickman is a bank customer. And he needs to 1. Open an account 2. Deposit funds 3. Withdraw funds 4. Close an account Seriously?
- swat535 6y agoI mean this is from the time when Waterfall was a thing and the "best practice" was let's design the entire system specs upfront and then build it..
- linguae 6y agoI'm not the original poster, but I'll share my opinion. As an undergrad I took two semesters of software engineering at Cal Poly San Luis Obispo (CSC 308 and 309), and as a grad student I was a TA for a year-long senior-level software engineering sequence at UC Santa Cruz (CMPS 115, 116, and 117), which culminated in a capstone project. In these courses we were taught formal software engineering methodologies, with an emphasis on iterative development (at UCSC we taught our students Scrum). However, at the companies I've worked for, which include a mixture of traditional, conservative companies (such as an aerospace company, an "old-school" Silicon Valley enterprise giant, and a traditional Japanese IT company) and large Web giants (like Google and Facebook), the software engineering processes I've encountered in industry have been much more informal. Granted, at both Cal Poly and UC Santa Cruz we learned very useful skills that are very important when writing production software, such as source control, code reviewing, coming up with effective testing strategies, and other things that I use in my career daily. However, we learned other things that I haven't encountered in industry yet, such as writing formal requirements documents and drawing UML diagrams.
- mssundaram 6y agoLearning Rust without the context of what it solves with C seems a bit weird to me. C isn't easy to master but it's a lot smaller language than Rust and easier to get up and running.
- dgentile 6y agoAgreed. Ownership would be way too confusing to start out with.
- Koshkin 6y agoThe interviewer: “In Rust We Trust, of course... But, O Say, Can You C?”
- wrs 6y agoThis is the eternal debate, but man, I wouldn’t start somebody off with a C programming course as #1. Especially if there’s a Python course coming up shorty anyway. And then a C++ course to learn “OOP”, which is much easier to learn in Python. Ouch. I suggest just starting with Python, learning C at some point because it’s universal, and never learning C++ without a specific reason.
- ArikBe 6y agoI think this depends on the student. I do not have a CS degree. I dabbled in Python, but the first programming course that I took was Harvard's CS50 MOOC. I really appreciated learning C because it taught me about the underlying system through concepts like memory management. I agree that Python is friendlier, but I feel like C trains a particular mindset. Python may be more suitable for those who want to get off the ground quickly.
- wrs 6y agoTotally agree you need to learn C before getting too far, but it can make intro programming more challenging than it needs to be. Since this is supposed to be an ML-targeted curriculum it seems like Python is a better start. However, as I said, it’s an eternal debate. At least we have choices!
- ant6n 6y agoyou learn Python to get the basics: what are variables, what are values, what is control flow, what are functions, what are modules, how does it fit together as code to perform tasks. Worrying about the memory and the underlying machine can come later. The biggest problem with Python as a beginning CS course is that it´s not a great language to learn about types (meaning it's more difficult to learn the cluster of related concepts expression, value, type, variable).
- ryandrake 6y agoI guess I have different thoughts about what the basics are. I would advocate to start with assembly, but I’m biased because I started with assembly. Things like what is memory? What is a register? What is the Program Counter? What (really) is the call stack and how does it work in memory? Fetch-decode-execute? Jumps, conditional branches, loops. Address modes. If you know these things, then you know how the computer actually works, and a lot of the mystery of C is behind you already. Then you can start introducing stuff that’s built on top of it all like types, if statements, pointers... build the building from foundation up, don’t start on the second floor and tell the student not to go downstairs yet.
- chopin24 6y agoAny tips on easily making an offline copy of these? I'm afraid by the time I started some of these would go dark.
- nixass 6y agoyoutube-dl perhaps? Not sure in what order the naming will ho
- deleted 6y ago[deleted]
- flicken 6y agoTry this: lynx -dump -hiddenlinks=listonly https://laconicml.com/computer-science-curriculum-youtube-videos/ | grep youtube.com | perl -pe 's/.*http/http/' | youtube-dl --batch-file -
- chopin24 6y agoThanks, this works! It fails when one video isn't found, but gets 60% of the way there. I'll see if I can exclude that one and get it to keep going
- bergstromm466 6y agoHow do we make education more modular? The hope being that a free and open source self-directed system could be suitable (and thus) compassionate/kind to beginners of all kinds and at different skill levels. That it allows many entry and exit points, sort of like a branching of interconnected plateaus and islands. Stepping stones from everywhere to everywhere. Rhizomatic. Cross-connected topics with illustrated and detailed guides. It would be beautiful if it, as well as recording your progress, if the system would also enable you to contribute back to the curriculum, allowing you to create a better suited lesson (an alternative) for the next learner, who now has a choice of two lessons, one new lesson complementing the original lesson. Or it could add a step that was missing. I think some distributed application framework like holochain or DAT would be perfect to build this on. The closest I've seen a modular education system is Ryan Carson's TreeHouse, where there are 'tracks', topics and courses - which are all made up of modular components that are available and reorganized based on the learner's interests/wants/goals.
- dgb23 6y agoBeautiful idea.
- 11thEarlOfMar 6y agoPerhaps the C course is supposed to fill this role, but I'd vote for including a course in assembler/assembly. Not because many students would use it, but because it teaches how a CPU actually functions without abstraction. I've used it only once, and even for that, I was mainly transcribing from a textbook. But understanding assembly was key for me to solve many computing problems over my career. In other programming activities, understanding computing at the assembly level enabled me to realize that the bug I was chasing was actually in a library or, god forbid, the compiler.
- mhh__ 6y agoYou also need to know how the machine actually executes the code. It's not that complicated, but it trains your intuition for where the real optimisations are. C, and assembly as we know it on most architectures, is a fairly high-level abstraction compared to what most CPU cores are actually doing these days.
- synack 6y agoWhen I was in school, that course was called Computer Organization.
- OneLessThing 6y agoI absolutely agree that asm should be taught for computer fundamentals but I really LOL'd at assembly teaching how CPU works without abstraction. There is tons of abstraction below assembly -- see Microcode. It's this mistake in thinking that lets things like spectre/meltdown sit in computers for decades. But for the most part you're right, going down past assembly has not helped me understand __software__.
- konjin 6y agoThere are at least three levels of indirection between memory and registers and there is no language that allows you to access that directly. It lets you see more of the stack but not all of it. Before I coded in assembly for example I had no idea why string operations in C were so lacking compared to everything else. When you realize that you are literally dealing with bytes in an array of variable length the limitations make a lot more sense.
- deleted 6y ago[deleted]
- WalterBright 6y agoWho says we don't live in amazing times? No excuse for anyone not having a top-notch education available for free.
- onion2k 6y agoA lot of people don't thrive with self-directed learning, and even more don't do well without being able to ask questions. There's no doubt that YouTube is an amazing resource but the fact it exists doesn't automatically mean everyone can learn well from it. Those who can are quite fortunate. Those who can't still need good teachers.
- fastball 6y agoThis seems to veer a bit close to the idea of "learning styles", which as far as we can tell don't actually exist.
- WalterBright 6y agoThe point is the door to higher education is not closed due to anyone due to lack of money, connections, etc. All it takes is a working brain and motivation.
- stevegalla 6y agoA lot of college/university course work is openly available on the internet. This includes syllabi, textbooks, class notes, tutorials, homework assignments and solutions. If one wants to learn, for example, algorithms, one does not need to do this in a self-directed manner. Several learning paths already exist. If one is having trouble grasping a specific topic, sites like Stack Exchange, Stack Overflow, Reddit, Khan Academy, and YouTube exist for one to ask questions on. I have had many issues cleared up by reading through previously asked questions, including seeing the person who a theorem is named after answer the question. Is it quicker to ask a teacher a question? Yes, of course. What will lead to longer lasting learning? For me, it's figuring it out on my own. Eventually, one will come to a point where there is no longer an answer key, a teacher to guide you, or a well-worn path to follow, what happens then? People need to learn on the job all the time. Learning how to formulate a question, find the resources to help answer that question, and determine if what you have found answers the question are all key skills people need to learn. It helps to do this in a structured setting, but can be learned through the internet. If self-directed means some people are not good at working without deadlines, then they can form a habit. Set aside time and work through some of the above material. Cal Newport has put out many articles, blog posts, books, and now a podcast on how to learn and be a good student. I'm sure there are many other resources, including the soft-question tags on some of the previously mentioned websites. Old "Ask HN" posts are also a phenomenal resource. So, I think those who are not good at learning on their own really do have a tremendous amount of resources out there. Will some people even after using all of the resources still fail to learn, I'm sure some will. I think many people, myself included, aren't putting in enough effort to really find their limits, or to discover a process that works for them. Yes, for some people they can figure it out, others will have guidance from teachers, friends, or family, but for others many resources exist to learn the process on their own. At the end of the day, it's easier to go on Tik Tok than it is to crack a textbook and grind problems.
- the_arun 6y agoWe have made computer science so complicated for ourselves. It may be evolution I guess. On one hand (1) we have people who write OS, compilers etc., On the other (2) we have folks use them and build applications for businesses. The school teaches us for (1). We learn (2) ourselves at work. I wish schools taught us for (2) as well along with all the necessary soft skills to deal with.
- AltF4me 6y agoI think this is where coding bootcamps are winning...
- u678u 6y agoYeah I think CS is for (1) though and the groups for (2) can do a business IT degree or something like that in a different dept.
- udp 6y agoI think it is a bit reductionist to say (2) can "do a business IT degree or something". Taught CS today - at least at UK universities - is a mix of discrete mathematics, electrical engineering, and software engineering. I think it comes down to the age old debate as to whether a degree is supposed to prepare a student to roll into an industry job or whether it is supposed to be an introduction to academia. An academic purist might argue that these should all be separate degrees because they are different intellectual pursuits, while a company would likely much prefer to take on a graduate with some understanding of all of the above.
- huhnmonster 6y agoIn Germany, we have two different institutions: Universities (identical to US university I guess) and something called Fachhochschule (I don't know if there even is a correct translation for that, lets call it FH). University is focused on covering the theoretical aspect of computers with a lesser focus on practical applications - although they are thought to some extent - while FH is more focused on building applications and real-life systems with a smaller focus on theoretical aspects. The only problem is that FH has long been considered second class and everyone wants to attend university. but in my opinion and based on my experience, many people would be a better fit for FH. For someone deciding whether to attend Uni or FH, it is often not easy because you cannot guess what you are going to do in your work-life and whether you might enjoy research or you would rather go into industry directly. Aside from that though, I think it is great that we have different institutions for different audiences with differing goals. Does something like that exist in the United States or somewhere else in the world?
- orsenthil 6y agoI will need the matrix capability to load them into my brain. Otherwise,time it takes to watch all the videos is not something I can invest.
- fastball 6y agoI watch all YouTube videos at 2-3x speed. Helps me a lot. I also watch a lot of TV shows at 1.5-2x speed.
- legerdemain 6y agoI find that it's more efficient to watch two or more videos at the same time. I also end up working on multiple assignments simultaneously.
- a3n 6y agoI drive a semi truck. I find I can drive more miles if I drive to the shipper and receiver simultaneously. But it really screws up my Google maps timeline.
- legerdemain 6y agoWhy stop at one load of cargo, though?
- fastball 6y agoPeople speak at a much slower rate than your brain is capable of processing.
- tmaly 6y agoI really like this idea, just not for CS, but for any topic. Take a subject matter expert and let them curate a set of free videos to help anyone learn.
- dcuthbertson 6y agoThis is a nice first cut at a curriculum in that it captures a lot of important topics, but it's far too blocky. For example, I'm glad they put computer architecture in the first year, but I don't think there's any reason to go through the entire set of Carnegie Mellon lessons on computer architecture for a computer science curriculum. I think a more subtle approach of introducing the basics, say, for computer architecture, a simplified CPU model of an arithmetic logic unit, registers, and flags, so you have a feel of what your programs are running on. Then get back to programming concepts. Go deeper into computer architecture later. If you really want a curriculum, you have to take the broad topics, present the introductory lectures, then create sections for more specialized topics with links to lectures that go into more depth, and maybe add prerequisites to those sections. update for clarity.
- Havoc 6y agotbh at that stage I might as well register for a degree and get the piece of paper
- pandesal 6y agoInteresting tone of discussions happening in here compared to the same post in reddit.com/r/programming. The comments in reddit seem to be geared toward how this isn’t a replacement of a CS degree with a hint of elitism. I mean, I agree this is not a replacement for a CS degree but they all seem combative and hostile towards people wanting to learn CS concepts via alternative means
- brutusborn 6y agoI find there's a similar culture on a lot of subreddits. You're more likely to find criticism of existing ideas rather than discussion of new solutions. I think it is a function of a relatively young audience.
- dgb23 6y agoI’m self taught, but don’t generally recommend it. It’s really hard work, difficult to get right and I need to make more decisions, which is taxing. It also never stops. Still learning and planning to learn as long as I can. There are upsides though: I learn at my own pace, I can dive more deeply into a topic for a while, I can choose topics pragmatically, and I choose how to learn and test. Now this curriculum: I have a different approach. I like watching videos/lectures, but more as a supporting tool, when I’m tired. I much prefer books, papers and experimentation. Also I feel like the curriculum is all over the place. I agree with the math part mostly but the rest seems a bit like a hodgepodge.
- hikerclimber 6y agothen whats the point of going to 4 year college degree in computer science? there is none I bet. what a waste of money college is? and yet I was required to get a college degree ~10 years ago.
- for_the_win 6y agoWoow, this is awesome man! Thanks a lot for sharing this!!!
- Koshkin 6y agoWell, you could learn much of the modern theoretical physics (some topics several times over) from just 136 video lectures: https://www.youtube.com/playlist?list=PLQrxduI9Pds1fm91Dmn8x1lo-O_kpZGk8 https://www.youtube.com/playlist?list=PLQrxduI9Pds1fm91Dmn8x...
- stakkur 6y agoI always get a kick out of the goofy self-assuredness of 'computer science curriculums'. You must learn calculus and discrete math...oh, and CSS.
- TheRealNGenius 6y agoVideos are a horrible format for learning. At least for me personally. Just give me a textbook.
- schwax 6y agoAlong similar lines, this list links to the best MOOC for each course in a core CS curriculum: https://github.com/ossu/computer-science https://github.com/ossu/computer-science
- jgwil2 6y agoI noticed that this doesn't include a compilers course. I've seen others recommend the Stanford Compilers course on EDX[0] but it looks like audit access is going away this month. Does anyone have recommendations for free, quality compilers courses? [0] https://www.edx.org/course/compilers https://www.edx.org/course/compilers
- inshadows 6y agoI guess this is the evolution of "awesome" GitHub repositories. Instead of just dumping every matching link into README, now a short description is scraped and saved along with links. Not saying this page has bad content, but there's at least one such "curated" list on front page of HN, and I wonder how much of it is for audience / Twitter follower building "profession".
- deleted 6y ago[deleted]
- ethanfinni 6y agoThis website is a joke, made by a recent graduate (23 year old guy): https://laconicml.com/author/laconicml/ https://laconicml.com/author/laconicml/ Really dude, you got an undergrad in CS and you will teach us all these topics? I am exhausted by the available curricula that would make me a computer scientist, data scientist, machine learning guru, Python ninja and whatever else. All that by watching videos, attending online programs, mostly made by people who have zero content credibility yet they are able to put together a bootstrap website and search YouTube for videos. Please make it stop.