3 ms·
Frankly, the classic algorithms courses at universities aren't great either. The set of "classic" algorithms covered in an intro course is arbitrary and comes d
by tikhonj 3y ago
Frankly, the classic algorithms courses at universities aren't great either. The set of "classic" algorithms covered in an intro course is arbitrary and comes down to history more than pedagogy. There are some useful concepts that all programmers should know like dynamic programming or divide-and-conquer, but spending a bunch of time on relatively specialized and narrow algorithms like the simplex algorithm or FFT is not a great way to illustrate them.
The core algorithms sequence ends up feeling more like a grab bag of "historically significant" algorithms rather than a coherently structured introduction to the subject. The set of algorithms taught is not a great practical foundation for solving problems, but also aren't especially effective at teaching how to generalize the ideas and design algorithms for your own problems.
You can use a classic algorithms course as a starting point to learn more, but it's not an obviously great starting point. One grab-bag of algorithms might be better than another, but it isn't fundamentally better.
- jerf 3y agoI think of a lot of the school algorithms as stepping stones and good practice. It's easy for established programmers to forget the days when a pointer was beyond mindblowing and, sure, OK, I get the idea of a function, but a function that calls a function? A function that takes as a parameter a function to call? What is this? A linked list is useless in 2024. But it is also just about the simplest possible non-trivial data structure, and while you may not ever implement one ever again the pointer practice is good, and so I support keeping it in the curriculum, albeit I also support being very clear and up front about the fact that it is not actually useful anymore as well. Even something like a compilers course, odds are decent you're not going to ever use those exact algorithms ever again, but the general overview and practice is very valuable and the difference between those who understand those concepts and those who don't is often pretty clear to me. You've got to bootstrap off of something and I think a lot of people fall into the unexamined trap of defeating the curriculum in detail ("well, this thing is useless, and this next thing is useless, and the next thing is useless" and therefore the entire thing is useless) and in the process cutting off any way of getting enough experience with the space in the first place to get to the point that they don't need the bootstrap anymore. There is no scenario where we sit a student down in a seat, say a few words over a couple of hours, and presto they're as fluent as any other programmer with decades of experience with the basic tools of data structure design.
- randomdata 3y ago> It's easy for established programmers to forget the days when a pointer was beyond mindblowing Oh? I distinctly remember – after hearing the same story over and over that they are mind-blowing – thinking "that's it?" when I was first exposed to them. I was primed to see my life change, and all I got was a nothingburger. But maybe it is that I still don't yet truly understand pointers, and thus have not reached the point where my mind gets blown? What have I missed?
- jerf 3y agoThen for you, it was some other thing. Nobody is born knowing how to program, and nobody learns how to program by starting out on day one by architecting a cloud-native scalable solution for a real-time chat client for one hundred million users a day with five nines of reliability, infrastructure-as-code, source control, repeatable deployment, high-quality code review practices, etc. Nowadays I have a hard time finding a task even a 4-year-grad can do right off the bat without another 6 months of intensive on-the-job training. Asking for the programming curriculum to cover only directly-relevant tasks is pretty much guaranteed to pull the ladder up well above anybody's heads. Especially with the improvements in the past 20-30 years with getting basic algorithms like search and sort reusable (I got into programming just on the tail end of when you might still be expected to write one yourself), there just isn't anything left to give a computer science freshman to implement that isn't already some combination of obsolete and provided by library in every environment they'll ever use.
- randomdata 3y ago> Nobody is born knowing how to program I think we can agree that nobody is born with the language needed to express a program. But can we equate that to having no innate sense of how to program in the abstract? One of the newer programming languages on the scene, GPT, has shown that many people who didn't think they could program are suddenly able to thanks to a syntax that is nearly identical to languages used for regular social communication. It seems people could program all along, they just lacked a way to express it. I seems fair to say that a "cloud-native real time chat client" also requires understanding a lot of implementation details that have been built up over decades. Those particular systems are no doubt something that needs to be learned to work with. But that's really moving beyond programming in and of itself. In a similar vein, are people born able to conceive of a story? I think we can agree that nobody is born with the natural language necessary to express it to others, but if you were raised by wolves in the forest would you still have some semblance of a story floating around in your mind? Understandably we lack the tools needed to give a definitive answer, but the best evidence suggests yes. So, why not programming?