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