Bjarne Stroustrup On Educating Software Developers
jammag writes "Bjarne Stroustrup, creator of C++ and a professor at Texas A&M, weighs in on the problems in today's CS programs. In particular, Java (there's too much of it), the quality of graduates (companies aren't happy), and the need to balance the theoretical and the practical (long overdue). Not pulling punches, Stroustrup even talks about high schools — 'High schools could teach students to work hard at something (just about anything), to search out information as needed, and learn to express their ideas in writing and orally.' He finishes by giving advice to working developers: 'Serious programming is a team sport, brush up on your social skills. The sloppy fat geek computer genius semi-buried in a pile of pizza boxes and cola cans is a mythical creature, best buried deep, never to be seen again.'" Read on for more choice quotes from the quotable professor.
I have even had questions from strangers in airplanes: "You're a professor? In software? Have you got any students? Here's my card."
The US industry could absorb more good developers than there are currently students enrolled in IT-related programs — but not all of those programs and all of those students would qualify as "good" in this context.
The companies are complaining because they are hurting. They can't produce quality products as cheaply, as reliably, and as quickly as they would like. They correctly see a shortage of good developers as a part of the problem. What they generally don't see is that inserting a good developer into a culture designed to constrain semi-skilled programmers from doing harm is pointless because the rules/culture will constrain the new developer from doing anything significantly new and better.
The contemporary Math, Physics, and Biology books I have seen are far, far more conceptually challenging than what we present to CS and engineering students in the area of programming.
I think the ultimate aim is to make programming more of an engineering discipline, more mathematical or scientific; "craft" and "art" are both needed, but there ought to be a scientifically based core on which people can base their craft and art. Software design and implementation is more than a craft; there is more math, science, and engineering to know and apply than is customary for fields we call "crafts." Incidentally, I find it appalling that you can become a programmer with less training than it takes to become a plumber.
I have even had questions from strangers in airplanes: "You're a professor? In software? Have you got any students? Here's my card."
The US industry could absorb more good developers than there are currently students enrolled in IT-related programs — but not all of those programs and all of those students would qualify as "good" in this context.
The companies are complaining because they are hurting. They can't produce quality products as cheaply, as reliably, and as quickly as they would like. They correctly see a shortage of good developers as a part of the problem. What they generally don't see is that inserting a good developer into a culture designed to constrain semi-skilled programmers from doing harm is pointless because the rules/culture will constrain the new developer from doing anything significantly new and better.
The contemporary Math, Physics, and Biology books I have seen are far, far more conceptually challenging than what we present to CS and engineering students in the area of programming.
I think the ultimate aim is to make programming more of an engineering discipline, more mathematical or scientific; "craft" and "art" are both needed, but there ought to be a scientifically based core on which people can base their craft and art. Software design and implementation is more than a craft; there is more math, science, and engineering to know and apply than is customary for fields we call "crafts." Incidentally, I find it appalling that you can become a programmer with less training than it takes to become a plumber.
I am _not_ fat.
..is here.
The Army reading list
The sloppy fat geek computer genius semi-buried in a pile of pizza boxes and cola cans is a mythical creature, best buried deep, never to be seen again
Be careful. They're easily frightened, but they'll soon be back, and in greater numbers.
This is all well and good, and there's no doubt that an engineering/logical approach is very important in programming, but there is something of an art about development as well. I can slog all day coding away, working from diagrams, notes and even flowcharts (though not formalized ones, I'll admit, like days gone by), but sometimes my best and most productive work are those creative flashes I get, when any kind of formal process is tossed out the door. Sure, I have to go back later and comment the code so that even I can understand it, but there will always be that creative aspect to programming, and that ain't necessarily bad.
The world's burning. Moped Jesus spotted on I50. Details at 11.
While probably safe for work, I don't actually want anyone to see this, but I found one!
If you are about to mod me down, keep in mind that this post was most likely sarcastic.
Bjarne Stroustrup, creator of C++ [...] weighs in on [...] Java (there's too much of it)
Oh, gee, now THAT is a surprise!
I know about extreme programming, and I've really enjoyed some team programming sessions, but when it comes down to it, I think one reason some people hold a much deeper level of knowledge than their peers is that they spend extreme amounts of time alone.
Some people:
--get really good at coding
--get really good at math
--get really good at video games
--read large numbers of books
and finally some people watch a lot of television
The people who read a lot of books sometimes gain a better understanding of other people, the people who watch a lot of TV have an increased repertoire of small talk, and in today's world, video games are increasingly a team sport. All of those things facilitate increased human contact.
People who are fascinated with math and coding tend to have fewer peers who can understand what they are doing. Is this a bad thing? I don't think so. Maybe I grew up as more of an introvert in some regards, but in other ways I'm socially adjusted. I guess the challenge is to guide young people to seek out their peers (those who are fascinated with the same things), and to make friends without making everything into a competition. It's hard for young nerdlings to recognize a peer intellect without wanting to prove themselves better. There is a place for ambition, but that instinct can be a hinderance.
My two cents,
-t.
As a pizza delivery driver, I have to take exception to this. I see all kinds of folks but one guy in particular stands out. He always orders at least a large pizza and two lasagnas, usually with 2 or 3 2L bottles of pop and a couple (or three!) slices of cheesecake.
He weighs a good 400lbs, has 3 monitors and a laptop on the go at all times (one monitor for CSI or whatever show, one for a terminal, one for IM), with WoW on the go on the laptop. His desk has a path cleared to it amongst piles and piles of garbage - empty pizza boxes, empty takeout containers, half-eaten food..
Such a sight to behold.
So no, they're not extinct.
Indeed. Besides, the whole "building vs. programming" analogy is silly. If designing buildings was like programming, architects would have to deal with all new materials every few months (can't use the old ones), they'd have customers insisting that walls are best placed leaning 10 degrees out of true, and the foundation under the building would (magically) be changed every few years, with the building having to remain upright on whatever it was standing on. And if the construction crews put a doorknop on wrong, the whole building might come crashing down when someone opened the wrong window.
If construction was anything like programming, an incorrectly fitted lock would bring down the entire building...
I've never known this to be the case. When I managed developers, I paid market rates which I am sure you would say are low. I never had a single offer turned down for salary considerations. I had a range of programmers from good to excellent. Expectation of higher salaries was not correlated with skills or performance at all.
You are right: programming _is_ hard. But salary is only useful as a motivator up to a point. Beyond that, what good programmers want is respect, appreciation, and freedom to do great things. They want to work on stuff that they feel good about. They also want to work with other smart people who they can learn from and build great stuff with. Those are decent starting points anyway.
So your general idea is right: that complaining companies are full of it, but I don't think it's because of money. It's because they have lousy uninspiring development environments.
Cheers.
/pedant
Quotes is a verb. I'm sure you meant to say "Read on for more choice quotations from the quotable professor."
/unpedant
Quote is also a noun. I'm sure you meant to say, "Read on for more choice quotes from the professor."
/gollum
Quoteses is also a plural noun. We're sure hobbitses meant to say, "Rrread... ON! for more choice quoteses... fromtheprofessor. My precious."
Most of these topics can easily be researched and learned without a university.
Yes, they can be researched - but, let's face it: most people either think it's beyond them, think they'll never need to know it, or are just too lazy. The ones who would research it themselves are likely to be the ones who are good anyway.
My production would definitely be down if I had a cheerleader.
They have a pill for that now.
Rosie O'Donnell will be cheering for you if you don't get back to work.
Signed,
Your Boss
The companies that complain about the lack of "good" developers are the ones paying their developers crap and looking to offshore/cut costs. If you want good developers you're going to have to pay them.
I work at a company that pays at least 10% more than the going rate at other companies in the state and interviews 2-3 / week. It takes 3 weeks on average to find a developer they're willing to make an offer to. Two of the companies that are complaining are Google and Microsoft, both of whom give good salaries and great benefits when compared with the average job.
I've worked at several companies that paid decent amounts of money, and between 50% and 75% of the developers are crap. In my experience, good developers are hard to find at any price.
Lack of funding? Young man, I learned Pascal on a TRS-80 Model II. The cellphone that is likely in your pocket is probably more powerful in just about every aspect. The book we learned from was probably close to a decade old at the time and was sad in the shadow of what you can get at Borders for 25 bucks. I learned programming just fine.
You don't need the latest and greatest to learn how to code. Infact, the more I see of computers and teenagers the more I think I had it better being limited to machines that didn't have a 1/10th of a meg of RAM and no Internet. Today there are just far too many distractions on a PC to get kids away from the task at hand. To be honest, if I were teaching coding I would go with the 2004 text about whatever language that normally can be found in the bargin bin for 5 bucks, a bunch of P-II 350s, a 10 dollar flash drive for each student and whatever freeware IDE I could find for the chosen language. No other software on the PC and no network connections either, thankyouverymuch.
This would keep the students mind on the task in front of him. When I first got my Vic 20 with no media storage and no game cartridges I had to sit down and learn how to make the machine do what I want it to. I found that it was a very gratifying thing to do. If I would have had MySpace and EverQuest I doubt I would have ever have gotten as far.
BTW: Get off my lawn!
Dedicated Cthulhu Cultist since 4523 BC.
I know it can still be used that way, but it seems to be more and more difficult to only code that way using C++, because you're going to have to use libraries at some point or another.
Yeah, those damned templated libraries with their: performance, type safety, design patterns, generic programming principles. I can't imagine why Java wasn't happy with containers of Objects and added Generics. C# definitely shouldn't have followed suit. All you need is void*, size_t, and int (*)(void *, void *), right?
I agree with you. However, there are also several issues that I think need to be addressed.
1. Training. My bother left engineering and went into law. He found it 1000x more professional. For one thing, as he joined, he was assigned a mentor and received proper training. Contrast this to many software companies where managers/other developers actually think 'throw them in the fire' is the best way to train. He's in patent law by the way... making about 3x more than the people doing the inventing :P It's genius actually. In this sense, the suggestion of apprenticeship is a great one.
2. Quality of People. I don't think the top kids in a high school graduating class are going into computer science/engineering anymore. They have learned it is not a good field to be in. At the end, you're most likely going to end up a regular job that pays above average. With the kind of talent it takes to be a good software developer, you're much better doing something else (Doctor, nurse, CA, lawyer...) So naturally the grads are not going to be 'as good.'
3. No professional organization. This is a huge one. To the outside world, no one knows what a good software developer does. Just as most of us know nothing of what makes a good lawyer. We treat lawyers like a black box. Here's what I need done... now go. This is how businesses treat software. It is professional organizations that mantain the quality of people. They take care of ensuring people are trained properly and things work as follows. You don't need to know anything about accounting. However, if you're a business and need some complex accounting done, you get a CA not just some guy with a few accounting degrees. It is also why most professional organizations employ themselves. CAs join firms like PWC, KPMG... Lawyers do their own thing. Software developers work for a business. Which yes... makes you just another worker bee.
But anywhose. I don't the situation improving much in North America at least. Worst of all, all the new investment in new grads is being done in India/China. So it's not like young people in Western Companies are getting the grooming they need. It's a viscious cycle that is only going to make it worse.
It's amusing seeing Strostrup whining that schools are teaching Java instead of his C++. The problem with C++ is Strostrup. He's in denial about many of the fundamental problems of C++. He's publicly stated that there's nothing major wrong with C++. If that was the case, we wouldn't need Java and C#, which are, after all, attempts to improve on C++.
Down at the bottom, the fundamental problem with C and C++ is the "pointer=array" concept. That was OK for 1978, but it didn't scale well. It's the cause of most of the buffer overflows in the world. C and C++ don't even have syntax for properly talking about the size of an array parameter. That's just broken. C and C++ need something like conformant array syntax for parameters and in other contexts where one needs to talk about the size of an array.
The second fundamental problem with C and C++ is that the programmer must obsess on "who owns what", and the language not only doesn't provide help with this, it doesn't even have syntax for talking about it. There's no distinction between a pointer that "owns" an object and one that just "uses" it. Yet if the programmer doesn't carefully make that distinction, the program will have either memory leaks or dangling pointers.
The trend in C++, since templates went in, is to try to wallpaper over the problems with the underlying model. It never quite works; the mold always seeps through the wallpaper. Container classes almost, but not quite, succeed at encapsulation. There's almost always some place where a raw pointer has to be allowed to leak out. The standards committee has gone off on a "generic programming" tangent, with emphasis on weird template features used by few and used correctly by fewer. Just because you can abuse the C++ template system as a term-rewriting engine doesn't mean you should do that in production code. This results in a whole new class of incredibly obscure compile-time bugs. The standards committee has been thrashing for over a decade in this area; in the 1990s, the new version was to be "C++9x"; now it's "C++0x", and since we're close to 2009 already, "C++1x" looks like the reality.
C++ is the only major language to have hiding ("abstraction") without memory safety. No previous language had it, and no later language repeats that mistake.
Back around 2001, I made an effort to do something about it, but the political hassle was more than I had time for.