Forgetting how to Program
max-michaels.blogspot.com
max-michaels.blogspot.com
College is where you go to learn how to learn.
Not everyone wants to learn how to learn. Not everyone needs to learn how to learn. There are a great many professions where one simply needs to be trained, and then set loose in the "real world".
Programming is not one of those professions.
So as colleges have shifted toward satisfying the masses, the majority of whom fall into the category of not wanting or not being interested in learning how to learn, they are increasingly failing those who need such skills.
The current "college is a waste of money/time" trend got boring rather quickly - at this point, it's just extraordinarily stupid. It's true, if your goal is to maximize money earned, you should probably not go to college. You should also never have children, or give to DWB, or learn to play an instrument.
Going through college focused on getting the Right Degree and the Right Grades is, of course, a waste of time: your time is better spent angling for promotions at McDon's. But exploiting the nearby presence of hundreds or thousands of extraordinarily intelligent people just in your field, for four years, is definitely a worthy experience, and not just for a tiny minority of people. If you're going into a field that presents novel challenges with as high frequency as programming does, it's an experience you'd do well to have.
Since I went to school too and I observed teachers at all levels laboriously explaining something, testing students carefully on their specific knowledge of something, and awarding them diplomas and degrees in something, I am skeptical of the assertion that they were actually doing something else.
Alternatively, you can teach someone how to analyze the big-O runtime and space requirements of a variety of sort functions. You can teach them how to recognize best-case and pathological-case inputs and what that means for the runtime. You can teach them the difference between a conservative and non-conservative sort.
The student that learns how to write a sort function will know how to write a sort function. The student that learns how, when, and why to do detailed algorithm analysis will be able to write all kinds of algorithms, even ones that don't yet exist.
That's the difference between "learning" and "learning how to learn".
It's also the difference between being curious and being a dimwit. Only a dimwit would learn a hundred library calls without ever finding anything out besides how to invoke a hundred functions. If a curious student spent an equal amount of man-hours learning about sorting algorithms as another curious guy learning about the design of the XYZ standard library, I bet the guy who learned a lot about the library would have learned many abstract and generally applicable things, too.
I get the sense that you are trying to draw a line between "things that are directly useful" and "things that are not really useful, but only provocative and interesting" but I think it's mostly a fake line. Having a deep understanding of sorting is both useful and interesting. Having a deep understanding of the different ways that libraries choose to expose functionality on collections is also useful and interesting. Almost everything to do with computers that I've found in my life is both useful and interesting if you think about it hard enough.
Or, if you prefer: "If you want to build a ship, don't drum up the men to gather wood, divide the work and give orders. Instead, teach them to yearn for the vast and endless sea."
It's the difference between tools and knowledge. If you teach knowledge, then a student can learn as much knowledge as you can cram into their brains in 4 years time. If you teach tools, then a student will be able to continue learning the rest of their life.
If the things one learns in a CS program are irrelevant 5 years later, that's a pretty crappy CS program.
I don't worry about my CS knowledge becoming irrelevant any more than I worry about calculus or differential equations becoming irrelevant.
Computer science degrees aren't about learning a computer language; they're a ramp to learning about and practicing programming.
Or, as Dijkstra said, "Computer science is no more about computers than astronomy is about telescopes." Computers are a tool for this discipline, and programming is a way to manipulate and control that tool.
If all somebody wants to do is sling code, CS is even more than they need. But they probably will want to do more than that someday, so the foundations of CS can serve them well.
> This is why I don't believe in computer science degrees. What you learned 5 years ago may not be relevant today.
CS degrees aren't about what you learned, but what concepts your mind digested and grew from.
Hint: read his other blog posts. My personal favorite: http://max-michaels.blogspot.com/2011/10/best-javascript-deb...