21 comments

[ 3.5 ms ] story [ 48.9 ms ] thread
Summary: scrape by while learning the bare minimum, reinvent the wheel for perpetuity.
> This is why I don't believe in computer science degrees.

Computer science degrees aren't about learning a computer language; they're a ramp to learning about and practicing programming.

Exactly, the language I programed while I learned about basic data structures (java) has changed a quite a bit since 1998, but the linked list is still the same. So are recursion, and the binary tree, and a dozen other simple concepts from that class. Similarly, I don't touch C++ or Oracle databases any more, but I still understand joins and how to go over data (fairly) efficiently - those really haven't changed either. If anything, I wish they had used a simpler language, and as a result gotten rid of the wasted hours of going over the languages (except maybe one in depth language course in something like java or C), and instead put more general problem solving (and solutions) into the material. That stuff is invaluable.
But surely, you don't expect to actually use trees and recursion in your actual projects? All you need to be a good programmer is to take the libraries someone else has developed, and like websites of yore, cut and paste what you need into your own projects. Right?
Even deeper than that, computer science is about the theory behind computation and what we can discover & create with it.

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.

FTA:

> 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.

The author's attitude toward CS degrees stems from an insidious issue affecting higher education in America (and that, in my opinion, will eventually be its downfall). College is not where you go to learn something. That's what trade schools are for (at least traditionally).

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.

If you're going to repeat this cliche I think you need to explain how colleges are teaching people to "learn how to learn," how that differs from the way they would teach them "something," and why you think the idea of one without the other is coherent.

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.

To take a common CS example: sorting. You can teach someone how to use a library sort function. That's teaching a trade. You can teach someone how to write a quick sort. That's still teaching a trade.

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".

I think your example is mostly the difference between learning a lot and learning just a tiny bit.

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.

I don't think it's a fake line at all. It's the same as: "Give a man a fish and he eats for a day. Teach a man to fish and he'll never be hungry."

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.

I feel like both tools and knowledge coincide more often than not, most of all in programming; so everyone should just teach both tools and knowledge simultaneously and there is no dichotomy to worry about.
Oh look: a comment not critical of, but nevertheless about, colleges, is being downvoted on HN. Stop my beating heart.

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.

Poppycock. If you learn the Pumping Lemma. You know the Pumping Lemma. It doesn't matter if you are using Ruby on Rails or PHP 7 or whatever. I dismiss this notion that College is just where you go to learn how to learn. Scientists don't say this crap. They don't say "Nevermind all of that calculus you learned in College young physicist; college was just for you to 'learn how to learn' whatever that means! now you can go off and try to learn Calculus so you can do your job!" It doesn't make sense. It completely dismisses the notion that there is qualitative content based learning going on in colleges. It seems so customary to have this view but it doesn't seem to be based in fact. For any computer scientist that was not purely an autodidact, they probably learned a great deal about computer science, yes actual content, that is still and will stay relevant to them throughout their career.
This is why I don't believe in computer science degrees. What you learned 5 years ago may not be relevant today.

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.

I think OP may be confused that a lot of CS shouldn't be programming language specific. I haven't touched a lot of the languages I learned in college, but knowing specific patterns, data structures, algorithms, control flow, etc and how they may be integrated into the language I am using, whether as a feature of the language or even part underlying VM helps immensely when making intelligent decisions structuring my program.
Yes, clearly you have to relearn everything you know about computer programming now that a new version of PHP has arrived.
I am surprised that this article made the front page.
This is spoken like someone that doesn't know computer science at all. So, knowing computer science means you understand the fundamentals of programming and abstraction for computational purposes and this person is saying "screw that. what you should really care about is what a 'while' loop looks like not just in your programming language of choice but only the latest version of your programming language of choice.' Very naive.
The author seems to have no clue what CS is, or how it might differ from programming in PHP.