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.
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.
... the man is dreaming IMHO. If you look at modern computer languages, hardware design, and operating systems, NO ONE is doing good engineering. It took forever (a decade or more at least) to handle crashes in a microsoft OS which had thousands of talented people working on it. 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.
The modern commercial environment for developers is not conducive to fostering great teams, since the all mighty buck reigns and stupid decisions are made.
From an engineering standpoint: There is no reason for software to break, and yet it does, a lot of the time. To use a familiar example: We see this all the time with video games on the PC, hardware requirements, etc, etc.
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.
Yet while Stroustrop agrees that Java has been used to dumb down CS programs, ultimately, âoethe problem is one of attitude, more than an issue of programming language.â
He is not dumb enough to claim C++ superior to Java. After all it is an C++ is so aweful "designed" that if you are not completely sunk in C++-think, you spend more time fighting the language and its warts than actually do useful stuff (like thinking about algorithms and what the machine does like Don Knuth taught us). While Java is very high level it at least got rid of some of the ugliest and worst mistakes that C++ made. Everyone is way better off with C (for systems stuff), Java (for "enterprisy" stuff), Python (for frontends) and sh (for quick and dirty hacks) than with any C++(*).
/End Rant
http://yosefk.com/c++fqa/
(*) And dont tell me its because of the age of C++. Objective-C and Lisp are way older and way better designed than C++ for example.
The article starts off by claiming Stroustrup created C++. Fair enough, but then, in the same paragraph, the author claims that C++ is used in "google search" and the iphone. Doesn't the iphone platform stress objective-C ( like all current Apple platforms )? Objective-C != C++. It could be a minor thing since I dont do either, I am just saying something, maybe. Maybe like he does not know his subject matter, or assumes his readers do not.
The rest of the article was mostly about the Stroustrup history, not what he said in the presentation. Its almost like the author cherry picked a few damning things his subject said in a presentation totaling ~42 words and then gave it a provocative title, and a bunch of interpretation.
Like I give a shit what the author thinks.
NOTE: I would apologize for the way my brain works but I am held captive by it. Its not my fault. I think.
I think you underestimate just how much I just dont care.
Bad programmers are why companies don't take a chance on good programmers. Many good programmers can't get a job because the HR department thinks you actually need experience in a specific set of software in order to be good at the job. Good programmers know they can pick up most any language and get cracking within a week or so. For me its:"Yeah I've coded since I've been able to type so over 10 years of basic followed by over 10 years of C/C++. A Carnegie Mellon degree in Scientific Computing. No experience, but I have coded several large projects at home." I applied to thousands of jobs on job boards, and I never cracked into the industry.
God spoke to me.
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.
You should be expected to study how to write OS's and rendering programs. You should be able to put graduates in a room with a spec sheet and a computer, expect them to tell you what information is missing or volatile on the spec sheet, tell you how long it will take them, and what language they would be most comfortable using to write the program, and they should be able to write it on the provided computer without downloading any additional programs.
I disagree with all of this. Estimating completion time comes from industry experience, not training. What does "volatile information on a spec sheet" even mean? Are you talking about figuring out what requirements in a requirements doc are likely to be changed mid-project? That's a valuable skil, for sure, but agian that comes from years of industry experience.
And as for writing a (non-trivial) program without downloading additional software: half the programmers I know would walk out if asked to use anything but VI to code, and the other half would walk out if forced to use VI. Programmers develop attachments to tools, and I'm not sure what you'r trying to accomplish by asking people to not use the tools they're comfortable with.
Just in general, the ability to keep going if the "hit a wall" is almost the *definition* of a senior programmer. The more unusual the issue you can work around without help, the more senior you are (Well, for the first few years, anyhow).
There are many legitimate complaints about CompSci programs today, but it seems like *you* just hate mentoring junior programmers. These aren't problems that a school will fix, these are problems that real-world experience fixes. There's a reason why your second real devlepment job (normally) pays a lot more than your first!
Socialism: a lie told by totalitarians and believed by fools.
C++ is C with optional safety-less AK-47s. The top 1% enjoy it, the next 9% live with it, and the other 90% die bemused in a hail of friendly fire.
Bjarne is now dissing the students. While this is a time-honoured prof activity, he might watch to consider that the students you get is more a reflection on yourself than the pool as a whole. You build shit, and they will come.