Jan 27 2008
What Good is a CS Degree II: The Response
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: 10% [?]
“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.
[...] 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, [...]
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.
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.
“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?
“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.
@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.
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
@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.
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.
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:
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).
[...] » 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 [...]
[...] 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” [...]