[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)