Jan 27 2008

What Good is a CS Degree II: The Response

Published by Brian at 5:00 pm under Uncategorized

So, I wasn’t very good at responding to all the comments on my original post, so I’m going to exercise my editorial fiat and just respond to them all at once, and call it a new blog post. Ain’t I clever?

Joe said:

Joel accidently stumbled kinda close to the answer actually. We don’t need a BFA in programming, we need a community college “java developer” course (or C#, or whatever).

Right there is the first problem- Java or C#? Yeah, if you know one, you can learn the other easily. But that implies learning. At which point, the old joke goes, we’ve settled what sort of lady you are and are just haggling over the price.

The other thing is that business needs Java developers today- but that’s not what they’re going to need ten years, or twenty years, or forty years, down the road. So what’s going to happen to all of those tech-school grads who only know Java then? This isn’t good for the developers.

Nor is it good for the employers, either. The “disquieting implication” I mentioned is that the value a developer has is greater than the sum of their skill sets, after they’ve been working for you for a while. The point and purpose of hiring a programmer is not to generate code, but to solve problems (usually by writing code). Which requires knowing a heck of a lot more than just the Java syntax and the ODBC API. It involves knowing the specific problems your business is likely to have. Who to talk to about various aspects. What the business flow really is (as opposed to the business structure the VP has on a powerpoint presentation).

So, it’s ten or twenty years on, and you’ve spent the last decade or two schooling this Java programmer on your business and your company, and now the time comes to dump Java and move on to the next programming language, and he cannot learn the new language, what do you do? Dump all that effectively irreplaceable domain knowledge? Stick with Java when everyone else is moving is moving on- making it harder to hire new programmers (how many Cobol developers are there today?), and not gaining the advantages of moving to the new language? How much better would it be to be able to keep all that domain knowledge, and just have your existing developers learn the new language?

Business thinks it wants Java Developers. What it really wants are Developers who know Java. There is a difference.

Denis said:

Joel gave some facts in today’s industry but he suggested wrong solution. CS education matters. However, history can’t save people if the people does not _learn_ from it. How to learn? By practice. Knowing GC is a thing, implement a GC module is another thing.

I agree. Well, sort of. There is an advantage to being introduced to the ideas, and then get your hands dirty- introduce the students to the idea of how GC works, and the various ways GC has been implemented- not just reference counting and mark and sweep, but generational copying and all the other extensions. Knowing that there is an answer, and having an idea where to find it, is 95% as useful as knowing the answer itself. “Yeah, I remember that there are better garbage collectors than reference counting- let me look some things up and get back to you…” Getting your hands dirty in code connects the ideas to the real-world.

That said, the big problem here is time. We expect people to be able to get CS degrees in 4 years, maybe 6. Worse yet, it is assumed that going into a degree in CS you know nothing about programming. Not one thing. Hopefully things are better now, but when I took CS, it wasn’t even assumed you had ever seen a computer before, and had to be taught things like how to log on or edit a file. This cuts into the amount of time to teach “real” things, like garbage collection or compiler construction. It’s not unlike the English department had to assume you first had to be taught to read and write, and then in your last year you can read Hamlet and Moby Dick.

In my perfect world, people would recognize that basic programming skills are as important as basic math or science or language skills, and basic programming would be taught in the high schools, if not the grade schools. Unfortunately, that’s not the world we live in, so the next best thing is for people to realize that a CS degree is a start, not a finish.

SimonTeW said:

One of my pet peaves is the concept that “we don’t teach you what you’ll need to know, we teach you how to learn what you’ll need to know”. Actually, it’s perfectly sensible as far as it goes. However, when I was at university it was used as an excuse to teach totally useless rubbish.

Maybe. There is stuff that probably is necessary that attracts some tenured professor’s attention, and he insists that everyone needs to know his particular useless theory. But I suspect not. Just for fun, I went and took a look at my Alma Mater’s CS curriculum. I don’t see anything on there I’d consider “useless rubbish”- in fact, looking at it, many places where it says “OR”, I’d say “AND”.

bdprescott said:

Kids coming into the workforce today do expect that their new employer will change their methodolgies, and programming languages to what the kids were using in college. That’s been going as long as I remember.

Yeah, but has it ever worked? Not to my knowledge.

Buford Twain wrote:

It’s important to note that schools, universities, technical colleges, etc. are IN IT FOR THE MONEY at the end of the day. So, they will not necessarily do what is best for the “good of the world” they will pander to whatever they think will bring in the most cash. We are all responsible for ourselves, we can choose to go to school, or learn something ourselves, it doesn’t do any good to blame educators. They are led by market forces and will tend to supply whatever is in demand. We are our own educators, in the end, whether we choose to pay money to sit in a class or read a book on our own.

You don’t become a professor of CS for the babes and the big bucks, but your point still stands- the rise of “Java Schools” reflects a very real demand, both in the economic sense and in the terrorist hostage taker sense, from current and future students. But if that’s the way things remain, then we as an industry are doomed- entire generations of students will only be taught those things that an 18 year old twit (all 18 year old males are twits, at best) thinks is important. But my point wasn’t to blame the educational system- but rather to try and adjust the expectations of those going for a CS degree.

Raganwald:

I really don’t mean to wail on you- it’s just that your posts make me think. For example, your No Disrespect post. There should be no “easy” programs. Or, rather, they should be exceedingly rare. If a problem is common and easy, it should be automated and the computer should take care of it (except, maybe, for the small hard bits). Which makes me suspect that a large number of programmers are not delivering the value they could or should deliver.

Alaa Salman said:

The dragon book is indeed old. And you can’t really expect to build a commercial grade compiler after reading just the dragon book. Its true that we build compilers differently today, but the theory behind them is still the same. Which is what the dragon book tries to teach…so for example, you cannot dream of writing something like gcc on your own, but after reading the dragon book..you would certainly what it means when somebody talks about a bottom up parser or an LALR grammar for example.

The Dragon Book is necessary, but not sufficient, I agree. If I recall correctly, it’s innocent of BURS- Bottom Up Rewriting Systems, which is the modern (and much better) way to do instruction selection, peephole optimization, register allocation, etc. But when you go to learn about BURS, what do you find out? You’d better know your finite automatas really well.

Popularity: 9% [?]

15 Responses to “What Good is a CS Degree II: The Response”

  1. Assafon 27 Jan 2008 at 7:15 pm

    “So what’s going to happen to all of those tech-school grads who only know Java then?”

    Same thing that happened to car mechanics who could fix a carburetor with both eyes shut, once all new models went fuel injected. Photographers when film processing gave way to digital workflow. Typists when typewriters went bust replaced with the PC. The legacy didn’t go away, it actually became a desired specialty, but most just learned new skills.

    “Business thinks it wants Java Developers. What it really wants are Developers who know Java. There is a difference.”

    Hiring people who can’t transfer their skills to new technologies is a technical debt. Technical debt requires risk analysis, and most businesses are bad at risk analysis of technical debt. So you’re right that some of them don’t understand what they need, but I argue that a lot do understand what they need. Risk analysis. Better developers cost a premium, and badly managed with high turnaround provide no lasting benefit.

  2. [...] I found this response to the debate by Brian Hurt at Enfranchised Mind to be very good (and much better written than mine) in the sense of mentioning that, effectively, [...]

  3. Robert Fischeron 28 Jan 2008 at 8:38 am

    Notably, most mid-sized and all large-sized businesses try to factor out the business knowledge from the coders. You have programmers/developers/engineers, whose job it is to write code. You have architects, who job it is to design the applications, understand how systems interact, and tell the programmers/developers/engineers how to avoid the technical closets with the skeletons in them. And then you have BAs, whose job it is to handle the quasi-technical business requirements (e.g. real-world business workflows and user feedback). And then you have the PMs, whose job it is to handle the political requirements for the project.

    So, the position you’re describing basically only exists in smaller businesses or in smaller autonomous units within larger corporations.

  4. Reg Braithwaiteon 28 Jan 2008 at 8:40 am

    Brian:

    Have no fear, your Waling on my posts does not make me Wail :-)

    “There should be no “easy” programs. Or, rather, they should be exceedingly rare. If a problem is common and easy, it should be automated and the computer should take care of it.”

    You know you are preaching to the choir! That post was an imaginary dialogue between myself and a strawman who wanted an easy University program. But I will argue the strawman’s case: regardless of what you or I think about how to deliver value to businesses, NOT ALL BUSINESSES WANT TO BUY WHAT WE ARE SELLING.

    I think they are not acting in their own best interests, but nevertheless I observe that a great many businesses want to try to build software by hiring clerks to build it. Do I want to be a clerk? Not me personally, no. Do I hire clerks? Definitely not. But sadly, there is always going to be someone who refuses to pay for fresh oats and prefers to get a discount on oats that have already traveled through the horse.

  5. Joeon 28 Jan 2008 at 10:58 am

    “Right there is the first problem- Java or C#? Yeah, if you know one, you can learn the other easily. But that implies learning.”

    No, you just learn the one you want a job doing. A 6 month vocational college course can teach anyone how to be a java monkey. There is a huge section of businesses that want exactly it. Lets give it to them, instead of having them turn university CS departments into nothing more than a much slower version of this.

    “The other thing is that business needs Java developers today- but that’s not what they’re going to need ten years, or twenty years, or forty years, down the road. So what’s going to happen to all of those tech-school grads who only know Java then?”

    Then they go back to school to learn the new cobol for the next decade. Many tradeskills work this way. Why should code monkey be any different? There’s lots of businesses who want these kinds of developers, and lots of people who want to be those developers instead of learning CS and becoming programmers. So why not give everyone what they want and leave CS for the people who want it and will use it?

  6. Joel Kleinon 28 Jan 2008 at 12:46 pm

    “The other thing is that business needs Java developers today- but that’s not what they’re going to need ten years, or twenty years, or forty years, down the road. So what’s going to happen to all of those tech-school grads who only know Java then?”

    The cliched answer I know is that after 5-10 years the people with the domain knowledge get promoted to managers and tech leads and no longer write code. The cheaper fresh graduates do the grunt work and if necessary learn the new technology. Those who don’t care to get promoted because they want to keep coding learn the new tech, and I think those who don’t learn the domain knowledge are not invited to be promoted. I don’t know if this is what you mean by Business. I’ve seen this born out at tech companies with environments of largish teams (100-300 developers) making huge systems of end-user products. The complexity of these systems required lots of domain knowledge.

  7. Robert Fischeron 28 Jan 2008 at 2:25 pm

    @Joe

    +1 — There are some pretty impressive business stunts pulled to accomplish exactly this (see my comment above). A lot of businesses want technicians, not developers: they don’t want people who design cars, they want people to work the assembly lines and fix them up. See my post The Programmer is Dead: Long Live the Technician! for more on that.

  8. Shanti Brafordon 28 Jan 2008 at 10:28 pm

    My $.02 - companies always seem to want the “Top 1%”, CS-degree graduate “rockstars”.

    Are 99% of these companies building compilers, facial recognition software, AI engines or a better bubblesort? No — it would seem that a large chunk of a CS-graduate hired developer’s day has little to nothing to do with “CS-stuff”.

    Sadly (or is it?), CRUD rules the day if your customer accesses your product through a browser. And desktop Java or C# applications? The difficult part of the job is almost always about nailing down requirements, getting the UI right, shuffling data back and forth, etc.

    Rarely does a programmer, at least from my experience, need to dust off their copy of:
    http://www.icpc-bolivia.edu.bo/books/intro_algorithms.jpg

  9. Robert Fischeron 29 Jan 2008 at 7:55 am

    @Shanti

    My $.02 - companies always seem to want the “Top 1%”, CS-degree graduate “rockstars”.

    My experience is that companies that ask for “rock stars” or “ninjas” or “gurus” are basically trying to be hip and authentic1, and they generally fail at it. Worse, I’ve found recruiters using those words as ways to entice people into thinking it’s a prestigious position, and therefore you should lower your rates for the opportunity to work at such an incredible place.

    As a rule, I don’t apply for any contract that uses those words anymore.

    1See The Cluetrain Manifesto for a reason as to why. The book also features a sidebar rant from some loud-mouth named Brian Hurt which is worth reading anyway.

  10. Robert Fischeron 29 Jan 2008 at 8:05 am

    Also, companies tend to ask for the top tier because they’ve been burnt too many times by getting bottom tier candidates. So they tend to ask for overkill in their requirements.

  11. bhurton 29 Jan 2008 at 2:56 pm

    There is another post brewing on this subject, but there’s one response I wanted to make right away (because it doesn’t fit into the post I’m thinking about, among other things):

    Joel Klein said:

    The cliched answer I know is that after 5-10 years the people with the domain knowledge get promoted to managers and tech leads and no longer write code.

    Let’s think about this for a moment. There are two problems with this. First problem- this works only if each new generation of programmers is signficantly larger than all the ones previous to it. Think about it. Over, say, a fourty year long career, you spend, let’s be generous, 20 years doing “real work” and 20 years as a manager. If each generation of programmers is only as large as the one previous to it, that means half your people are now managers. If you only spend 10 years programming, 3 out of 4 are managers. At 5 years programming, 7 out of 8 are managers. Talk about too many chiefs and not enough indians. In the fifties, sixties, seventies, even the eighties, we could get away with this- because there were many more young programmers than there were old programmers. But the “promote to management” idea works a lot like a Ponzi scheme- once you stop getting enough new blood in, it collapses.

    Second problem- you’re assuming that everyone who is good as programmer would be good as a manager. I, for example, would suck at being a manager, and it’s not something I’d enjoy doing. So, one of my career goals is to never be a manager (team lead, maybe. No higher).

  12. [...] » Blog Archive » In Defense Of Computer Science on What good is a CS degree?bhurt on What Good is a CS Degree II: The ResponseLibby on Let Me Save You $40: Here’s How to Be [...]

  13. [...] sobering feet-on-the-ground reminder of the heady “CS degree” conversation going on (1, 2), and it has some quality charts a la my “Brief Reality Check on Ruby Jobs” [...]

  14. Michael Kimsalon 08 Oct 2008 at 8:18 pm

    Wholly late to the party, but I just read the line about “java developers vs developers who know java” and thought I’d chime in. Someone identified me as (accused me of being a?) “Windows developer” because on my webdevradio podcast (subtle advertising plug there) I mentioned I was doing some .NET development. I felt compelled to explain that I’m a developer who’s doing some .NET work, but I’m not a .NET developer. This was meant less as some sort of arrogant “I’m not a *Windows* developer!” defense mechanism and more of a “I’m *not* a Windows developer!” statement. That is to say, there are people who devote their entire life to Windows development, and are damn good at it, and I’m not one of them. Not because of any hatred of the platform, but just because I tend to move around between platforms. People who are truly *Windows* developers - people who can make it sing and dance and know the ins and outs of all the underlying guts - they’ve got my respect because I basically can’t do what they do. But I *can* learn enough on most platforms to get done what clients need done, and if one platform is better suited than another I can make that recommendation somewhat unbiasedly. I still lean towards “open source” partially for cost and partially for issue of freedom, but have this recent case where, all client factors considered, Windows was the best option right now. So we went with it.

    Anyway, just a slight ramble there. The “XYZ developer vs developer who knows XYZ” distinction is *huge* and sadly one that is hard for many people to make.

  15. Brian Hurton 11 Oct 2008 at 10:51 am

    Ah, the wonders of having a comments RSS feed- it’s never too late to chime in to a conversation.

    Actually, at the end of the day, I feel sorry for the XYZ developers- those who know one thing, and only one, no matter how well. Because sooner or later, and generally sooner, that one thing becomes irrelevant and obsolete. Well, at least for the things XYZ developers generally specialize in- being an expert in graph theory or linear algebra isn’t going to be obsoleted any time soon.

    I knew a guy, once, who was an expert Windows developer- knew damned near everything there was to know about Windows… 3.1. He’d already had the unpleasant experience of losing jobs to people with 1/5th his experience, simply because they were experienced in Windows 95, and he wasn’t. You see the exact same problem in nature- species that over specialize generally die out, it’s the generalists who can adapt to a wide variety of climates and conditions that have the real longevity. For the exact same reason. Unlike in nature, where the same conditions can hold for geological amounts of time, in the realm of computers the analogical equivalent of massive climate change happens on about a 10-time frame.

    So how do you be an adapter, not an over specializer? How do you survive when the whatever it is you so carefully learned gets left on the side of the road for something new and completely different? Well, first, know more than one thing. And always be learning something new. And second, concentrate on learning those things that don’t change- which effectively means, learn the theory.

Trackback URI | Comments RSS

Leave a Reply

Green Web Hosting! This site hosted by DreamHost.