Slashdot Mirror


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.

6 of 538 comments (clear)

  1. Back To Reality by MightyMartian · · Score: 5, Interesting

    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.
    1. Re:Back To Reality by moderatorrater · · Score: 5, Interesting

      I don't think he's arguing against that at all. What he seems to be saying is that programming isn't taught, computer science is, and it's not rooted enough in the practicalities of programming. Style isn't enforced or even talked about all that much. He cites examples of student projects where they sprinkle magic constants throughout because they were never taught otherwise. In my CS courses the labs came every week, dealt with very small, specific problems and then were never looked at again. If Stroustrup had his way, it sounds like there would be style guides for the students (that were actually enforced), bigger projects and maybe some troubleshooting (ie give them 10,000 lines of code and make them find the problem). In other words, there would be things that everyone does on a daily basis as a programmer but were never really taught in school.

    2. Re:Back To Reality by lgw · · Score: 4, Interesting

      I'd say, more specifically, that there's a real and serious problem today with CompSci grads who (a) don't know what pointers are, and (b) have never seen a Windows development environment.

      So many schools these days do *evrything* in Java, except for some "survey of languages" class. Pointers and recursion are the two fundamental aspects of CompSci that are hard to get your head around the first time. Almost everything else I can teach a bright young intern, but if he doesn't "get" pointers it's not worth trying to teach. Internships are short, and it usually takes *weeks* to become comfortable with pointers.

      Is a 1-semester course in C++ programming too much to ask? Familiarity with the string, vector, and map classes is another hurdle that a student should really jump while in school. Sure, a lot of concepts are language-independent, but there is more than Java in use out here, and if you haven't done C, C++, and Lisp/Scheme, you might be missing some of those basic concepts.

      And it's really a pain to mentor an inter who clearly has never spent much time on a Windows box, and has neve used Visual Studio. Java programming on a Unix system is nice and all, but there are a great many Windows shops out here in the Real World. Even a 1-semester "survey"-style course that forced students to use Windows and Visual Studio would get them over that hurdle.

      I'm not going to refuse to hire a junior programmer just because he hasn't had Windows experience, but when a new hire can't debug, or even build a program using Visual Studio, or in some cases doesn't even know how to copy/paste a file, they've been dreadfully underprepared for the real world.

      --
      Socialism: a lie told by totalitarians and believed by fools.
  2. Dreaming... by Anonymous Coward · · Score: 4, Interesting

    ... 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.

  3. Is coding really a team sport? by tristanreid · · Score: 5, Interesting

    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.

  4. Re:The companies not happy with grads is pure BS. by scamper_22 · · Score: 5, Interesting

    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.