raganwald
Monday, January 21, 2008
  No Disrespect
It’s like if you walked into a painting class, told everyone that learning to paint was too hard, and then gave everyone a camera and told them that photography was the same thing as painting, only a lot easier to do. No disrespect towards photographers intended.
Who did Kill the Software Engineer?


I hear an argument that business programming isn’t hard. It does not require understanding combinatorial logic and fixed points. There is no value in knowing how to program in OCaml (or why that might be a good idea). Business programming is practical, and business programmers need practical training to do a practical job.

Ok, I’ll bite. Really. As Keith would say, I’ll climb down from my former position on this. Fine. So here’s my question to you, Mr. “An undergraduate Computer Science program ought to be as easy as business programming:”

Why don’t businesses advertise for vocational college graduates?

You are describing a vocational job to me. The rote application of practical principles is nothing more and nothing less. How is what you’re describing any different than a job as an accounts receivable clerk or a dental technician? Or a land surveyor? Or a architectural draftsperson?

If your comp-sci course is easy then you’re either a genius or you’re wasting your money. The odds on that are not in your favour.
—Chris Cummer, Two Thoughts on Computer Science Courses

These are all vocational jobs with a well-established and perfectly functional system for training clerks, technicians, surveyors, and draftspersons. Well? Why won’t businesses come clean with everyone and say that’s what they want?

Let me tell you the cold, hard, truth. You aren’t going to like this, but I ask you to believe me when I say that I am telling you this for your own good:

There is a culture of pretending business programming is more than it is. Some of you calling for more Java in University may take false hope that I am on your side. You may think that the people arguing for Scheme, Haskell, and OCaml are elitists. Wrong. They do not have a problem. You are the one with a problem because you don’t want to tell all your friends you have a job as a clerk.

So you want to be a clerk

You do a clerk’s job, you settle for a clerk’s working conditions and wages, but you take solace in the thought that you are somehow more than a clerk, because you have a university degree and the dental technician who cleans your teeth doesn’t.

Only everyone knows it’s a sham, especially the hiring manager who puts “University degree required” in the job advertisement. He wants to hire a clerk, someone who will work long hours doing as they’re told in a top-down, hierarchal command structure. Does that job sound like there is any Science involved? Of course not, everyone knows that, it’s why the industry is trying to weed all of the Science out of a Computer Science degree.

And you’re falling for it, hook, line, and sinker.

The university just wants your money, they’re selling you a gown and mortar for the low, low price of $5,836 a year (books, room, board, and other expenses not included). Business just wants to let you have your little fantasy of being a cut above the X-Ray Technician who does the same, repetitive thing all day working with a big flat screen and data that goes on a hard drive ($45,950 median salary).

The sooner you figure out the game, the sooner you can start playing instead of being played.

So we dumb down the curriculum. Who loses? Please don’t tell me the University loses its reputation. They don’t care, their budget is based on how many people like you they can con into getting a piece of paper that isn’t really any better than a vocational college certificate. If they need any more prestige, they’ll take your fees and give them to someone who will write a paper.

You didn’t write any papers, did you? The one thing that is really, really useful for getting ahead in business is learning to write, learning to speak, learning to persuade. If a Computer Science degree was really meant to give you an advantage in a business environment, it would involve a lot more writing English than writing Java. You would know that if you went on to get an MBA.

Anyways, the university is doing just fine, thank you for helping to pay for a fancy new building. How about businesses? Are they losing because they're paying university degree wages for clerks? No, because the secret of business is that the market works out the right price unless you can monopolize supply.

And you, my friend, are not monopolizing supply. Did your university have a strict cap on the number of undergraduates entering the CompSci program? No? Then your degree has absolutely zero leverage. Wait, I could be wrong. Do businesses refuse to hire workers with foreign credentials? They do hire workers with foreign credentials? Well, there goes that component of value.

Let me tell you, and I speak as a hiring manager. We lie to you. We write in articles and books and on blogs how much we value a degree. Joel Spolsky argues that there ought to be good degrees. But I will bet anyone $100 that he will hire a high school graduate if that graduate is smart and can get things done.

Beyond your actual ability to write programs, a degree is only as meaningful as its scarcity. If degrees are easy to get, they mean squat. Sure, when I’m hiring I might choose to toss all the no-experience resumés without degrees. I’m still left with a pile of two hundred people to interview. Do you think I’m paying any of you top dollar when I have 199 more people to see?

The reality is that your degree is only a pacifier, a way to make you feel good about yourself. The industry is selling you the illusion of respect.

I’m telling you this because the sooner you figure out the game, the sooner you can start playing instead of being played. If you really want to be more than a clerk, you can pay more attention to what is to be done and how much freedom you have to do it and less attention to whether there is a title or a degree involved.

You can be respected for your job. But it has nothing to do with whether we pretend a university degree is required for the position. Everybody knows it isn’t: if it was, there would be no need to dumb down the program to suit the job. Respect comes from what you accomplish, and where programs are involved, it comes from writing programs, not from a title or a piece of a paper (nor from a book or a blog). Nobody on Earth can stop you from writing software and earning genuine respect.

So do yourself a favour. Don’t let them play this game at your expense. Don’t allow them to disrespect you so transparently.

You deserve more respect than that.

p.s. Look, there is nothing wrong with being a clerk as long as you not in denial about your job. There is nothing wrong with educational institutions helping to fulfill a demand for clerks. And although I don’t think it is in a business’s best interests to treat programmers as clerks, there is nothing wrong with a business making that choice.

That being said, there are institutions that offer much more than vocational training in their undergraduate programs. Here’s why it’s in your best interests—not business’s best interests, but your best interests—to get a degree involving actual Computer Science, not vocational training: What good is a CS degree? And furthermore, there are plenty of programming careers that are an alternative to clerking. I am not going to say better or worse, just different. You don’t have to follow that road, no matter how many others are going that way.

The point of this post is that you need to have your eyes wide open when choosing what type of education you need and what type of career to pursue.
 

Comments on “No Disrespect:
Now I don't know what to say to that. I don't have a CS degree, not even close to it. I've done "business programming" for the past 6 years or so and gotten really good at it. Good enough to go off on my own and freelance, but not in the Rentacoder sense, freelancing where people come to me because I've developed a reputation as a good at what I do.

I do care about "elitist" languages. While I work a lot in C# and PHP to pay the bills, I think in Python and am learning Haskell right now. But at the end of the day, a lot of CS stuff is opaque to me. Big O notation makes a little sense, other things I grasp over time, some stuff stays opaque. But I can't claim to be anything more than what you're dismissively* calling a vo-tech keyboard jockey.

Over the past year or so, your blog and codinghorror have touched on something I've been thinking about. Heck, you may be a little bit of the reason I went off on my own. Because (and maybe this is entirely self-deluding) I don't think a CS degree matters. So much. Don't get me wrong, I think it's better to have it than not as a programmer. But working as a consultant to a lot of big companies (and a lot of small ones) over the past few years, I don't think the degree matters so much. The thing that matters to the exclusion of everything else is which side you're on: are you working to make something great or are you collecting a paycheck and trying to stay out of the line of fire? (I thought it interesting you name-checked Atul Gawande last week, because he's someone who's influenced my thoughts as well.)

I went out on my own because I could see myself through the eyes of coworkers (friends and otherwise). I knew I was a diva, an assache and completely unreasonable. So I left because I do think we're getting to a point where it's reasonable to hope to work entirely with other unreasonable folks and have it work. I am forever inspired by Neal Stephenson's description of the kind of people I'm talking about:

"They tend to be absolutely straight shooters . . . Their openness would probably be career suicide in the atmosphere of Byzantine court-eunuch intrigue that is public life in the United States today. On the other hand, if I had an unlimited amount of money and woke up tomorrow morning with a burning desire to see a 2,000-hole golf course erected on the surface of Mars, I would probably call men like Daily and Wall, do a handshake deal with them, send them a blank check, and not worry about it."

Maybe I'm 100% off-course (I've been nosing around my local university's graduate CS program recently as insurance), but I think you allude to the fact college degrees are not an infallible mark of worth. It's a fairly weak indicator, just better than anything else we have other than personal recommendations. But those could work (Facebook, LinkedIn, etc) and if development were to fracture, to stop being something done on shop floors of big companies and move more to craftsmen working in self-assembling teams, I think we'd be better off and there would be less of a need to engage in the sort of divisive "2 types of programmers" conversations that seem to be springing up on blogs recently. Those seem to be an attempt to differentiate one's self from the hordes of hack programmers who haunt IT departments and give the rest of us a bad rep.

* I realize that's most likely not quite what you meant, but it is the way I took it.
 
I can't claim to be anything more than what you're dismissively* calling a vo-tech keyboard jockey.

Technicians operate MRIs and X-Ray machines that keep me alive. Tradespeople wire my house with lethal amounts of electrical current. Chefs with certificates handle the food I eat.

I'm not being dismissive. I think the very idea that calling programming vocational might be dismissive speaks to people’s attitudes towards vocations and professions.

Where programming is concerned, these are arbitrary distinctions drawn to exclude people, not objective measures of value.
 
In many ways, a degree has become a subconscious excuse for the naturally talented to become average.

It's like a disease. Lucky for me I recognized, albeit two years too late.

Couple realizations I've had since I quit school a semester ago:

1. being out of school is far from easy

2. it's partly freeing and at times scary

3. it forces me to be more conscious of what I am doing

Life beyond college doesn't come with academic advisers(for good mostly).
 
Technicians operate MRIs and X-Ray machines that keep me alive . . .

Yeah, I get that, but the implicit part of the statement is: they are not doctors, they are second-class citizens who just implement a script we degree-holding folks create for them.

Except with programming it doesn't work like that. The only thing that matters is creating applications that users can use, applications that make people happy (for lack of a less mushy word). And that really requires a separation from one's ego, so the "Stand aside people, I'm a doctor!" attitude can be just as much an impediment as an aid. An MRI tech would never be able to perform brain surgery. What's the equivalent in programming? Sure there are things like Google that need CS PhDs to implement, but they're not everyday stuff. The real brains are necessary at the framework and language and compiler level. But 99% of programming work being done is using that stuff, not creating it.

Unfortunately, writing glue code is much of what needs to be done. It's not glamorous. We want things to be complex, hard to solve. But a lot of the problems we "solve" just need to be typed out.
 
Tom:

Yeah, I get that, but the implicit part of the statement is: they are not doctors, they are second-class citizens who just implement a script we degree-holding folks create for them.

Only, 99% of the people getting degrees at BlubSchools are not writing scripts for technicians to implement.

The illusion is that a CompSci degree makes you a doctor and that someone else is the MRI technician. I think that there are some CompSci programs that put you on the road to being the programming equivalent of a doctor, and others that put you on the road to being Head of Medicine in a hospital.

But some schools just want to churn out MRI technicians. I don’t think there’s anything wrong with being an MRI technician. I just think there’s something wrong with pulling the wool over people’s eyes about what they do and whether a degree is meaningful.
 
I have been a business application programmer for 30 years.

I have developed systems (e.g. event-driven production planning) that are at least as complicated as operating systems.

I needed to understand most of the concepts in "computer science" as well as accounting, economics, scheduling, psychology and politics.

Problem-domain-as-insult is stupid. Any problem domain can be as deep as you make it.
 
Bob:

Problem-domain-as-insult is stupid. Any problem domain can be as deep as you make it.

This is obvious to me. And it is obvious to many of the people I know. But is it obvious to the business programming industry? Is it obvious to those schools that are dumbing down the Computer Science curriculum?
 
But *why* are CS programs being dumbed down? To bring in more dollars or because the focus on maths and the like attracts people who are good at math but not necessarily great at working on a team to complete projects? There's a lot more than "make it scale". If it doesn't work, if it can't be used, all the wondrous back-end code in the world is a waste.
 
Tom:

I think that the choice between good at maths and comfortable in a cubicle farm environment is a false dichotomy.

Further, I think that the dumbing down of some CS programs is driven by the students, not the industry: in any field, there is a normal distribution of capability. By moving down the curve, the number of students who can succeed in the program can be increased dramatically, which fills the coffers with boodle.

I do not expect this to change unless businesses stop hiring graduates of these programs. And the fact that graduates of these programs get jobs speaks to nature of the those jobs.

It's just the market finding the correct level.
 
Thank you Reg! You are the first, which I have read, to tell the truth of the matter. I had thought the world was crazy, now I know it is a giant conspiracy. Instead of being angry, and trying to fix the system, I know to leave the system; maybe even use it for my personal profit.

Yay for low standards! The US is doing great at lowering average skills and wages to be competitive with China!
 
Kyle:

If you think I am saying that you should use the system for your personal profit, you have grasped my point exactly.

That being said, I would think very carefully before leaving the system. All university programs are not created equal.
 
Even though I agree that meaningful certification is hard/impossible ("a degree is only as meaningful as its scarcity") and I'm aware of the shallow, greedy, abulic nature of business (and it sure isn't restricted to software), this somehow managed to be one of the more depressing posts I've read in a while for its candor.
 
We recently interviewed a candidate who, according to her resume, had a master's degree in computer science. It turned out that the particular master's program that she attended taught neither algorithms nor data structures.
 
We recently interviewed a candidate who, according to her resume, had a master's degree in computer science. It turned out that the particular master's program that she attended taught neither algorithms nor data structures.

Would her name have been Paula, by any chance?
 
Reg:

I think that the choice between good at maths and comfortable in a cubicle farm environment is a false dichotomy.

Absolutely and I apologize if that's what it sounds like I'm saying. What I'm actually saying is a mushy, semi-crap point about how "pure" CS courses don't necessarily create a perfect developer candidate.

To your second graf, I'm not clear what you're arguing. Is it that colleges are purposefully dumbing down programs because "kids today" aren't as bright as they used to be? Or is it a failure of business?

"I do not expect this to change unless businesses stop hiring graduates of these programs."

Who would they hire in the meantime? What criteria do we use while the CS world sorts things out?
 
Who would they hire in the meantime? What criteria do we use while the CS world sorts things out?

At the moment, nobody has a very good idea how to certify salespeople. How do companies hire salespeople without universities giving people degrees in sales?
 
I'm not sure how that makes things better or worse. Because some other trade doesn't have a good certification system, CS shouldn't either? I thought this was a post about the decline in the standards of certification.

Also, sales people may not have great certifications, but there's an easy way to measure their work and they tend to get hired on a commission basis, so bad hires aren't expensive mistakes.
 
Great post. Now if only I had a time machine, could travel seven years into the past, and smack myself with a rolled-up printout of this essay.

Oh wait; for that I'd need a printer too.
 
If you believe that degrees exist as a certification mechanism, then you might want to consider the following questions:

Should we bar people without degrees from working as programmers?

Should there be a uniform standard curriculum so that programmers all have the same base education?

Should individual universities do the certifying or should there be another organization that does the certification?

Should there be artificial caps o the number of people "certified" to practice?

I think that there is a huge difference between universities offering what I am calling vocational training and what you are calling certification. (Vocational isn't a pejorative term, of course, if you believe programmers ought to know Scheme, for example, then Scheme is part of vocational training).

Vocational training is a more or less unregulated business. There are no enforced standards and there is no limit on the supply of trained workers.

Certification works differently. There is a legally mandated uniform standard, and there can also be a restriction on the supply of graduates.

For example, my partner is a Nurse. She obtained vocational training in the form of a post-graduate Bachelor of Nursing degree (in most cases, you need a Bachelor degree to enter the program). She then studied for and passed her Registered Nurse certification to become an RN.

The Bachelor of Nursing degree is not certification. The RN is certification. You can also become an RPN, which is a certification at a lesser standard. or you can take the Bachelor of Nursing degree and not certify at all, for example if you continue on to your PhD in Nursing without practicing in the field.
 
> Look, there is nothing wrong with being a clerk as long as you not in denial about your job.

Except that it's dangerous with the way the "business programming" job market is headed these days. "Business programming" is exactly the type of job that is perfect for outsourcing to cheap overseas resources.

As you said yourself...

> Vocational training is a more or less unregulated business. There are no enforced standards and there is no limit on the supply of trained workers.

I wrote about this a couple months ago at my (still very young) blog:
http://turbulentintellect.blogspot.com/2007/09/where-will-your-programming-job-be-in-7.html
 
Woops, that should be a link:
My still very young blog.
 
I had a college professor who made the point that at top schools, the entire 4 years could consist of nothing more than students doing crossword puzzles.

i.e. getting graded on, doing them for homework, finals, etc.

MBA programs, top B-Schools, the Googles, the Microsofts, the Goldman Sachs -- they'd all still want the A++, top 99 percentile students.

Whatever it is they'd need to do for the job -- these top students could figure it out, fairly quickly, too.

Companies basically just need to know two things, when you boil it down:
* does this person have some innate talent?
* does this person (exceedingly) apply himself/herself, consistently?

Your A++ crossword puzzle students will generate your top code, best excel spreadsheets, whatever it is they need to do, than the rest of the class.

Note: this is not to say that you'd also have a fair number of outliers, from the group of students who just couldn't grok crossword puzzles (or merely didn't apply themselves).
 




<< Home
Reg Braithwaite


Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

Books
What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

Share
rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

Beauty
IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

Work
The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Management
Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

Notation
The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Opinion
Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

Whimsey
The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

History
06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /