Fog Creek Software
Discussion Board




Joel's post today: Coder To Developer

Here's an interview with Brian Kernighan that, besides bringing out the demure persona of his, draws tangent with Joel's foreward posted today. Specifically, the question about the accent of formal CS education.

[EXCERPT]
M: Speaking of academia, I saw that you have taught at least two classes at Princeton. I would like to ask about your opinion on computer science education, because I heard complaints coming from the industry that undergraduates in computer science classes master too much useless theoretical skills and they don't know enough about real program development.

K: I've taught four courses at Princeton and Harvard in the last four or five years, at various levels, but that's not enough to qualify me as an ``expert'' in computer science education. Those are two particular schools and I've taught rather screwball things. I don't think universities should be in the business of teaching things that you should learn at a trade school; I don't think it is the role of a university to teach people how to use, let's say, Visual C++ and its Integrated Development Environment. I think the role of the university is to teach students how to program in a particular flavor of language that has for example object-oriented character, to help students understand the issues and trade-offs that go into families of languages, like C, C++ and Java, and how those relate to languages which slice it in a different way, like functional languages. Teaching students skills so that they can step immediately into a Windows development shop and are able to write COM programs is just not right. That's not what universities should be doing; universities should be teaching things which are likely to last, for a lifetime if you're lucky, but at least 5 or 10 or 20 years, and that means principles and ideas. At the same time, they should be illustrating them with the best possible examples taken from current practice.

At Princeton I taught a junior level course, a combination of software engineering and advanced programming: the students there, at least the seniors in that class, were largely very experienced in the kinds of things that industry probably wants. They were comfortable with Visual C++, they knew how to pick components off the net and glue them together, and they could write Java applications of considerable sophistication. Much of that may have been learned by summer jobs. If industry wants people who have more than a ``useless'' theoretical knowledge [laughs], what it should be doing is making sure it gets these bright kids from school and gives them interesting summer jobs that round out the theoretical ideas and the general insights with specifics of a particular application. People pick up that stuff remarkably fast and if they do interesting things on summer jobs they carry that back into their academic careers. I was pretty impressed by how much the students knew, stuff they had not all learned in class.
[/EXCERPT]

http://www-2.cs.cmu.edu/~mihaib/kernighan-interview/index.html

Sathyaish Chakravarthy
Wednesday, May 05, 2004

One problem is that CS degrees aren't designed for "real program development." That's what the new Software Engineering degree is for (http://www.stevemcconnell.com/SeNotCs.pdf). How well that degree program works remains to be seen.

Another problem is the speed of change in the software industry. Tomorrow or a decade from now the language or development enviroment you're learning and using today may be obsolete, or at least all but replaced by something else. That's where software developer licensing/certifications come in.

Anonymous
Wednesday, May 05, 2004

Hey, Anonymous. That link to the PDF file you sent, I am almost sure, is an excerpt from [BOOK]After the Gold Rush[/BOOK]. It gave me a nostalgia. I read that book an year ago, and was going to remark about Steve McConnell's demarkation of the engineer vs. scientist.

Sathyaish Chakravarthy
Wednesday, May 05, 2004

Why is it that companies expect people with CS degrees to be great programmers?  That is about as silly expecting civil engineers to be great carpenters.  It is called computer *science* for a reason.  It is not computer maintenance, computer programming, or Dreamweaver wrangler.

Great programmers will most likely already have some programming ability when they begin a CS program.  They will continue to improve their skills throughout college.  It may then take about 12 to 18 months for them to learn the ins and outs of corporate development.  They should be able to pick up new skills quickly.

Anonymous
Wednesday, May 05, 2004

"Why is it that companies expect people with CS degrees to be great programmers?"


Good point. What would you expect someone with a CS degree to *be* good at?  Any applied skill?

Mr. Analogy
Wednesday, May 05, 2004

I also agree with the CONVERSE of Kernighan's point -- students should seek out the right teachers. Different ones. With the net, it's unforgivable not to. Before it, I guess people were limited to what was geographically nearby.

Teachers nearly always have some limiting bias or other. It's important to sift out the education from them without having the bias programmed into you.

Tayssir John Gabbour
Wednesday, May 05, 2004

> It is called computer *science* for a reason.  It is not
> computer maintenance, computer programming, or
> Dreamweaver wrangler.

It would be great if someone could explain why they call it a science because it is not. Most of the course at the undergrad level in most colleges is pretty heavy on the programming side... Algorithms, programming languages, operating system concepts, on and on... There are a few basic math and science requirements of course, but there is really nothing scientific about a computer science degree as far as I can tell. In my college, there were some classes (like "Human-machine interface", "User interface design") that could have been perhaps considered scientific, but then again, probably not...

Companies expect people with CS degree to be good programmers because that's mostly what they do in school. What did you do to get your CS degree if that's what you got?

grunt
Wednesday, May 05, 2004

A computer science degree is a dilemma.

By far, most computer science undergraduates are fresh out of high school with no professional work experience.  Teaching them theory without any experience to build upon doesn't work very well.

Getting practical work experience at summer jobs seems odd to me.  Spending 75% of the time on theory and only 25% on practice is probably not the right balance.  If it were up to me, the student would start out with 20% theory and 80% practice in the first year and gradually increase up to 75% theory and 25% practice in the senior year.  (Of course, I do not know any university that does that.)  Even if that were to happen, the student would need to be exposed to real programming during those summer jobs, not the usual toy programs, small utilities and make-work that most computer science summer interns end up doing.

Additionally, computer science professors often don't keep up with the latest tools so I don't think that you would necessarily learn a lot about Visual C++, even if they offered a class in it.

The cliche about undergraduate degrees is that they are "teaching you how to think."  I'm not sure that most of us really end up knowing how to think.

Really, a computer science undergraduate degree makes you aware that various abstractions and computer science theories exist.  You may not understand them but, at least, you have had some exposure to them.

For many people, the first few years after getting a degree is a difficult time.  It is like being thrown into a swimming pool after sitting in a classroom for 4 years learning about CPR and fluid mechanics.  You have a vague idea about what to do but don't really have all the pieces to do it.  If you are lucky, a company hires you despite your lack of skills (i.e. you putt around the shallow end of the pool for a while on somebody else's dime until you figure out how to swim) or you become unemployed (i.e. you land in the deep end and a great thrashing ensues).

People do complain that a computer science undergraduate degree doesn't prepare you to work in this field.  Even if it did, the next question would be: "Why do universities produce people who are trained to be followers and servants rather than leaders and entrepreneurs?"

If it were up to me to create a practical education, I'd probably include some business courses as well as computer science theory and real-world experience at summer jobs.

The whole thing is a tangle.  Universities tell you to go to a trade school if you want to learn hands-on skills.  But companies treat you like a second class citizen if you do that. 

Daniel Howard
Wednesday, May 05, 2004

Universities shouldn't try to be job training programs.

There's so much more possibility in life than the shabby world of commerce that sells us our plastic environments, and I for one hope universities *NEVER* shirk their role in providing environments for people to learn the potential of their human mind and spirit before they become soulless cogs.

ya
Wednesday, May 05, 2004

I enjoyed the quote from Alice's Restaurant.

Christopher Wells
Wednesday, May 05, 2004

I'm going to give a plug to my alma mater here, but I think RIT gets this right.  Plenty of the theortical sides of software -- I would err on there being even more,  but also plenty of pratical through the co-op program.  And yes we did use a source control system while in the program. 

christopher baus (www.baus.net)
Thursday, May 06, 2004

The whole "universities should teach practical things" vs. "universities should teach academic things" debate seems unnecessary, in my opinion.

Four years is a long time.  Why can't they do both?  All reputable CS programs have electives, I don't see why it's against the "spirit" of university study to have electives that teach practical things.  Like "CS 3033: Introduction to mainframe development" or "CS 2021: Application Server Fundamentals".

I'm a year past getting my bachelors in CS, and it's incredibly frustrating to see not only what I didn't learn, but what I didn't *know* I wasn't learning.  Yeah, you can pick most of it up as you need it, but surely it would be better for everybody if there was a well-structured way to prepare people to use these technologies correctly?

Pierce
Thursday, May 06, 2004

I've given up hoping that Universities will teach "software devleopment" practices.  I'm just hoping they'll actually teach people to PROGRAM.  you wouldn't believe the number of kids who cheat, steal, and basically turn in shit for a program and still pass.  Even some of the smart kids arn't getting it because of the poor quality teachers.  I think a university is a good place for someone that already knows how to program. It fills in a lot of  knowledge gaps and gets them thinking a little differently.  But if a student goes in without knowing how to program, I wouldn't trust them to help me debug hello world.

vince
Thursday, May 06, 2004

It's true that CS is not science.

Also, the idea that the university CS degree is helping you grow as a person and job skills are unnecessary is absurd. To grow as a person, you need to be studying the humanities.

Medical and law school both teach practical real world skills. I don't see why CS can't do so as well.

Dennis Atkins
Thursday, May 06, 2004

When was it decided that CS wasn't a science?

According to here: http://dictionary.reference.com/search?q=science&r=67

"The observation, identification, description, experimental investigation, and theoretical explanation of phenomena. "

I think CS would fit into that definition fine.

Matthew Lock
Thursday, May 06, 2004

If you have to actually tack on the world "science" to it, then it probably isn't.


Thursday, May 06, 2004

If you want a degree that teaches you how to program get a CIS degree or go to a vocational school (DeVry).  I would never hire a person who didn't try to learn anything that wasn't taught to them in a class anyways.

Anonymous
Thursday, May 06, 2004

For people who don't know why computer science has "science" on the end:

http://en.wikipedia.org/wiki/Computer_science

Matthew Lock
Thursday, May 06, 2004

That's a definition of pretentiousness, not computer science.

.
Thursday, May 06, 2004

Also see Knuth's _Selected Papers in Computer Science_ for some of the politics "computer science" entailed. The main purpose was to focus funding on computer stuff, I guess to raise it beyond early fortran. So there were political aspects, but there was a good point.

Compsci and industry are both disappointing in general, but there are impressive things if you don't get bogged down with the crap.

Tayssir John Gabbour
Thursday, May 06, 2004

"Universities shouldn't try to be job training programs."

Try getting a job today with no experience in C, C++,or Java.

Then try explaining that your CS program "taught you how to think" and didn't get you messy with the details.

Then, say with a straight face that you can learn any language in a matter of days.

Then, watch the job offers pour in.

STEP 3: PROFIT!!!1

I graduated in '92 from Penn State at a time when they didn't actually use C in any classes of note - and many grads found out the hard way that employers aren't as sanguine about the wonderful CS theory as their professors led them to believe. I was one of the ones who made up for this deficit with the right summer job; not everyone was practically able to do that.

MD
Thursday, May 06, 2004

Computer Science has as much to do with science as Fashion Science, Restaurant Science and Hospitality Science do.

Scientist
Thursday, May 06, 2004

Don't knock it:

http://www.saptagiri.com/bachelor_hospitality_science.htm

Hospitality Scientist, just call me Doctor
Thursday, May 06, 2004

Conversely, Food Science IS real (applied) science, even though it sounds like a joke.
I have a sister-in-law who is a food scientist for Pepsi. The amount of brainpower they bring to bear on replacing ingredients with lower cost ones while maintaining taste / nutritional equivalence is truly incredible.

curious
Friday, May 07, 2004

Can't believe no one's thrown this in yet:

Computer Science is no more about computers than astronomy is about telescopes.
Edsgar Dijkstra

A CS student should program, just as an architecture student should build houses, but neither is the essence of the discipline.  Degrees which teach only coding should be called something else ( Management of Information Systems?  Applied Computing?  )

just passing through
Friday, May 07, 2004

Of course, now I follow the wiki link and see the quote. Great minds think alike?  (I wish)

just passing through
Friday, May 07, 2004

*  Recent Topics

*  Fog Creek Home