Interesting People mailing list archives

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


From: David Farber <dave () farber net>
Date: Tue, 29 May 2007 17:10:26 -0400



Begin forwarded message:

From: Zach White <zwhite () darkstar frop org>
Date: May 29, 2007 1:40:36 PM EDT
To: David Farber <dave () farber net>
Subject: Re: [IP] U.S. colleges retool programming classes - Yahoo! News

Dave,

For IP, if you wish.

There's one question I have for everyone on this list: Why do we need
more CS students?


A bit of background for everyone before I jump into my question:

I'm currently 28 and have been working professionally in one tech job
or another for 10 years now. I've been interested in and learning about
technology since I was in grade school. Somehow my personal track kept
me away from programming and steered me towards a sysadmin career, but my
experience has put me into contact with many different programmers and
technical people. Today, in addition to my system administration work,
I also write web applications in php and python that are used in a number
of different organizations in the energy sector.

I have not attended college. I graduated from high school in 1998 and saw
the writing on the wall. I moved immediately to Northern California and
started working in the tech industry on the basis of my technical skill.
Had I gone to college I would have graduated just in time to hold a
degree that might get me a McJob (2002, just after the bubble burst.)


In my past I've worked for ISPs, local tech houses, software companies
and non-technical companies. There are a number of roles for which
companies indicate they want someone with an EE/CS or equivilent.
No matter what their actual dutites I've seen 4 basic archetypes:

The Genius; The genius was the smartest guy at the company. He knew how
everything worked and was the guy that management went to when they had
something new to do.

The Programmer; The programmer was just that, the average, everyday
computer programmer.

The Admin; The senior system administrator, who made the decisions on
what their technical infrastructure looked like.

The Tech; The tech was generally a semi-skilled worker doing grunt work,
such as help desk, QA or system maintenance.


Let's take a look at The Genius first. The Genius is the guy that's been
programming since he was 8. He started on a C64 or an Apple II with basic
and moved on from there. In high school he was reading Diijkstra and
Knuth. From there he either went on to the working world or he went on to
study EE and/or CS, often on a full scholarship.

These guys have universally put me to shame. I have tried to debate them
in my weaker moments and have always lost. I've talked to many of them
about their college experience and except for one guy all of them said
it was a waste of time. Of those that didn't attend college they have
universally said that they've never regretted not going.

The Programmer is by far the most common player. This is also the
player that is most likely to benefit from a CS degree. The problem?
They didn't learn anything useful.

I have had to educate programmers in basic skills they should have
picked up in CS 101. For example, not long after I joined a well-known
dot-com there was a vulnerability discovered in OpenSSL. Naturally I
upgraded it to avoid the exploit.

A couple weeks later our head programmer (who held a CS degree from
Caltech) came to talk to me about it. Apparently because I had installed
both the shared and static versions of OpenSSL it was now being compiled
against the shared version. I spent an hour explaining the difference
between shared libraries and static libraries. He still wasn't convinced
it didn't matter. So I spent 30 minutes explaining to him (in step by
step detail) how to change '-lopenssl' to '/usr/local/lib/openssl.a' and
how it was no different than not having the shared library in the first
place.

The kicker? A couple hours later he came back with my boss and they asked
me to remove the shared library because they thought it was causing
problems. I did so and it didn't fix their problem. A month later I put
the shared library back and never heard another complaint.

For those of you unfamiliar with Unix the problem I just described is
a basic one. A programmer who doesn't know the difference between a
shared library and a static library is similar to a car designer who
can't tell you the difference between a carborator and fuel injection,
and has to ask the mechanic to explain the differences.

The Admins and The Techs are really in the same boat when it comes to
a CS degree. There's no reason for having them go through a CS program.
If these jobs need any training after highschool it's best handled either
on-the-job or in some sort of vocational school. (Those have their
problems too, however. I will not hire an ITT grad, for example, as I've
never seen any worth their salt.)


This brings us around to my question; Why do we need more CS students?
Or, more correctly (if a bit harsh); Why are CS degrees so worthless?

The smartest guys, those who should be involved in getting their
doctorate, see it as a waste of time because they learned it all in high
school. There's nothing a CS degree will teach them they don't already
know.

The guys that would actually benefit from a CS degree aren't learning
anything either. Why? They're not being taught. Current CS degrees focus
so much on algorithms and math that they see the basics as unimportant.
They're teaching students to jump and do cartwheels but they don't teach
them how to walk.

There are a couple interview questions I ask every candidate that anyone
with a CS degree should be able to answer in under a minute. Most (~60%)
of the candidates I've seen can't answer these questions.

The questions:

        Please write a program that prints out the numbers 1 through 10
        in the language of your choice.

        Please demonstrate a snippet of code in the language of your
        choice that will swap the value of two variables.

I'm not looking for specific answers here. I'm looking for whether they
can answer these very basic questions in under 5 minutes.

I've asked a number of candidates these questions. Those who did not
have a degree answered them every time, typically in under a minute.

It's only the people who have a CS degree that have ever failed these
questions. Some of those guys had more than 5 years working experience,
too! To be fair, most of the guys that failed these questions were trying
to get their first job.

It still leaves me wondering: How did these guys gradutate with a CS
degree in the first place?

-Zach


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