Bjarne Stroustrup on Educating Software Developers: Page 4

(Page 4 of 4)

University CS programs have seen lower enrollments due to fears by students that most jobs will be outsourced. Do you think these fears are justified? Or, to put the question another way, some observers are skeptical about whether American developers will be able to compete long term with developers from other countries, students who have more rigorous educational standards at an earlier age. Do you share this worry?

Yes, the perception that outsourcing and offshoring is putting an end to software development in the US is harming enrollment. The sad thing is that much outsourcing happens because there are not enough good developers in the US – because the enrollment and graduation rates of good students are down.

I think that the impression that jobs have gone is at odds with reality. In 2008 there were more people working in the US IT industry than even before; more than before the dot com bust. I believe that is also the case for interesting, challenging, high paying software development jobs. The starting salaries of CS and EE majors compared to every other field are a strong indicator that this is so. However, many parents and many mainstream journalists haven’t noticed and think it is still 2002. At TAMU, the decline seems to have stopped and our enrollment is up a bit, but not far enough. I believe that’s not all that unusual.

There is another enrollment problem that’s endemic: Not enough women choose computer science. If – as in some technical fields – women were about 50% of the students, we’d probably have the opposite enrollment problem: we’d have to cut back by raising standards! I do not know why (though I suspect I have heard all the popular explanations), but CS seems particularly unattractive to women entering university – throughout the US and Europe and beyond.

That’s a bleeding shame for CS; the field seems to have become steadily worse at recruiting women since 1980 or so while other areas of study, including math, biology, medicine, and some branches of engineering have done better. I’d love to help reverse that trend. For starters we should have a more serious discussion of the problem.

For a shorter term solution to the lack of software developers, I think that companies could look closer to home. Too often they search for people based on a narrow model based on currently fashionable buzzwords. In doing so, they miss many experienced, well-educated developers. Given a bit of retraining – or a bit more flexibility in the business – and a bit of money, such people are available. In particular, many could be tempted back into programming – their real love – from management, sales, and other “related fields.” This could be far cheaper than trying to hire or train lots of “cheap” programmers.

Has the process of teaching C++ changed your feeling about the language? Now that you know how students grapple with it, do you feel changes are needed?

Certainly. I thought that C++ had become too “expert friendly” and offered too few supports (language features and libraries) to help novices (of all backgrounds). Now I know that’s the case.

Some help is on its way in C++0x and I hope we will see some libraries that are supportive to novices (of a wide variety of backgrounds). Part of the problem is that the sheer number of available libraries is overwhelming for a novice. Finding a library, selecting it among a set of alternatives, downloading it, and installing it are not skills that are common among novices. Worse: those libraries don’t all work well together or with the standard library components. Somehow, the C++ community has to do better in making libraries more accessible to novices.

Let’s consider C++0x. The simpler features are already becoming available even though we are still at least a year from the standard becoming formalized. Consider a simple example:

windows

The { } initializers can be used for any types in any context and auto indicates that the type of the variable is to be that of the initializer, here
vector>::iterator.

The loop could be further simplified by using the new range for statement:

windows

None of this is earth shattering. It isn’t meant to be, it is meant to make C++ easier to use for both novices and experts.

From your experience as a programmer, what is it that makes a great developer? Can you point out a few qualities, both technical and personal?

Curiosity, initiative, tenacity, ability to reason logically, ability to communicate and to work with others. That’s not at all special for programmers, I’m afraid. Also, I strongly prefer to be around people with a sense of humor.

Your advice for young programmers -- or for not-so-young programmers?

Programming is part of software development. It doesn’t matter how fancy your code is unless it solves the right problem and you can explain it to others. So, brush up on your communication skills. Learn to listen, to ask good questions, to write clearly, and to present clearly. 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.

Learn your first language well. That means trying it for difficult tasks. Don’t obsess about technical details. Focus on techniques and principles.

Learn another programming language; choose any language that’s quite different from what you are best acquainted with. You can’t be a professional in the IT world knowing only one language. No one language is the best for everyone and for everything.

Don’t just do programming. Computing is always computing something. Become acquainted with something that requires your software development skills: Mediaeval history, car engine design, rocket science, medical blood analysis, image processing, computational geometry, biological modeling, whatever seems interesting. Yes, all of these examples are real, from my personal experience.

Go to Bjarne Stroustrup's FAQ page


Page 4 of 4

Previous Page
1 2 3 4
 



Tags: programming, software developer, programming language


0 Comments (click to add your comment)
Comment and Contribute

 


(Maximum characters: 1200). You have characters left.