Re: Can you learn computer science from a school?



On 15 May, 13:35, Mark Tarver <dr.mtar...@xxxxxxxxxxxxxx> wrote:
On 15 May, 01:20, Joe Marshall <eval.ap...@xxxxxxxxx> wrote:

This is clearly flamebait, so kill this thread if you aren't
interested. I'm interested in what the consensus is.

Some of the people in this group have, or are pursuing, advanced
degrees in computer science. Some have bachelor's degrees. Some have
degrees in related fields. Some have degrees in completely unrelated
fields. Some have dropped out before getting a degree. Some are
autodidacts.

Is there a correlation between studying computer science and knowing
about computers? Do people gain anything by pursuing an advanced
degree in computer science, or would they be as well served by saving
the money, buying a PC, and teaching themselves? There is a romantic
ideal of the untutored hacker that program circles around MIT grad
students. Is that absurd or commonplace?

This reminds me of another debate which takes place in martial arts -
about martial arts students and street fighters. Geoff Thompson is a
trained martial artist, a karateka, a grappler and the victor in over
200 street fights as a bouncer. In that his book 'Watch My Back' he
compares two styles of fighter - the school-trained martial artist and
the untutored but hardened street fighter.

What Geoff says is roughly this. The street fighter fights in a ring
with no rules and no boundaries. The school-trained martial artist
trains for a circumscribed contest with known parameters. The street
fighter, if transplanted to the tournanment ring, will often fair
poorly. Contrariwise the trained martial artist in no-holds fighting
will generally be taken out by a good street fighter unless his level
of skill is very high and he has trained for combat situations.
*However, the combination of the two, the street fighter who has also
formally trained in the dojo, will surpass either.*

I think this is roughly true for programmers. There are a number of
people who have a natural gift for programming and just pick it up; in
the same way that some people have a gift for fighting and pick that
up. As programmers they will surpass the average level ability CS
student in a straight programming contest. These naturals may not
have passed through a CS course or sat a single CS lecture, but they
can walk the walk and do the job. These people we can call 'street
programmers' - hackers without any formal qualifications, who have
picked up their knowledge on the fly, but who can blow most
competitors away when it comes to code productivity.

If you look at computer scientists then the picture is rather
complex. At the professor end you can more or less divide the
faculty into implementors and theoreticians with a few straddling the
divide. The bottom line for CS is that professors do not get
promoted for being good implementors but for writing papers and
getting grants (see 'Why I am Not a Professor' at the bottom of this
post for my take on this). Hence there are some computer scientists
who are frankly lousy at writing programs because writing programs is
not what they do. There are professors who actually *look down* on
implementors as sort of manual workers who exist to implement the
grand designs of people like themselves. Typically coding is
thought of as the preserve of post-doctoral RAs.

In academia, you'll actually find that career-wise, theoreticians
enjoy a status advantage over implementors because of their
productivity as measured by papers. A large implementation can
consume a year and yield one paper whereas a theoretician can churn
out 3-4 papers in the same time period. The metric is, of course,
meaningless, but thats how academics works. During my time at the
LFCS, Rod Burstall actually felt impelled to give a lecture on why
implementors were important to a bunch of recycled mathematicians
doing CS. They were not interested - as one put it "Hacking code is
not why we're here."

The best are the people who straddle the divide; who have a grasp of
theory and make it work on the computer. In theory thats what
professors should be attempting to graduate from CS courses. Ergo the
graduate student from CS should be better than the street programmer.
However it does not work like that.

The reason why this does not happen is complex, but the martial arts
analogy comes back to mind again. There are some schools of martial
arts which are essentially empty. These are schools where the
students train in katas which have to be memorised with little or no
understanding of application. These schools avoid subjecting their
students to any combat situations and emphasise artifical grading
systems with little relationship to combat effectiveness. The
graduates of these schools are not a match for the experienced street
fighter.

Unfortunately a lot of CS departments are like these empty dojos.

In CS a lot of student time can be taken up in courses which require
little or no programming expertise. In the UK it is quite possible to
walk off with a CS degree and be quite hopeless at street
programming. Why is this? For several reasons.

First, a pick-and-mix approach to education which allows weak
programmers to avoid programming-intensive courses.

Second, CS courses at university are rarely bleeding edge. Staying
ahead of the game , knowing all the latest Java tools, being up at 1
a.m. on forums swapping information with other street programmers, is
not what professors want to do after they go home at 6 p.m. With
the weight of admin, teaching, reading and scribbling papers to be
done there is simply not the time for the street programmer's
lifestyle. So students learn what the professor feels comfortable
with. And people who do know the bleeding edge can get better money
(and often better conditions) in industry

Third, (and for me, very importantly) is the conservatism of CS
courses. At Leeds in the early '90s the language of choice for
students was Pascal. Nearly all the staff knew Pascal had to go - it
was old already. I attended a meeting in which computer scientists
chased the question of with what to replace Pascal. Several hours
later Pascal was still there because they could not get an agreement
on the issue. Seven years later I attended a meeting on the same
subject with the same lack of agreement.
It took eight years to move from Pascal to C++.

Trying to do anything innovative in teaching at University or
instituting change is a risky business. If your course is
foundational then your teaching is tied to the courses which list
your course as a requirement . Try to do anything radical, even a
change of approach, and you can be in trouble. I quit one post simply
because I made changes that made the Old Guard nervous. I got the
name of a radical. Change is threatening.

And all this is a damned shame, because actually, with the right CS
course, a student graduate will, ceteris paribus, surpass his street
programming counterpart. The right CS course begins with programming
and builds on it. But the right language is important and its not C
or C++. A good programming language has to be a language for
*describing* algorithms, not just a means of beating the computer into
doing what its told (exit left C++, C, Java and Perl). At Leeds I
was always criticised for teaching functional programming *whatever*
module I was given to teach. The criticism was misplaced. The point
was if you want to describe algorithms precisely you need a language
to do it. My having to teach FP every time was the consequence of the
students' inadequate grounding which required going over ground they
should have mastered in the first term of their first year (enter
right 'The Structure and Interpretation of Computer Programs').

So to conclude this long post. Yes, the street programmer is
generally better than the CS graduate - at programming because CS
courses are often so woeful. And the professor will beat the street
programmer hands-down in the black arts of churning out papers. But
in CS departments which are not empty dojos, the graduates will have a
greater range than the street programmer.

Mark

Oh ... the promised link (also oddly the most popular page on Lambda
Associates)

http://www.lambdassociates.org/Blog/decline.htm

Mark

.



Relevant Pages

  • Re: PROGRAMMING HOMEWORK HELP!
    ... >> My problem is that students are left in the dark what these deadlines ... > deadline means by the time he or she arrives at the university. ... > What is different about a deadline for a programming exercise? ... courses ok get in trouble with this while seeing that some of their ...
    (comp.programming)
  • Re: Can you learn computer science from a school?
    ... about martial arts students and street fighters. ... the untutored but hardened street fighter. ... student in a straight programming contest. ... In CS a lot of student time can be taken up in courses which require ...
    (comp.lang.lisp)
  • Re: Delphi 8 vs Visual Studio
    ... Is it possible that some students will actually learn more if they are ... >>would be all Java and Oracle. ... programming language courses and database courses. ... If I'd choose, I'd probably teach programming in Pascal, Object Pascal ...
    (borland.public.delphi.non-technical)
  • Re: What is computer science good for?
    ... >Are you aware of any college CS courses in refactoring? ... CSCI 1901 - Structure of Computer Programming I ... 1901, presenting additional data structures/algorithms. ...
    (comp.programming)
  • Re: Information Technology versus Computer Science
    ... >>courses in individual programming languages and they give short shrift ... >>to software development theory or practice. ... I think it's also a good thing because every programming language should ...
    (comp.programming)