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.

14 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 Jeff+DeMaagd · · Score: 3, Interesting

      I can't help but think maybe your impression of engineering is a little off.

      The practice of computer science / development and various fields of engineering are very similar in many ways.

      There is or can be an art or even zen to engineering work too. There is plenty of room for creativity that the stereotype or public impression doesn't even hint at.

    3. Re:Back To Reality by Eskarel · · Score: 3, Interesting

      Where I went to university, at least in some of the earlier classes, proper commenting was half the grade. You could almost pass if your program compiled and was commented using the right formatting even if it didn't actually do any of the things it was supposed to.

      Conversely if your program was perfect and brilliant but contained no comments you could fail.

      That's not quite the same as proper coding style, but it was covered.

      We also did interesting projects like hacking ns to implement a tcp congestion control algorithm from a white paper, and building an, admitedly fully simulated, interrupt system in my OS class.

      One of my friends at a different university had to actually modify the linux kernel as part of his OS course. Not all CS programs are crap, just some of them, same as everything else.

      We did team projects too, and had to plan and work together, build different parts of the system based on a shared interface and put it together.

      I'm mostly a web guy now, and like most people I sometimes get a little sloppy when deadlines are tight, but that doesn't mean I didn't learn it, in Java, C, C++, and MIPS/RISC assembler.

    4. 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. too much Java ... by Sweetshark · · Score: 3, Interesting
    Summary is wrong. There is nothing from BS about "too much Java" in TFA.

    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++(*).
    http://yosefk.com/c++fqa/
    /End Rant
    (*) 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.

  5. My way of interpreting is null by dilvish_the_damned · · Score: 3, Interesting

    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.
    1. Re:My way of interpreting is null by Anonymous Coward · · Score: 3, Interesting

      Stroustrup likes to claim Google as proof that C++ is the greatest, but the truth is considerably more complicated. Here at Google, C++ is used for back-end code where performance (esp. control over memory footprint) is really important. Python is used for scripting. Java is used for almost everything in between. The proportion of Java is growing, mostly at the expense of C++, because (a) engineers are a lot more productive in Java and (b) the fault rate of Java code is considerably lower.

  6. I also hate bad programmers by CrazyJim1 · · Score: 3, Interesting

    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.

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

  8. Re:He sure thinks a lot of himself by lgw · · Score: 3, Interesting

    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.
  9. Re:Mythical Creature... by Gorobei · · Score: 3, Interesting

    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.