Jonathan Blow on computer science curriculum

preview_player
Показать описание
If you have questions, you can come to one of Jon's streams:
Рекомендации по теме
Комментарии
Автор

For those interested:

- Time Complexity;
- Understanding different programming paradigms;
- Understand recursion;
- Understand boolean logic (very well);
- Algorithms:
- Sorting algorithms;
- Popular Algorithms;
- Operating Systems:
- What it is;
- How it works;
- What a File System is and how it works;
- DataStructures:
- Understand how they live in memory;
- Some basic datastructures;
- How to build, navigate and isnert into a binary tree;
- How floating points work;
- Databases:
- What it is;
- How it works;
- Concurrency;
- Normalization;
-Data races;
-Implementing Malloc;

edwardteixeira
Автор

I want to emphasize: Learning by doing is by far the best way to learn programming. Learning endless theory first and applying it months or years later is a waste of time. One needs to accrue experience, and the actual meaning of it is, beyond learning how to do the craft, learning all the little things that cannot be conveyed, because they are numerous.

For example it's one thing to learn how sorting algorithms work, but it's another to create your own algorithms AND do them right. One time I made a web crawler that had algorithms for decision making (quite some math + fine-tuning formulas and parameters). As I worked on it, its efficiency went from ~30% up to ~90%, and ultimately to ~99%.

Just today I created a checksum algorithm to create 2 bytes (ushort) as an output from an array of bytes. It went from ~1.5% failure rate to 0%. I use it for quick checksums in UDP packages btw. I didn't want to "waste" more than 2 bytes for it, because I think that's sufficient and I want to minimize package sizes. Doing that is crucial for what I do.

brianviktor
Автор

i like how the list just keeps growing as he goes on

HelloThere-xsss
Автор

I learned most of CS by myself while trying to solve real problems in other fields and doing small passion projects. I have done everything from implementing concurrent zobrist hash tables for GPUs to writing modular synthesizers on Arduino.
IDK, you just have to want it and do what is cool and interesting, instead of reading the "list of top 10 most sought after computer languages in 2023"

KilgoreTroutAsf
Автор

We had a teacher so bad that one day he was saying something like "to do X we have to do Y" and the next slide shows "to do X we can never do Y" in huge bold letters, and we weren't even surprised he had made this mistake. At the time I figured he had just downloaded some slides and did a poor job rehearsing them. He barely understood what he was talking about and nobody ever asked him for help, not even those who struggled with the absolute basics. He was the husband of the headmaster, so we figured he was only employed because of nepotism. That was in 2011.

Muskar
Автор

linear algebra done right by sheldon axler is a banger. That whole line of yellow Springer books on math is solid.

danight
Автор

He basically just described the computer science curriculum at most schools. If you get a computer science degree you will learn about all of the things he said + some additional math classes (linear algebra, calculus, etc.) + some gen ed classes which aren't really relevant but make you more well rounded. And that pretty much sums it up.

catsby
Автор

I used to be in contact with a guy who was a PhD computer scientist who worked with a bunch of other computer scientists at a large financial institution who showed real disdain for programming. He said something to the effect of "once we've figured out what to do, somebody else can go and program it, because that part is really not interesting". At the same time this team of elite PhD computer scientists did find something interesting to program, which was a self healing system written in Prolog which was supposed to replace any manual labor involved in restoring systems to health. It was so entirely unrealistic that I wouldn't even know how to begin to address what an enormous waste of time that project was.

lobovutare
Автор

In germany we have a kind of apprenticeship, that does pretty much, what you say. You work for a company and get lots of programming experience there while simultaneously going to school every few weeks where you learn about all that theory stuff. They don’t dive too deep, so you have a good starting point to know what to look for, when you need it. The hole thing takes 1.5 to 3 years depending on your prior education and your progress. Also you earn a little money as you are doing real work on the way.

The quality changes from employer to employer and from school to school. Also they changed the system up a little last year. But I had a great experience with that system

Marienkaeferisback
Автор

I feel like if I had a better grasp of what was going on with computers and programming when I was younger I could've compressed 15 years of study and practice into 2 or 3. So many times in my life I started a game and felt I had all the puzzle pieces/money I needed only to find out some idea doesn't scale 2 months in, or that I really hadn't planned as well as I thought I had. All the prep in the world can't prepare you for something you didn't foresee. Just code!

malusmundus-
Автор

Nand2tetris is a great book/course that covers many things he's talking about here, including learning by actually programming

CianMcsweeney
Автор

I went to school in the 70's. Very few schools had computer science departments or degrees. Exceptions were places like MIT. Science classes used computers but programming was something that you figured out on your own.

My own experience interacting with CS professors is that they don't seem to know the important stuff needed to create good code. They know a lot of abstract things, some of which you mention are a waste of time. Even time complexity is not important in the way it is taught. You don't need to know that your algorithm is O(N^2 log N ) if there is a better algorithm that is O(N). All you need to know is that the latter is much better, and you don't need to evaluate the time complexity to figure this out.

I've also had a couple of incidents that suggest that CS professors are intimidated by people who do know how to program well.

mitchellschoenbrun
Автор

I literally learned everything he mentioned here while getting a computer engineering degree, not sure what “other bullshit” he’s referring to. You can’t learn all this in just one year unless you immediately understand all of these topics without effort. He probably did, so good for him, but 90% of people can’t.

twostepRMX
Автор

One thing I found weird was that I was past my master degree and into my first job before I got a proper understanding of things like HTTP protocol and how the web works.

As I've spent most of my career getting server applications to perform better in one way or another that's quite a thing.

DanTrue
Автор

My undergrad covered all you mention + a ton of math (mostly linear algebra) + lots of "go code" classes (I took about 5 classes that were just "go make a game"). When you combine all that four years genuinely felt short. But I also had to take a bunch of liberal arts classes for my scholarship so that really stretched me thin

monawoka
Автор

Thanks for this. I’m completely new to all of this. I wanna give it a shot because it’s something I really want to learn. Saying you only need a semester to a year to learn makes it seem practical/doable to me

elbowjuice
Автор

A really good list, some which I only realized was needed after spending too much time at uni. There are some more things I would add though, but that could be because my specific interests. For example I would add learning the network stack and some general security if you want to work with networks instead of games like Jon.

Olodus
Автор

My university had this exact problem local companies loved the technical skills the graduates had, but writing and soft skills were poor. All they did was introduce some classes that had stronger soft skills being required and it fixed the problem.

Most people would mark those moments as bullshit, but it was what employers requested of the school. If the school doesn't produce good *enough* graduates the school can't survive, and the program would collapse.

redhawk
Автор

i want an online JB programming crash course

Sibicle
Автор

People act as if getting a degree is solely about what is on the curriculum. But having access to a more collaborative learning environment, networking on easy mode via something like an industrial liaison board, and the employability you gain just by having that piece of paper are all invaluable tools for getting on in life if leveraged properly.

Not to mention higher education has massive social/health benefits, it's a safe route to independence, it gives you time and space to try things out in a low-risk environment...

The debt is an absolute bitch and there is for sure an opportunity cost with regard to work experience, but for all the reasons above it's still the best option imo. I don't get why people are _so_ anti-degree now, just because there are a few drawbacks.

jacob
join shbcf.ru