[HN Gopher] Entire Computer Science Curriculum in 1000 YouTube V... ___________________________________________________________________ Entire Computer Science Curriculum in 1000 YouTube Videos Author : nixass Score : 177 points Date : 2021-01-12 20:34 UTC (2 hours ago) (HTM) web link (laconicml.com) (TXT) w3m dump (laconicml.com) | bergstromm466 wrote: | How 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. | orsenthil wrote: | I 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. | tmaly wrote: | I 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. | WalterBright wrote: | Who says we don't live in amazing times? No excuse for anyone not | having a top-notch education available for free. | onion2k wrote: | A 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. | the_arun wrote: | We 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 wrote: | I think this is where coding bootcamps are winning... | huhnmonster wrote: | In 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? | AtlasBarfed wrote: | FH == Community College / 2 year schools? | irrational wrote: | Well, the equivalent for Fachhochschule in the United States | are called Trade Schools. But trade schools typically teach | things like Aircraft mechanic, train engineer, welding, etc. | While I'm sure there are some trade schools that teach | programming, typically you would go to a more dedicated place | like a coding bootcamp. | | Often universities will have separate computer science and | software engineering degrees. The first is more academically | oriented (for those who want to get a PhD in computer | science) and the other for people who want a job as a | developer. | dakna wrote: | > the equivalent for Fachhochschule in the United States | are called Trade Schools | | This is not true. Students can get accredited Master's | degrees at a University of Applied Science. Some of the | Universities even do research. | | https://en.m.wikipedia.org/wiki/Fachhochschule | | I'm not aware of any trade school in the US where students | can get higher credentials than a certificate or associates | degree. | koube wrote: | I think a better analogy in the US would be universities | with an academic focus vs universities with a practical | focus. It's not a codified difference and the degrees you | get are the same, but it exists somewhat informally. | | As an example, in San Diego, the two top universities are | UCSD and SDSU. UCSD is much more prestigious but SDSU | teaches more practical skills, for example while SDSU | biology students have 3 years of laboratory experience, | UCSD students will have 2/3rds of one year of laboratory | experience. Actually labs will not even consider UCSD | students when hiring because they have so little | practical knowledge. UCSD students are expected to go on | to get professional degrees or higher academic degrees. | | In general, in California, "University of California" | schools are known to be academic while "California State | Universities" are known to be practical. This was | somewhat codified in the _California Master Plan for | Higher Education_ , where the top eighth of students | would go to the UC schools and the top third would go to | CSU schools[0]. | | I don't know if other states are the same. | | [0]: https://en.wikipedia.org/wiki/California_Master_Plan | _for_Hig... | heleninboodler wrote: | Maybe the word "equivalent" isn't a perfect fit, but I | wouldn't go so far as to say it's "not true." There's | some overlap in the concept, if not an exact correlation. | I attended a university that had a strong focus on | practical applications to the point that it was often | tongue-in-cheek referred to as a "glorified trade | school." | | Edit: what koube said. I went to a CSU school. | tshaddox wrote: | Hmm, in my view writing operating systems and compilers is also | pretty far on the side of "applied CS" right around building | websites and smartphone apps. But this doesn't strike me as a | problem unless people are really confused and choosing CS | programs in order to get experience building websites. From | what I saw when I was in college a decade ago, even most of the | smaller schools were starting to have special "Software | Engineering" tracts since they recognized the growing | popularity (or at least prestige) of programming jobs. I chose | CS because I was fascinated with the actual science and math, | and I wouldn't recommend anyone with the same fascination to | skip theory courses. | u678u wrote: | Yeah 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 wrote: | I 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. | whateveracct wrote: | a good CS program teaches you that everything is exactly the | same | mhh__ wrote: | Keep in mind that it's almost impossible to teach everyone | everything. | | The people who write compilers still have to learn a lot on the | job because writing a good compiler is a lot harder than | writing a basic one. It's turtles all the way down. | | Ultimately I think teaching you how to write a compiler will | put you in much better stead than teaching you just how to use | one. | pishpash wrote: | Some schools distinguish between computer science and computer | engineering. | dcuthbertson wrote: | This 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. | chopin24 wrote: | Any tips on easily making an offline copy of these? I'm afraid by | the time I started some of these would go dark. | flicken wrote: | Try 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 - | nixass wrote: | youtube-dl perhaps? Not sure in what order the naming will ho | [deleted] | pandesal wrote: | Interesting 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 wrote: | I 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. | hikerclimber wrote: | then 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. | maerF0x0 wrote: | Pretty 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. | leeuw01 wrote: | > 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 wrote: | Learning it ~15 yrs ago and then never using it again. | | Anecdata. | mssundaram wrote: | Learning 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. | anonymousDan wrote: | Do 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 wrote: | I think it also works as a mental tool. It helps you think | about the structure of your software. | stingraycharles wrote: | Yes but only pragmatically not dogmatically. Activity | diagrams can be an excellent way to reason about and document | some more complex processes imho. | aynyc wrote: | I work mostly in enterprises, I see UML all the time, | especially Use Case diagrams and Sequence diagrams. | 11thEarlOfMar wrote: | Perhaps 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__ wrote: | You 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 wrote: | When I was in school, that course was called Computer | Organization. | Havoc wrote: | tbh at that stage I might as well register for a degree and get | the piece of paper | wrs wrote: | This 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. | mekoka wrote: | Until teachers understand that learning programming and | learning a programming _language_ can actually be done | separately, the debate will go on. There 's this mindset that | by teaching c early on you expose students to a whole range of | useful concepts. That may be true, but you also distract them | with useless language idiosyncrasies that have nothing to do | with programming, strictly speaking. | ArikBe wrote: | I 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 wrote: | Totally 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 wrote: | you 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 wrote: | I 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. | opportune wrote: | The thing about languages like C is that they will teach | students to do many things by rote that they aren't equipped | to understand until later. I'm talking about things like | includes, using a compiler, << and other facets of basic I/O, | defining a main function. | | Python allows students to hit the ground running much faster. | Once they learn the very basics, then it can make sense to | introduce something like C, but not require them to | temporarily ignore magic incantations with the promise | they'll understand them later. | jimbob45 wrote: | Puts/gets negates the need for includes and >> isn't in C. | | Also Python has a horrific main method syntax and duck | typing is ultra confusing early on. | makapuf wrote: | Ifmain style main can be omitted for beginners (no syntax | for main). Duck typing can be explained easily : we need | something that has a food method. | jghn wrote: | This resonates with me. When I was an undergrad about 25 | years ago most intro to programming classes were taught in | C. There were a lot of concepts I struggled with at the | time that now I find trivial. In retrospect, what I was | _really_ struggling with was some of the lower level gnarly | bits C exposes to the programmer. | | While it's good that I know how those things work, I did | _not_ need to understand them to just get a basic | understanding of strings, data structures, etc. For | instance it wasn 't that I couldn't grok linked lists, I | couldn't grok pointer manipulation at the time. But that | still meant my code didn't work. | Imnimo wrote: | When teaching new students Java, the first step is "type | these exact lines character for character, you won't | understand what they mean for the next year, but you need | to type them at the start of every new program.", which can | be a little rough. | whjeon wrote: | Personally, I dislike all the 're-learning' process. | However, by 'Python', I had to re-learn quite a few | concepts when I touched C ground. Of course, it was a | 'A-Ha' moment to put in positive way. | znpy wrote: | it's really a big-endian vs little-endian matter, if you | think about it. | | Starting with C means sitting down, thinking hard and | taking the time to understand how the basic model of a | computer works, along with all the issues and annoiances | that come with it. | | Starting with python really means leaving out the details | and just getting into programming and maybe one day you'll | wonder ow stuff actually work underneat. | rhapsodic wrote: | _> Starting with C means sitting down, thinking hard and | taking the time to understand how the basic model of a | computer works, along with all the issues and annoiances | that come with it._ | | Then perhaps ASM would be an even better starting point? | jcranmer wrote: | I TA'd an introductory computer architecture course | (basically, start with a MOSFET transistor and end up | with "here's how you write malloc/free"), which was | students' first introduction to both assembly and C. That | experience helps solidify that you really want to | students' first experience with programming to be a high- | level language. | | One of the problems with teaching is a phase-ordering | problem: what order do you teach the concepts in? As GP | notes, C starts you off with a lot of boilerplate that | isn't going to become relevant until a month or two down | the line. Concepts like functions, libraries, the | insanity that is the C preprocessor are distractions when | your first challenge is just getting people to understand | the mental model of how a procedural program works (i.e., | understanding what x = 5 really means!). On top of that, | C imposes a mental burden of understanding the stack | versus the heap and the relevant memory management | concerns. And then you get into C's string handling... | | I suspect many of the people commenting here are in the | class of people for whom programming was obvious and | easy, and never struggled with any of the concepts. This | class of people will do fine with _any_ language being | used to introduce the concepts, because they 're not | really learning the concepts. Where the language matters | most is for those for whom programming is not obvious, | and they need help identifying which parts of the | material is more fundamental than others. Giving these | people a language that is more forgiving of mistakes is | going to go a longer way to democratizing CS education | than insisting people start by learning how computers | really work. | | That isn't to say that this isn't something that should | be taught pretty early on: far from it, I think a | computer architecture class should be the second or third | class you take on the topic. Delaying the introduction of | C until computer architecture means that you can use C as | a vehicle to introduce all the other parts about | computers that are important, such as 2's complement | arithmetic, ASCII, what the stack and heap are, etc. | blackrock wrote: | In C, you learn to modify a letter to upper or lower case, | by finding its ascii number, and adding to it, or | subtracting from it, a magic number. | | In Python, you just use the .lower() or .upper() function. | | One and done. Move onto your next problem. | | In C, you hope to not trigger an array-index-out-of-bounds | error, resulting in a segmentation fault. Then, not | understanding what you did wrong, and then having to fire | up the debugger to find your needle in the haystack. | | Hours later, you're just like, I just want to modify a | string. Why is it so difficult? | MetalGuru wrote: | I wholeheartedly agree. But I think it's just a matter of | preference for top-down or bottom-up | unethical_ban wrote: | It's the fundamental debate of "are you training to be a | software engineer or a computer scientist?" | | SWE's can get away without understanding many underlying | concepts if they are going to be writing "business code", that | is, handling strings, ints and interacting with databases and | APIs. | | Computer Scientists and those programming on embedded systems | or designing systems/OS/theory themselves, need to delve into | the math, algebra, and lower understandings of computers. | javchz wrote: | Yeah, I think the same. If I started today, I would love to | being with python or even Java/Kotlin as it's better to show | the good things about OOP. | | C it's great to learn the barebones experience with memory, and | as a lang that runs in everything. | | The modern use I could see for C++ it's usually too specific | for a random learner. I would only recommended for people who | like to work in game engines, simulations, networking, embedded | systems or migration of legacy systems, and other edge cases. | | But for learning, I think it's better to learn with a modern | lang, as you will be less distracted learning the quirks of | vitange language, and use that time to learn in parallel a lot | of concepts outside the lang, like algorithms, devops, soft | skills with teams, prioritizing requirements, etc. | harha wrote: | Out of curiosity, is there anything in particular that makes | C++ preferable for simulations? I've been trying to get into | the topic lately - for now I've stuck to python and Julia for | the visualizations that are more familiar to me. | HPsquared wrote: | Performance, I'd assume. Simulations can take a lot of | number-crunching. | deviantfero wrote: | I started with C, and if you don't dive to deep into it, you | can get a pretty good concept of program structure, what a | function is, what a pointer is and all sorts of concepts that | extrapolate easily in other languages. | | I'm grateful to have learned on a strongly typed language | first, the thing about students is that sometimes they're | easily demotivated, my University switched to python after | teaching C first, after learning python there were a lot of | student complaints asking why C was so complicated and why did | they need to have static typing, and it wasn't natural to them | to think about compiling as a normal step in software | development. | griffinmb wrote: | You probably know this, but correcting for anyone reading. C | is generally considered statically but *weakly* typed. | warent wrote: | This sounds like a survivorship bias. I'm willing to bet that | if someone such as yourself (who is motivated to learn C) | started with a weak/duck typed language, you would have | maintained motivation, and later moved onto something like C, | feeling grateful to be learning C. i.e. who you fundamentally | are is not altered by the language you first start learning. | | Now take the reverse. If someone who is not motivated to | learn C started out in Python, they're more likely to stay | motivated, perhaps never learning strong typing. If you start | them on C, they lose interest and the field loses a valuable | addition. | | Not everybody has to learn C or static typing or pointers. | It's okay for people to have a narrow programming/comp sci | scope and still enjoy the field. | superbcarrot wrote: | I think the way Harvard's CS50 course approaches this is really | good. It used to be entirely in C but in more recent years they | start with C for the first few weeks and then move on to Python | and expose you to a bunch of other tools as well. | [deleted] ___________________________________________________________________ (page generated 2021-01-12 23:00 UTC)