

Forgetting how to Program - baligena
http://max-michaels.blogspot.com/2012/03/forgeting-how-to-program.html

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

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

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

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

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

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

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

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

------
dougws
Yes, clearly you have to relearn everything you know about computer
programming now that a new version of PHP has arrived.

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

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

------
alatkins
Summary: scrape by while learning the bare minimum, reinvent the wheel for
perpetuity.

------
billsix
I am surprised that this article made the front page.

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

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

~~~
olalonde
> This is spoken like someone that doesn't know computer science at all.

Hint: read his other blog posts. My personal favorite: [http://max-
michaels.blogspot.com/2011/10/best-javascript-deb...](http://max-
michaels.blogspot.com/2011/10/best-javascript-debugger_31.html)

------
tincholio
The author seems to have no clue what CS is, or how it might differ from
programming in PHP.

