
Joel Spolsky, Snake-Oil Salesman - markdennehy
http://stochasticgeometry.wordpress.com/2009/10/27/joel-spolsky-snake-oil-salesman/
======
jordanb
It's interesting that Joel purports to treat his programmer staff as
professionals, yet has the same unreasonable tradesman-focused expectations
that the cube farm managers have about education in Computer Science.

A graduating structural engineer has no idea how to marshal a design through
the building inspector's approval process. A graduating lawyer has no idea how
to actually engage in litigation. Yet those fields aren't dominated by
managers whining that students should be learning "real world skills" instead
of "theoretical stuff" like high physics or constitutional law.

They understand that a professional isn't an automation that gets precision
machined by a training program to slide frictionlessly into their workflow.
They know that when they hire a graduate, he isn't trained in the mechanics of
his job (nor is he even licensed yet), and that the hire represents a
commitment on the firm's part to take the theoretical knowledge he got in
school show him how to leverage it for the real-world practice of his
profession. They are fine with that because they have a culture -- as
professions and as firms -- of respecting and investing in their
practitioners.

The computing industry doesn't operate that way. All the lip service it gives
about 'professionalism' is, as far as I can tell, entirely driven by a desire
to ensure that programmers remain exempt. Why is it that the manager class at
development firms is dominated by non-technical MBAs? Why are development
firms not set up so that programmers are partner-tracked associates? I can't
think of any real profession where that's not the default configuration for a
firm. And most apropos here: why do they expect their supposedly professional
workforce to receive trade skills from their university education programs?

I think people like Joel need to quit attacking universities until they can
get some consistency in their own views of their employees. Either programmers
are the skilled tradesmen we're currently treated as. In which case, the
exempt status should be removed and the industry should come up with a
tradesman's curriculum. Or they should accept us as professionals, and start
treating us that way.

~~~
gamble
Absolutely. I loathe the emphasis on being an 'X programmer' in the software
industry. I've never met anyone who described themselves as an 'Autocad
engineer'.

~~~
gaius
There is a management culture of referring to technical people as "resources",
e.g. this person is a "Java resource" and we'll need 3 "Linux resources" on
that project.

They sure don't like it when I call 'em "Powerpoint resources".

~~~
ovi256
Tell me about it. The firm where I'm at used to be quite small, and MBA talk
was non-existent. Now project managers use it a lot. We engineers used it
ironically at first, but now it's starting to taint us ...

Powerpoint resources is a great way to put it. I'll be sure to use it.

------
wglb
While I don't always agree with Joel, it is a bit of headline grabbing to call
him a snake-oil salesman. He is building a product that is shipping and the
company is profitable. Not easy to do.

But I think if universities taught CS the way that they should, and not many
do, in my opinion, the result might not be what he expects.

I think that many companies misuse programmer talent--one example is to employ
thousands (not exaggerating) in enterprise departments that are reduced to
moving one field to the other. If there were lots of well-trained CS grads
with a better orientation, they might be questioning how things are done. Both
in large enterprise situations and perhaps in Joel's company.

His strongest point is that students are not exposed to longer projects. I was
once in a position to hire compiler people. Few graduates of programs that
taught compilers were well-equipped. One large state university in Michigan
taught a compiler course in a semester. The graduates that I talked to came
away with the notion that compilers were very scary. Graduates from another
midwestern school across the lake did very well. Their compiler course was a
full year as part of their masters program.

I think that industry does not really know what to ask for. CICS as part of a
CS program? (True). Really?

~~~
wglb
For interesting contrast, see
[http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EW...](http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD898.html)
recently posted here.

~~~
Xichekolas
Wow.

 _"The fact that operating system design posed some at the time tough
conceptual and logical problems was hardly allowed to surface. Consequently,
those problems did not get the attention they deserved, and this had far-
reaching consequences: I recently read a series of articles on the Shuttle on-
board software and, though President Reagan has generously offered a teacher a
free ride, I tell you I am not available."_

This talk was given at a conference in mid-November 1984. The flight with a
teacher on board was, of course, the Challenger in January of 1986.

Of course, the disaster wasn't due to software... but still rather uncanny.

------
eli
It's a Computer _Science_ degree, not a _programming_ degree. If you want to
learn a trade, go to trade school not a four-year university.

You wouldn't expect someone with a degree in English to know how to navigate a
book contract, would you?

~~~
InclinedPlane
You may be "right" in theory, but it doesn't matter.

The vast majority of computer science students pursue a CS degree because it
has become a prerequisite for being a professional software engineer. NOT
because they have a desire to become a computer scientist.

The simple fact is that if you do not have a 4-year college degree you will
find it immensely harder to work as a software engineer in the industry. It's
silly to pretend otherwise.

The vast majority of today's CS programs do a disservice to all of their
students. They are neither good engineering programs training students for
industry (for which they currently serve as a proxy) nor good computer science
programs. A recently minted graduate of a Chemistry or Physics program (from
an accredited US 4-year college program) is, on average, much more versed in
the relevant scientific findings and research techniques of their field than a
CS graduate. They are so poor precisely because the vast majority of CS
graduates do not go on to do CS research or utilize their CS knowledge but
instead become software engineers.

~~~
pmichaud
I don't have a degree and I've never had a problem getting multiple job offers
when I've been on the market. I've held some very high posts as well. I think
people use the degree as a road sign or indicator of possible quality, among
other indicators, to come to a hiring decision. When the candidate is
demonstrably talented, the degree becomes worthless (not negative, but just
not contributing to the decision anymore).

~~~
moron4hire
I've personally found that people who got into programming before the dotCom
boom don't need to worry about a lack of degree, people who got in after
absolutely need a degree.

------
ditda
I just don't get where all the Joel-bashing comes from. You'd never know it
from reading this rant or any of the comments but Joel is giving his software
to these students for free:

"FogBugz would work great for tracking this: if you’re doing a capstone
project and need access to FogBugz, please let us know and we’ll be happy to
set you up for free."

More importantly Joel is paying for students to participate in the program,
and providing one of his programmers as a mentor. He's also had well-known,
paid internship programs at Fogcreek. To me that says he's taken the
initiative to fill this void in academia himself, with his own money no less.

~~~
rbanffy
"Joel is giving his software to these students for free"

The last thing Joel needs is students getting used to and/or turning software
like Trac or Bugzilla into direct competitors. Having noticed this, its pretty
obvious why Joel would give away FogBugz.

~~~
ditda
I agree, it is very obvious that Joel would promote his own software. That's
not really what I intended my post to be about though.

Joel has long said he only hires great programmers that know CS theory in and
out. I don't think that's changed, he's just also identified that recent
graduates are lacking in time-management and collaboration skills needed to be
good industrial programmers. However, he isn't just having a debate about
academic vs vocational education but offering paid internships, and now
sponsoring one of these Capstone groups, in an effort to give students the
skills he thinks they are missing.

~~~
rbanffy
Still, it's self interest. And not the enlightened kind.

------
yesimahuman
From Joel: _Where do they learn to write a program longer than 20 lines?_

Oh man, if I never had to write a program longer than 20 lines for my CS
degree, life would have been a lot less hectic (and I also wouldn't have
learned shit, which is not the case at all).

~~~
wyday
Joel's statement was hyperbolic. The average assignment might amount to 1000 -
3000 lines of code for the more advanced courses, but his point still stands.

Real products (products that actually make money) consist of a few thousand
lines of "fun" algorithm code and hundreds of thousands of lines of "boring"
code.

But code length wasn't even the main point of his essay - time management was.

~~~
markdennehy
How many of those hundreds of thousands of lines of boilerplate code have
concepts in them that the average CS student isn't taught in their "fun"
algorithm code?

None.

The simple fact is that with the amount of things to teach in a CS course,
boilerplate code is just not a good use of time to teach. Students come across
it in any major project and know it exists in the rest of the course - but
spending equal time on boilerplate and on algorithm code would be like
teaching an artist a degree course in chemistry before letting him buy his
first tube of paint. He'd be a great chemist, but a lousy artist.

As to time management, Joel's point was nonexistant there. He spent the entire
article berating student's time management skills, suggested Scrum supported
by his product could fix the problem, then quickly blurted out that industrial
programmers have equally poor time management skills and in fact are solely
differentiated from college students by the point that industrial programmers
have managers to enforce time management on them, and that neither Joel's
product nor Scrum can help that.

Leaving aside the point that he's not actually correct about time management
skills (long-term time management isn't just down to the programmer, but to
how stable project requirements are and other such factors), and leaving aside
the query of just how bad the programmers he works with in industry are
(because in six years of industry work, I never came across a programmer who
both kept their job _and_ had poor time management skills), there's the query
of what the hell his post was about at all in the first place if all it did
was to create FUD, hawk his product as a solution, then indemnify himself from
any failure by saying it probably wouldn't work (in a sufficiently roundabout
way that it didn't discourage the sale)?

~~~
wyday
_How many of those hundreds of thousands of lines of boilerplate code have
concepts in them that the average CS student isn't taught in their "fun"
algorithm code?_

Remember, his article was about _time management_. The whole basis of his
argument is that college kids assume "boring" code can be done quickly and
thus can be delayed to last possible second.

The truth is "boring" code usually means API code, user interface code, and
input processing code. They may involve concepts that CS students have already
learned, but it certainly isn't a breeze. It's not whether or not a student
can do it - it's how fast they can ship a working product.

As for the rest of what you wrote, you seem to have some grudge against Joel.
Maybe it's just manufactured to produce traffic. But that's just my cynicism
leaking through.

------
spolsky
I'm happy that my article is causing some conversation, but I was NOT
advocating that there is anything wrong with the nature of CS education, other
than the fact that it happens to be poor preparation for a career as a
programmer. Anyone who got to paragraph 4 of my article would realize that I
think CS degrees should stay CS degrees. That said, a lot of CS students do go
straight into programming careers, so a lot of good CS programs include
capstone/senior projects on a team, and they're never time-managed very well,
which is what I was writing about.

~~~
mgenzel
But are there really all that many undergrad programs that prepare people to
go straight into the associated careers? Why hold CS to a different standard?
Maybe we just should have a programming school a la medical school :)

~~~
jclee4843
Schools should have separate programs for students who want to pursue academic
research and who want to work in the industry. Recently graduated with a CS
degree, I found that most school courses didn't help much me to land on a job.
It's really the internships (which was part of my program) I did during my
school years helped me most to land on a job.

------
alexgartrell
Through internships, open source projects, research, and real courses
(Operating System Design and Implementation comes to mind), students learn
everything they need to about version control, bug tracking, etc.

Students who don't are lazy.

Professors who don't gently push students in that direction are lazy too. Good
courses have projects so hard that using version control is implicitly
mandatory. Further, Fundamentals of Software Engineering at my school requires
students to participate in an active open source project (for example: chrome,
firefox, scala, eclipse, etc.) and actually have their patches accepted.
[Edit] Also, group projects are only collected through subversion (yeah yeah,
I know), so students don't have any choice but to learn to use version
control.

Maybe it's time for a curriculum upgrade?

~~~
Mongoose
I can say the same for the University of Washington. A lot of my peers don't
know or care much about real-world development, but those of us who realize
its importance seek out jobs, research, and internships to fill in the gaps.

------
imok20
While some of this makes sense... this "Undergraduate courses lose their
technical currency in something like five years on average" sticks out like a
sore thumb.

How well would we be served if C were taught in undergraduate programs? In
depth. Add to that a Lisp and Java, and who knows what we would be capable of
in a shorter timeframe? C and Java have not gone obsolete, and along with
Lisp, many different paradigms of programming are taught. Not only that, but
technical skill with important and oft-used languages would be transferred.

I add Lisp simply to include another paradigm and because it's an old concept
that's never really gone away, and seems to be gaining traction (see this
site, see Clojure, see the continuing development and expansion of Scheme and
CL and Gambit etc etc.)

~~~
markdennehy
It does stick out... but apparently too far as it blocked out the following
qualification "(obviously different sectors age at different rates – web
programming has a very fast cycle, embedded systems a very slow one)". C is a
systems language, it's been around forever and is not about to be replaced
anytime soon, possibly anytime in our lifetimes. It's too good at what it
does. And that's why it's taught in a lot of universities.

As is Lisp, for the reasons you mentioned. As is SQL. As are several others
(though I'd disagree with Java myself because it's really more set up to do
things than to teach things and there are too many shortcuts in there - but
many others disagree with me on that point :) ).

I'm not for getting rid of established languages from courses. C is 37 years
old; C++, 30 years; Lisp, 51 years; Objective C, 23 years - these are well-
established languages that won't vanish in the four-year span of an undergrad
course. Java at only 14 years (and so many releases that stability is a valid
question) tends (to my mind at least) to mark the start of the gray area
there. Some though, like Perl and C++, are really hard to teach in compared to
others and that can outweigh their stability as a factor. Still though, I look
at languages like Python and would love to work them into a course. But it is
still a risk for the students. Maybe for the final year work though.

But teaching a four-year course using Ruby as a primary language,
intellectually interesting as that sounds, is an unethical act at the moment.
It's a beautiful language, a real joy even to read - but what the students
start learning on day one may not be around, or be a useful thing to know for
the jobs they'll pay their mortgages with four years down the line. That's the
responsibility the university is taking on when it creates a course. The
student invests four years of their life - the university must produce a
return on that, and conservative thinking is needed for that.

~~~
imok20
And that's exactly the problem. In liberal arts educations (such as the one
I'm receiving) or even at universities such as MIT, Python is the language of
choice. It's great fun to teach, very easy to learn, but it's not an industry
standard, and many would argue that it's too easy to use.

~~~
Zak
I don't think it's reasonable to claim Python isn't an industry standard. It's
used heavily in industry by large and fairly conservative companies and is
even more popular with startups.

~~~
moron4hire
I think it's reasonable because there are very rarely any such things as
standards in software development. Municipal building codes are standards.
Drug testing regimens are standards. Programming languages are not standards.
At best they are conventions, and only insofar as certain niche subset
industries are concerned.

As for de facto standards, I don't think we should be paying much attention to
them. I think it's very important to draw the distinction that software
development currently has _no_ standards (you _might_ be able to argue for
TCP/IP, where alternatives are only ever used because they fulfill some unique
use case not covered by TCP/IP), because for as much as we want to call this
industry "software engineering", we sure as hell don't treat it like any other
field of engineering, for many of the reasons already mentioned.

I think the first step is to sit down and agree on some terminology. You can't
even get two programmers to agree on what "Object Oriented Programming" means.
No wonder we aren't treated like professional engineers. We don't act like
them.

~~~
Zak
Most "industry standards" are de facto standards. We're not talking about laws
here, or even open standards like C or Common Lisp. An industry standard is
simply a widely-accepted practice, which is perhaps defined by the fact that
it would not usually be questioned by a casual observer from that industry.
Painting interior walls some shade of off-white is an industry standard. Using
Python for scripting and application logic is an industry standard in the same
way.

~~~
moron4hire
I wouldn't say that using Python for scripting is even a de facto standard in
that sense. Don't make the mistake of assuming your experiences are normative.

------
shin_lao
The most important thing to learn is data structures, algorithms, complexity.

The languages and techniques are not that important and change all the time.

Just go into a course where you understand what a hash table is, what is a NP
problem, what is a turing machine, etc.

Understand what an operating system is, what is virtual memory, how a program
is scheduled.

See how a compiler works.

Learn with a functional programming language, learn a language where you need
to manage memory and pointers yourself, learn an "object oriented language".

This will help you all your life.

------
steiza
I think most people agree that universities should try to teach people how to
learn, and not just the latest technologies and good engineering practices.
But I've sat through too many university lectures on programming language
syntax or introducing threads to believe the university is teaching me "how to
learn".

Why not tell students, "here's an introduction to C++, read it before next
week's lecture" or "for this project you must use a VCS, pick one and learn
it" instead of making me sit through lectures where the professor reads
documentation to me? Have other people had the same experience?

~~~
jimbokun
'"here's an introduction to C++, read it before next week's lecture" or "for
this project you must use a VCS, pick one and learn it"'

My one modification would be "here is the problem, implement a solution
however you choose" (with maybe a caveat that it must be in a language that
the TAs can read well enough to grade your work). Maybe some suggestions as to
which languages are appropriate, especially if libraries written in a specific
language are required or recommended.

------
dkersten
I think that learning the theory is more important than _the tools we use in
industry_. Picking up a programming language is pretty easy, if you already
know all the hard topics like different paradigms, computability, logic,
mathematics and so forth. Sure, you can learn these on your own, but I think
its much more valuable to have people who know how to learn, know how to
program and have a good, solid theoretical background.

I don't think you can be a great programmer unless you can develop a non-
trivial program in a programming language in all major paradigms. The best way
to do this, is to know the more abstract details beforehand.

Having said that, I do believe its important to do a lot of hands-on
programming experience and feel that universities need to be somewhat more
hands-on too. I also think that they should put some focus on team work and
collaboration, on tools like debuggers, source control and profilers and also
things like unit testing, though it is much much easier to learn these later
than it is to learn the theory later.

------
dangrover
This piece is a bit much, but I do think it's odd for Joel to be prejudiced in
only hiring people from top schools and then complain about how top schools
are too theoretical. You can't have it both ways.

