Interesting People mailing list archives

Re: U.S. colleges retool programming classes - Yahoo! News WORTH READING --


From: David Farber <dave () farber net>
Date: Sun, 3 Jun 2007 21:30:21 -0400



Begin forwarded message:

From: Rod Van Meter <rdv () tera ics keio ac jp>
Date: June 3, 2007 8:38:26 PM EDT
To: dave () farber net
Subject: Re: [IP] Re: U.S. colleges retool programming classes - Yahoo! News
Reply-To: rdv () tera ics keio ac jp

Dave,

Zach must really have a lot of free time if he wants to start this
argument :-).  (And I invested waaay too much time in my response.)

I really was going to keep my mouth shut on this topic, but I just
can't help myself; the topic is stuck in my brain and I have to get
it out through my fingers.

This discussion has ranged from how CS is taught to the grand
structure of society, touching on whether or not a college education
is worthwhile, the place of the programmer in society and the company,
choice of career, and the issues of globalization.  Let me offer first
a link that I think is an actual contribution to the discussion; the
rest I'll let you judge for yourself :-).  First the CS education,
then the larger issue, including a few embryonic thoughts about
apprenticeship.

On how to teach CS, let me point out that this issue *has* received
attention at the highest levels.  The ACM issues guidelines on
curricula for:

* computer science
* computer engineering
* information systems
* software engineering
* associate degree programs
* K-12

which can be found at http://www.acm.org/education/curricula.html ,
and most have been revised since 2000.  The CS undergrad curriculum
recommends, for example, a *core* of only 18 lecture hours on
operating systems, out of a total of 280 or so core hours.  In a
U.S. research university, that would roughly represent the
sophomore-junior content of a CS degree, and would probably roughly be
doubled in the senior year to a total of perhaps 560 hours of lecture
and maybe three times that in homework, a couple of thousand hours on
CS alone, ignoring math, other sciences and engineering, humanities
and social sciences.  In other types of advanced learning institution,
the amount could be substantially less or quite a bit more.

Craig Partridge mentioned a workload for students that amounted to
about 600 lines of code a week for the term.  I would hope that
mater's students in CS would be able to work at that rate, but that's
clearly too much to expect of first-year programming students.  The
ACM curriculum above includes a several-page discussion of the
importance of teaching programming v. principles, which I won't go
into here, but I highly recommend reading it.

(If you're keeping score on the anecdotal topics mentioned so far in
this conversation, version control probably makes the core curriculum,
automata and shared libraries are in the supplementary curriculum.  A
couple of lectures on privacy, intellectual property and other aspects
of computers in society seems like a positive thing.)

I'm not involved in the curriculum effort, but I suspect they are
under more or less constant revision.  In recent years, some
universities have been adding programs in game design, bioinformatics,
business/technology dual majors.  One can certainly argue that the
overall CS curriculum is in flux and varies across the country (and
around the world), but beyond that it's difficult to generalize.


The above I'm fairly confident is a positive contribution to the
discussion.  From here down, I'll let you form your own opinion.  Much
of what I would write Karl Auerbach has already written, and far more
succinctly and eloquently than I seem to be capable of.  But let me
offer a twist or two, and go a step farther.

Zach and other writers made several major points:

1) The undergrad CS curriculum at many colleges/universities is
inadequate.
2) The undergrad CS curriculum at many colleges/universities is poorly
taught.
3) Students arrive with differing backgrounds and ability levels, and
consequently come away with different learning experiences and
knowledge.

There are several corollary points:

A) It's possible to pick up "on the street" what you need to know to
do most jobs in a Silicon Valley startup.
B) Promotion at major research universities forces a focus on research
rather than teaching.
C) CS as a major is not very attractive right now, for a variety of
reasons, culminating in "programmers are treated like dirt in
companies, and with all the jobs being exported to India, it's a bad
career choice anyway".

I think all of these points except #3 are debatable.  Certainly the
discussion so far has not made a distinction between #1 & #2.  I'm not
really going to discuss most of these points directly, but they form
the undercurrent in what follows.

For millenia, kids were apprenticed to a profession at an early age.
We still have this, after a form.  LeBron James, Michelle Wie, the
Magnificent Seven (remember them?), and all pro go players and
musicians took up their vocations essentially full time well before
what we consider "working age".  Many of us starting hacking at a
similar age, but maybe we need formal extracurricular mentoring and a
similar support system?  A way for kids to "go pro" earlier and still
get the coaching they need?  Virtuosos almost all spend 20-40 hours a
week at it from the age of fourteen or earlier, why should programming
be any different?

I've heard people say, "Oh, who needs college?"  But I'm a fan of the
modern apprenticeship -- the Western liberal arts college degree.
It's your chance to read Wilde, Plath, Joyce, Thoreau, the Federalist
Papers; learn a foreign language (okay, I flunked German), play on the
basketball team, take up scuba diving; study how the encroachment of
the modern world is impacting the Mbuti pygmies and the Navajo; maybe
do a year abroad (I wish I had).  Personally -- call me a science
chauvinist -- I think anyone who claims to have a well-rounded
education should be able to talk intelligently about relativity
(special, at least) and quantum theory, arguably the two most
important (and misunderstood) discoveries of the twentieth century
(fans of the nature of the chemical bond, the structure of DNA, the
Big Bang and plate tectonics all have a case, though).  (On a tangent,
let me recommend Alan Lightman's _The Discoveries_ and Richard
Muller's course titled "Physics for Future Presidents".)

For most people, college will be the *broadest* point of your life.
For many -- including a particular skinny sixteen-year-old from
southern West Virginia -- it's your first extended contact with people
from other parts of the country and the world, and with the breadth
and wealth of the world of ideas.  Take time to hang out with the
music majors (okay, Caltech doesn't have any of those, but it does
have English majors).  Consider a career in astronomy or geology
instead of hacking.  Trust me, once you're in a company and writing
code, the world gets a whole lot narrower, even if you're working
shoulder to shoulder with people from China, India and Finland.

If you're of pragmatic bent and recoil in horror at the thought of
whiling away your days trying to decipher Joyce and Eliot rather than
starting that get-rich-quick Internet business, well, I have trouble
imagining that anyone can be effective at building large-scale
computer systems without some background in probability.  Probability
requires at least basic calculus, and if we can get you as far as
queueing theory, it will change the way you think about systems
problems.  If you are interested in image or audio processing, you
need linear algebra and Fourier transforms, and the basics of
amplifiers and RC circuits won't hurt; if you're in communications,
antenna design and wave guides help; if you write firmware, you gotta
understand what the funny lines on a signal analyzer mean.  And I have
yet to meet the engineer (myself included) whose writing and
presentation skills need no polishing.  Note that none of that is
included in the 560 lecture hours mentioned above, but I wouldn't
trade any of it for another hour hacking code.

Is it possible to learn all of this without going to college?  Of
course!  Two of the brightest people I know are extremely
well-rounded, and neither finished college.  Did it hurt their
careers?  Probably in a minor way.  Are they successful anyway?  Very.
(And no, neither is named Gates or Jobs).  If you're smart,
disciplined, get a good break and a good mentor, you can do it.  But
for most people, the direction and semi-structure (compared to high
school) of a university will bring them needed breadth, depth, and
maturity -- and a higher probability of success in life.  (No
guarantees, though!)

It's also true that the university environment as currently
constructed is not perfect for everyone.  But for many people, bailing
out with the excuse, "I wasn't learning anything anyway," is a true
statement that says as much about them as it does about the system.

And lest you think I'm in favor of stuffing people's heads with facts
but not teaching them to solve problems, let me reassure you: I tell
my students that the only thing they *must* learn in college is how to
think, everything else is optional.  While I do believe there is a
core curriculum I wish they would learn, four years is a short time
and a focus on any given technology is extraordinarily short-sighted
when planning for a forty- to sixty-year career.

By now I've no doubt convinced you that I'm an unrepentant ivory-tower
academic.  However, I've spent about half my career to date in
industry.  Was I well-prepared when I came out of school?  Let's say I
was still a work in progress, and I owe more to a mentor and friend
named Wook than any professor.  Certainly I have regrets, the largest
of which is not taking Jim Blinn's graphics class, but most of them
are due to my own shortcomings.  But because I was taught how to learn
and how to work hard, I have followed up with enormous amounts of
learning, and at every step of the learning process I felt that my
time at Caltech helped.

From here, I was going to springboard into the place of the programmer
in society and globalization, but this is way too long already.  Let
me thank you for reading this far, and finish with four thoughts:

* The Western liberal arts CS degree, properly taught and learned, has
  long-lasting value.  The key question is, is it worth a thousand
  bucks a week for four years?
* Engineers are paid to solve problems, not to write code.
  Demonstrate an ability to learn about the *problem domain* in which
  you are working, and your prospects improve; breadth and depth
  help.
* What is it that makes Code Monkey such a pathetic figure?  The fact
  that he's not in control of his own destiny.  If you want that
  control (and, IMO, if you want a date), being articulate and
  well-rounded is the path to leadership.
* Finally, keying on that last word, the job of a university is to
  provide productive members of society.  You should graduate knowing
  not just a handful of technical facts, but how you can find the best
  role for yourself, where "best" makes you happy, earns you a buck or
  two, and allows you to contribute to the greater good.

Do we accomplish all of this in four years?  Nah.  Do we start
students on the right path?  Some of them.  Should we figure out how
to do our best for more of them?  You betcha.  Are professors perfect,
giants striding the Earth before whom all should bow?  No way.
They're taught to swagger, but if they haven't humbled deep down by
their own learning experience, they haven't been paying attention.
One thing's for sure, though: the development of the next generation
of leaders, both in technology and society, is far too important to be
left to what disaffected teenagers pick up surfing the blogs of
disaffected, semi-literate, technical and political ideologues.

                --Rod




-------------------------------------------
Archives: http://v2.listbox.com/member/archive/247/=now
RSS Feed: http://v2.listbox.com/member/archive/rss/247/
Powered by Listbox: http://www.listbox.com


Current thread: