Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Bjarne Stroustrup on Educating Software Developers (earthweb.com)
22 points by pchristensen on Dec 10, 2008 | hide | past | favorite | 18 comments


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

Wow. I was a little anti-Bjarne because I'm no big fan of C++, but this is gold.


> as cheaply

In other words, talent costs money. Companies expect the good developers to come out of the woodwork for a 35-40k junior dev position and wonder why they come up with dregs.

But I agree. In the one year I spent at a university I ran into many CS majors. Most were in it for the money.

Now these students were only taught in Java as far as I could tell, yet they seemed to have no interest in the language. I'd ask questions about Java web technologies that I'd only heard of (being more of PHP guy) like Struts and what not, drawing blank stares. I'd ask all sorts of things that I'd heard about the language, hoping they'd relate some experiences in regards to what I'd heard, that the code was rigid, verbose, etc. I was especially interested in what they knew about OOP which at the time I was teaching myself. More blank stares.

Didn't take much more digging to discover that they were pursuing the degree for the money and nothing more. I thought that it was very sad that I, a History major at the time, had more passion for computer science than most CompSci majors I met.


Companies expect the good developers to come out of the woodwork for a 35-40k junior dev position and wonder why they come up with dregs

It's not that they expect good devs at that price, it's that they can't tell who the good devs are. For grads, all they have to go off of are grades and maybe an intership. Otherwise, it's just a resume. Without an effective way to recognize good devs and with no portfolios, it's just a crapshoot. It's the same information asymmetry that makes it hard to buy a good used car. As pg (?) said, the only way to recognize a good dev is to work with them for a while, and most companies and job seekers are unwilling to do that.


Seriously, last one. This article is the best thing I've read in probably a month or more.

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


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

This is the "magic key". Knowing a domain and being a good programmer makes you infinitely more valuable than just the latter.


Try browsing through both "The C++ Programming Language" and "The Design and Evolution of C++." You stated you're not a big fan of C++, but you might get something out of what Stroustrup has to say - I do.


Even those of us who don't much like C++ recognize that Stroustrup did about as well with the language design as anyone could, given the constraints within which he had to work. The flaws that could have been prevented only became obvious in retrospect after programmers started using the language to build large systems.


"I think aesthetics can be taught to many. Mostly it is a case of repeatedly showing students good examples and explaining why those examples are good. This takes time, years. I would like for programmers to present portfolios of their work, much in the way artist (including architects) have to."


and "What should high schools do to prepare students for university-level software development? When I entered a Math course as a 1st year student, the department head said something like this in his welcoming lecture: "I don’t care if you know math - we’ll teach you that from scratch - but I hope you know how to work hard and to read & write English, because you’ll need that to keep up." I think he had an important point: current freshmen appear to have been spoon fed and many find it hard to adjust to independent work and to shake the impression that you work only to improve your grades.


A major part of the problem is that many schools are still trying to cram everything into a BS Computer Science degree. Both the students and industry would be better off if schools offered alternatives such as a BS Software Engineering and/or BA Software Development, which would focus more on construction and somewhat less on theory. Some schools are doing that, but not enough.


By the way, Richard Gabriel (one of the early Lisp experts) had some good ideas for an alternative academic program. http://www.dreamsongs.com/MFASoftware.html


So, is it just me, or he complains that students are pointed in the wrong direction and therefore don't write "real/maintainable" programs, instead focusing on more CS (algorithms, data structure) - but when talking about java, he says the education needs to focus more on algorithms, data structure.. ?

When talking about magic constants on students' code: "I have seen the result of that attitude in new graduate students: It is rare that anyone thinks about the structure of their code or the implications for scaling and maintenance – those are not academic subjects. Students are taught good practical and essential topics, such as algorithms, data structures, machine architecture, programming languages, and “systems,” but only rarely do they “connect the dots” to see how it all fits together in a maintainable program. "

When talking about the use of java in universities: "Education should prepare people to face new challenges; that’s what makes education different from training. In computing, that means knowing your basic algorithms, data structures, system issues, etc., and the languages needed to apply that knowledge."

To me this is like a "everything is a priority" problem. Students should learn all of the CS stuff, and also all of the "realworld" stuff.


His emphasis is on problem solving. That's his complaint about having students use Java libraries to build stuff - they don't learn how to solve problems. You need algorithms, data structures and theory since it's the language of solving problems, but you also need practice, feedback, and mentoring to get good at programming. He objects to those academics who think programming isn't an essential activity.


Count me among those who who thinks the CS vs. Software engineering debate is silly.

I never understood how you could teach CS theory w/o a lot of programming and I have no idea how you'd teach programming w/o the theory. If you can't figure out the big-O complexity of an algorithm you're useless and if you can't implement it you're useless.

I also think that engineering degrees should not be crammed into 4 years. Just to get the basics requires way more credits than a normal BA. Perhaps a BS should be viewed as something between a BA and an MS and 5 years should be standard.


Because most people working in software development aren't doing anything remotely algorithmic. The vast majority of corporate/commercial software does two things: it gets input from somewhere, either a user or another program, and writes it to a database. It gets records from the database and formats a report for a user or sends it to another program. And that's it. That's all most websites do too. If it's XML then the programmer doesn't even need to know parsing. You can - and many people do - work in software and be good at your job, without any theoretical underpinnings at all.

That's not to say that that's a good thing, mind, it's neither good nor bad, but it's a fact that maybe 1 in 10 people employed in the software industry will need to know big-O, perhaps even less than that.


That's not to say that that's a good thing, mind, it's neither good nor bad, but it's a fact that maybe 1 in 10 people employed in the software industry will need to know big-O, perhaps even less than that.

I don't think the ratio is that high, simply because most people who do software development aren't in the software development industry. They are members of an IT team in an organization who profits come from the sales of things other than software. Although the organization they are at might benefit from software that solves real technical problems relating to their product line, most of the time, they are just writing ETL programs that require little more than getting table names right. Of the people who work at companies that see software development as one of their core disciplines, I imagine the problems are sufficiently hard to make some knowledge of theory useful.


Had I been given such books as a 1st year student, I would have changed fields. Those books were trying to spoon feed the students. Good students need to be challenged! 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.

Let me testify from personal experience that Bjarne is on to something here.


Bjarne has obviously never heard of the "School of Hard Knocks".




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: