Bjarne Stroustrup On Educating Software Developers 538
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.
Mythical Creature... (Score:5, Funny)
Re:Mythical Creature... (Score:5, Funny)
[Citation needed]
Re:Mythical Creature... (Score:5, Funny)
I don't give a s**t about this newbie with his bloated language.
Dennis Ritchie.
Re:Mythical Creature... (Score:5, Insightful)
Never a good fit for the real world? What about all those games written in C++? Do you really think Valve's Source engine would be as good if it were written in Java?
On the other hand, I agree with you that average to less-than-average programmers will never grasp the more advanced pieces of C++. I think the solution is to teach them better, the solution is not to dump C++ in favor of $other_language. (C++ isn't right for all situations, but I think all CS programs should at least teach it.)
Re:Mythical Creature... (Score:4, 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.
Re: (Score:3, Funny)
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.
Well that puts me in the top 10%, so I guess it's OK then.
Oh who am I kidding. I've done enough C++ that I've become so fed up it's the best systems-programming language we have that I've gone and designed my own. JIHAD! JIHAD AGAINST C++ AND ALL ITS WORKS!
Re: (Score:3, Funny)
To extend this analogy further - C is like safety-less SKS [wikipedia.org] - it will let you shoot off your toes one at a time. C++ is, as you've correctly noted, like safety-less AK - it will let you shoot off both your feet with a single press of the trigger.
Java... well, I guess it's like a wooden AK. Need to club anything long and hard before it dies, and you can still do it your own feet if you really try.
Re: (Score:3, Insightful)
Re: (Score:3, Informative)
Actually it's never needed, unless you meant multiple inheritance from interfaces.
Interface inheritance is your friend.
Re: (Score:3, Insightful)
If interfaces actually did something, I'd agree with you. But they don't. Implementable interfaces which could be used by any class that needed them would be beautiful. Java interfaces are essentially documentation, not code.
Re:Mythical Creature... (Score:4, Insightful)
Rubbish!
You are clearly speaking as somebody who has not yet grasped what interfaces give you. An interface is an indicator that a class provides a particular service, many classes can provide the same service in different ways, all would implement the interface.
So you have an interface called 'Dateable' which defines a method 'setDate(Date date)'. Your Appointment class and your MissleLaunch class both implement this interface. Then your cool little date chooser widget just takes a 'Dateable' as a parameter somewhere (either constructor or setter). It 'interfaces' with the dependent class via the type safe interface type without needing to know whether it is scheduling a trip to the dentist or the end of civilisation as we know it! *That* is what interfaces give you, far more than just 'documentation'.
People get lead down the wrong path because someone will say... "Java doesn't have multiple inheritance, but instead it has interfaces", but this is like saying... "I don't have a hammer, but instead I have an apple". Two concepts, two jobs. Java doesn't have multiple inheritance because some of the end-case rules are a bit strange, and god knows, even single inheritance is badly abused by poor programmers. Sun seem to have taken the line of not giving people the rope with which to hang themselves (even if a small percentage would use the rope responsibly), operator overloading is not in Java for the same reason.
We can argue whether this was a good approach (there are are strong arguments from both camps!), but interfaces are *certainly not* 'essentially documentation'.
Re: (Score:3, Interesting)
You obviously have only learned half the story on inheritance. MI is a good thing, its just that most modern languages don't implement it because its hard for the compiler writers.
If interface inheritance was such a obvious and perfect option, why is it that Java (and other Java-a-like languages) provide implementation inheritance?
MI (and operator overloading) is good, as a java programmer, if you had it you'd be singing its praises.
Re: (Score:3, Insightful)
Wake me up when there's a mainstream language that has syntactic sugar for interface delegation to a class member to provide for the lack of implementation inheritance (so that I can do what C++ MI lets me do with interfaces in comparable number of lines of code).
In case I didn't make myself sufficiently clear, here [codegear.com] is a description of the feature for a language that actually implements it
Re: (Score:3, Funny)
I am _not_ fat.
Neither am I but I am mythical.
A direct link... (Score:5, Informative)
..is here [earthweb.com].
Careful (Score:5, Funny)
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
Be careful. They're easily frightened, but they'll soon be back, and in greater numbers.
Re:Careful (Score:5, Funny)
*Bjarne waves hand* These are not the programmers you're looking for.
Back To Reality (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.
Re:Back To Reality (Score:5, Insightful)
Re:Back To Reality (Score:5, Interesting)
Re:Back To Reality (Score:4, 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.
Re:Back To Reality (Score:5, 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.
Re:Back To Reality (Score:5, Insightful)
University isn't vocational training, and it certainly isn't vocational training for the specific tool set that you happen to use. If you mean that it would be reasonable to offer a Windows programming elective, great. But mandating a class in operating Visual Studio makes about as much sense as mandating a course in Ruby on Rails or the iPhone SDK.
Re:Back To Reality (Score:5, Insightful)
Re:Back To Reality (Score:4, Insightful)
What is it exactly that you think an engineering approach actually is? Some sort of formulaic fill in the blank? Engineering is coming up with ways to apply tools (physics, chemistry, math) to solve problems. Engineering curriculums teach engineers to think in such a way that they can do so. Any good engineering is an art form.
Re: (Score:3, Insightful)
There's always going to be a tension between process and creativity.
Re:Back To Reality (Score:4, 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.
Dreaming... (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.
Re: (Score:3, Insightful)
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.
Maybe it is because they had other priorities. Consumer software sales depend far more on features than reliability.
Re:Dreaming... (Score:5, Insightful)
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.
I work at a company that pays at least 10% more than the going rate at other companies in the state and interviews 2-3 / week. It takes 3 weeks on average to find a developer they're willing to make an offer to. Two of the companies that are complaining are Google and Microsoft, both of whom give good salaries and great benefits when compared with the average job.
I've worked at several companies that paid decent amounts of money, and between 50% and 75% of the developers are crap. In my experience, good developers are hard to find at any price.
Re:Dreaming... (Score:4, Insightful)
The general and fundamental problem that both Microsoft and Google are having(along with everyone else) is that no one wants to be the person who has to train the newbies.
No one, not even CS folks who have generally been spending at least some of their free time practicing what they're learning, comes out of uni knowing much of anything about anything. You have to train your graduates, and you have to accept that that's going to cost you some money you probably won't immediately recoup. They might even bugger off somewhere else when they've finally been trained up, and you'll have spent all that money for nothing.
Someone still has to do it, and no one wants to. Look around at job ads in any field that doesn't have a massive shortage of staff, see how many positions you'll see for "graduate ______" or "junior ________" or "assistant _________". Better training in high school and University will help, but expecting 22 year olds to be great at anything is probably a bit unrealistic and both Google and Microsoft might find it worth their while to expend some of their vast pool of knowledge in doing some of that training themselves.
Re:Dreaming... (Score:5, Insightful)
There is a reason the programmer stereotype is the geek with poor social skills, because most bright people with strong social skills are going to quickly jump to the business side of the company where they can make more money and climb faster. Its a form of natural selection.
Developing software is really not that great a career, when compared to the other modern careers in business(though its obviously better than factory worker and ditch digger). It does draw some good people who enjoy developing software or maybe don't have the temperament for other professions(translation: geeks who would suck at business, marketing, law and medicine). There are some geeks that score big in software which are the exception to the rule but that happens at about the same frequency as people scoring big in professional sports or acting at least since the dot com bubble burst.
Problem #1, software development isn't a career path that will last you until retirement or if it does the entire second half of your career will suck. In most companies programming is a career for 20 somethings, maybe 30 somethings, 40 somethings if you stretch it. You better hope you land hit on a lucrative startup in your prime so you can get your FU money and retire young. Once you hit your 40's and 50's you are either going to be forced to switch to self employment or to management otherwise your career advancement is going level off and you hope it doesn't start going down. Fifty and sixty year old programmers are something of an oddity and usually discriminated against because the stereotype is you need to be young to be a programmer. The exception is maybe if you have a PhD and can jump to research. Jumping to management or self employment mid career is fine for some people but it requires a radically different skill set and temperament to manage people, business, customers, budgets and schedules and not code. A lot of coders wont succeed in the transition.
Problem #2, most programming jobs don't really pay that well though again its better than factory work :) You will need to be a superstar and create products that you own and control or you aren't going to make big money. If you are a programmer stuck in a large organization the executives, marketing people and salesmen are going to be the ones getting rich and climbing fast. There is a reason so many climbers seek MBA's, even if its dubious MBA's have real value in the world (especially after witnessing the recent meltdown induced largely by MBA's, George W. Bush included in that number).
As a programmer will probably do OK money wise, but you will probable have an opportunity to work long hours on tough projects, and do some painful death marches to get products out the door. If the product fails then you hope you survive the layoffs that ensue. If it succeeds you discover the people above you in the food chain have taken most of the profits, and throw crumbs to the programmers unless they are superstars. If you are lucky you get a small raise or a few options(since options are accounted now they aren't as widely available as they used to be especially on the lower rungs of the food chain). You then just get to start over on the next product and repeat. It can easily be a treadmill to nowhere unless you get in to a high risk startup that succeeds. If you do you still have to work hard or get lucky to get a big piece of the action which requires some pretty serious social and business skills and a strong ability to watch your back, because everyone else in the startup is trying to get a bigger piece of the action too... probably at your expense.
Its just a guess but most really bright people, especially ones with good social skills, are going to be smart enough to angle for the business side of the company because they know thats generally where the money is, especially these days, because CxO's and directors almost always rake in millions a year whether they succeeded or not. Most programmers will never see that kind of money.
Re:Dreaming... (Score:5, Insightful)
From an engineering standpoint: There is no reason for software to break, and yet it does, a lot of the time.
Nonsense. Software, like any other engineered system, will break when subjected to forces in excess of what it was designed to tolerate.
Would you argue that a building must NEVER fall down? I hope not.
The companies not happy with grads is pure BS. (Score:5, Insightful)
Unless you finish that sentence..
Companies are not happy with the fresh coders because the good ones wont accept the low salaries they offer.
Sorry but Programming is HARD. you gotta pay a lot for a good programmer. That will not change.
I am sick of corporations and companies making up this raging BS story about a lack of candidates. RAISE YOUR SALARIES AND THOSE CANDIDATES WILL APPEAR.
Re:The companies not happy with grads is pure BS. (Score:5, Insightful)
I've never known this to be the case. When I managed developers, I paid market rates which I am sure you would say are low. I never had a single offer turned down for salary considerations. I had a range of programmers from good to excellent. Expectation of higher salaries was not correlated with skills or performance at all.
You are right: programming _is_ hard. But salary is only useful as a motivator up to a point. Beyond that, what good programmers want is respect, appreciation, and freedom to do great things. They want to work on stuff that they feel good about. They also want to work with other smart people who they can learn from and build great stuff with. Those are decent starting points anyway.
So your general idea is right: that complaining companies are full of it, but I don't think it's because of money. It's because they have lousy uninspiring development environments.
Cheers.
Re: (Score:3, Insightful)
Not contradicting your ideas. But complementing:
>> Beyond that, what good programmers want is respect, appreciation, and freedom to do great things
Most companies do not have many cute projects to do, just "the same dirty work" they have to. Of course a very good manager can disguise that as a awesome project, but just for a while.
>> they also want to work with other smart people who they can learn from and build great stuff with
The real smart programmers (also, the pedantic ones) soon will be fe
Re:The companies not happy with grads is pure BS. (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.
Re:The companies not happy with grads is pure BS. (Score:4, Insightful)
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.
The problem is that nerds are far too Libertarian, with a capital L. Forming a professional association to them would be tantamount to forming a union, and that would be sacrilege!
Re: (Score:3, Insightful)
Paying people more doesn't make them suddenly skilled. All it does is suck talent away from your competitors, it's zero sum. It might also encourage more people to enter the field, but if education is poor, why would they be any more skilled than previously?
I'd agree with Stroustroup. The number of people out there who truly understand computers and software development is too small, because new developers have to re-learn the lessons all over again due to poor or non-existant teaching.
Re: (Score:3, Interesting)
Do you interview people at all? I'm a programmer, and I do. (We do mostly technical interviews.) There are people coming out of colleges with masters degrees that can't write a stack. In Java. Using anything but java.util.Stack. Who screw up, badly, a simple array-reversal coding question. I know my company pays very well. We are lenient on experience and knowing all the latest whizz-bang technologies if someone can show they can think and solve problems and possess some basic skills. The vast majority fail
Re: (Score:3, Interesting)
Re: (Score:3, Informative)
Very technically, a byte can be four bits, it's an octet that specifies 8. Bytes have been defined as 7 bits on some architectures. But still, if you have to give a single straight answer, 8 is much better than 4.
Good point (Score:4, Insightful)
Re: (Score:3, Interesting)
I do think we need to get better at educating, but I still think we're in the "Learning how to make practical software WELL" phase of the discipline.
Re:Good point (Score:5, Funny)
Re: (Score:3, Interesting)
Ahem... [wikipedia.org]
(I agree with your fundamental point, by the way; I just thought that particular choice of analogy was amusing.)
Re: (Score:3, Informative)
Re: (Score:3, Informative)
There are flaws in virtually all physical construction that would never be tolerated in software design.
For instance, the one that collapsed a few years ago and made national news. It turns out that they never specced a particular load-bearing part properly and ended up using one half as thick as they needed. It lasted 40 years before failing, and there wasn't anything in standard test procedures to spot it.
He can wish.... (Score:5, Funny)
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.
But RMS isn't going anywhere !
Lies!! (Score:5, Funny)
While probably safe for work, I don't actually want anyone to see this, but I found one! [king-mag.com]
Re: (Score:3, Funny)
Re: (Score:3, Funny)
Is that a tub of Vaseline under his desk? I didn't think it could get any worse until I noticed that.
Stroustrup on Java is like Bill Gates on Linux (Score:5, Insightful)
Bjarne Stroustrup, creator of C++ [...] weighs in on [...] Java (there's too much of it)
Oh, gee, now THAT is a surprise!
Is coding really a team sport? (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.
Re:Is coding really a team sport? (Score:5, Insightful)
Coding can be a hobby, in which case sure, you can do it alone (though for significant project, it gets rough, with all of the cross cutting concerns... someone who's extremely good at algorythms may totally suck at designing a public API... fairly common in CS-heavy companies that do a lot of backend stuff).
I'm guessing though, they were referring to coding in the real world (for a living), in which case, for anything significant (no, the ecommerce website someone makes as a freelance isn't significant), you'll need to be a good teamplayer. People who are good at making functional GUIs often suck at backend programming, and vice sera. People good in architectures often miss the details. Computer scientists often cannot understand project managers and architects. Thus, it becomes a team sport (like you'd have goalers, offense, defense, etc). Being able to work as part of that team is almost as possible (sometimes moreso) than just being good at your specialty.
Re:Is coding really a team sport? (Score:5, Insightful)
The problem is, you're lumping all development into some generic activity called "coding." That ignores the simple fact that being an expert in C++ does not make you expert at UI design. Being an expert at UI design doesn't make you a SQL whiz. Being a SQL whiz does not make you an expert at designing flexible & scalable application systems with many moving parts.
See the pattern? To make any practically-useful system today, you MUST work with other people who are expert in areas you're very likely not an expert in. You can create the best data model in existence for your company's payroll system, but if you don't have a clear understanding of the business rules, a good architecture, and a solid UI (and I've seen very few people in software engineering who are experts at all of the pieces that go into creating a good piece of software), the resulting product will be an unusable piece of crap that doesn't meet requirements.
Stroustrop's point of the single genius programmer is valid. The model you describe supposes that a single person can possibly learn and be expert in all of the disparate knowledge areas that are required to make a working piece of software, and in any group, the people who are capable of that level of insight & knowledge will *always* be the statistical outliers. Instead of punishing the majority of people for not being born with genius-level intellect, teach them how to be good at their chosen area of expertise, and how to relate to the people they have to work with to get things done. You don't have to engage in XP or some other "pair programming" methodology to realize value from being able to communicate clearly and work with your architect, QA / Reliability engineers, your customers, your project manager, and other developers who are working on separate subsystems.
Re:Is coding really a team sport? (Score:5, Insightful)
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.
...
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 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. ... There is a place for ambition, but that instinct can be a hinderance.
I think you've misunderstood was Bjarne was talking about. Most software projects have a dozen or more developers requiring close collaboration and the ability to cope with egos and positive/negative emotions. Also, just the ability to communicate your information to someone who needs it. Damn straight modern programming is a team sport! Are you working on tiny apps in a small closet hidden somewhere inside a small company? 'Cause for the rest of us, our day is filled with interacting with people. I'm very introverted, but I do need social skills to deal with the people I work with every day -- which causes me extra stress, but I digress. Software development in big companies and FOSS projects is a team effort, and for successful projects, the humans working on those teams need to work together smoothly.
Eventually, you start talking about what Bjarne was talking about at AT&T: social skills doesn't mean your hosting dinner parties and chatting up girls. It means being able to share and communicate your idea to another very smart person, and then being able to listen and learn from that other very smart person. I think you shifted into that point at the end of your post: the idea that introverted smart people need to find other smart people they can talk with.
Social skills in this context doesn't mean being the life of the party or tossing a football with non-geeks. Social skills means being able to tell the prima donna that his code has a bug in it. It means being able to explain to others why a design or architecture is bad. It's coping with hurt feelings: yours and theirs. The basic social skills of working in a modern business environment.
Programming has evolved waaaay beyond the lone programmer in his little corner office working his own hours. A programmer is expected to talk to end users and tease out their real requirements; it requires them to be able to stand up and argue for something in a room full of managers; it requires having the ability to tell another programmer his coding style is awful, but you want to help him to get better.
That's what Bjarne meant by social skills and team programming.
Ha! (Score:5, Funny)
As a pizza delivery driver, I have to take exception to this. I see all kinds of folks but one guy in particular stands out. He always orders at least a large pizza and two lasagnas, usually with 2 or 3 2L bottles of pop and a couple (or three!) slices of cheesecake.
He weighs a good 400lbs, has 3 monitors and a laptop on the go at all times (one monitor for CSI or whatever show, one for a terminal, one for IM), with WoW on the go on the laptop. His desk has a path cleared to it amongst piles and piles of garbage - empty pizza boxes, empty takeout containers, half-eaten food..
Such a sight to behold.
So no, they're not extinct.
One problem... (Score:4, Funny)
But, where then would Slashdot get its readers?
too much Java ... (Score:3, Interesting)
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/ [yosefk.com]
(*) 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.
Re: (Score:3, Insightful)
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++(*).
What do these languages have in common?
* C
* Java
* JavaScript
They each have the same highly successful syntax. Except for small adaptations for the different levels of systems vs application vs scripting these languages are interchangeable and each has a certain C-style simpleness and elegance to it.
There are all sorts of different competitor languages... Objective C, Ruby, Smalltalk, D, Pascal, etc. The languages that have been widely successful even since before time began (1970) have been variations of
Conflicting goals (Score:5, Insightful)
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.
We all know that we get to choose two of the three, problem is companies want all three without any consessions.
Also, imposing rigor on software design increases time and in certain situations cost, while increasing reliability. While we are definitely heading in the right direction as a field; there is a long way to go before we ever get to any kind of discipline that is both as rigorous as other science or engineering disciplines and usable on the scale that people currently expect software to be at. Real customers by and large can't (although some cases won't) pay for rigorous development. Hell, the mentality has been creeping into consumer electronics as long as I've been alive. The current market drives us towards fast and cheap and only towards reliable if the customer is pissed.
Wait, don't leave! (Score:3, Funny)
'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.'
Uh...guys? I'm right here! Under the pizza boxes! I was trying to nibble some of the last bits of cheese off the boxes, and I slipped. Guys? Where are you going? (Lights click off.) Guys? This isn't funny!
PHBs take note, please? (Score:5, Insightful)
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.
I almost stood up and cheered when I read this, until I realized that nobody who can change things is reading, and besides I would have disturbed the other cubicle rats.
The problem with C++ (Score:3, Insightful)
The real problem with C++ is that it keeps changing all the time. I learned C++ around 1995, shortly after learning C, and it was pretty simple and straightforward. Sure, there was the template annoyance, but nobody used them so it didn't really matter. Now it's some strange bastardized beast with lots of syntax that's not even remotely derived from its C roots. What was wrong with simply having an object oriented version of C? I know it can still be used that way, but it seems to be more and more difficult to only code that way using C++, because you're going to have to use libraries at some point or another.
Re:The problem with C++ (Score:5, Insightful)
I know it can still be used that way, but it seems to be more and more difficult to only code that way using C++, because you're going to have to use libraries at some point or another.
Yeah, those damned templated libraries with their: performance [stanford.edu], type safety [psu.edu], design patterns [wikipedia.org], generic programming principles [stepanovpapers.com]. I can't imagine why Java wasn't happy with containers of Objects and added Generics. C# definitely shouldn't have followed suit. All you need is void*, size_t, and int (*)(void *, void *), right?
My way of interpreting is null (Score:4, 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.
Re: (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.
I also hate bad programmers (Score:4, Interesting)
Suggestions for job searching... (Score:3, Informative)
On your resume, try to highlight your significant personal projects and why you think they are cool. Your resume scores you interviews. And on your interview, I don't think impressing your interviewer is the goal, but you do need to show you're up to what you claim to be on the resume. Your personal projects can become an advantageous conversation piece during the interview. Try to have a good time with the interviewers because they may be having a long day as well.
Programming vs. Software Design (Score:3, Interesting)
The big problem with most Computer Science bachelors' programs out there is that they make sure students are well equipped to deal with the hot language of the times (often n-1 due to the slowness of curriculum design). This is currently Java. This ensures graduates can go and get jobs in the industry and make money. However, when that language dies out and is replaced by whatever is next (often C#, Ruby, JavaScript, or even C/C++ with GTK+ or Qt), the graduates don't know how to adapt. Why? They were taught everything they know in just one language, and the lessons were too entrenched in the specifics of that language. They weren't taught to learn, they were taught to code. This separates the good CS degrees from the bad ones.
Until recently, MIT used a simplified version of scheme [wikipedia.org] to teach its introduction course. The advantage to scheme was that it was mostly academic, and it was simple enough for the students to not get stuck on language-dependent structures (in fact, the course uses its own sub-language to further simplify things), plus it is VERY different from C/Java-style languages (scheme and lisp use prefix notation [wikipedia.org] whereas C and Java use some informal mix of infix and prefix with ambiguous grouping rules). After that, it was on to Java.
I hear they use python in that course nowadays. Not just python like scripters and web developers use it, but python because it is a simple and easily learned language for the purpose of teaching specific concepts. In fact, the curriculum of that introductory class leans heavily on electrical engineering principles; An article of The Tech from 2006 [mit.edu] describes the new entry-level course as "designed to teach freshmen introductory electrical engineering and computer science in an integrated fashion using mobile robots as a case study."
This pushes the idea of teaching the concepts rather than the language. A well-trained software engineer should be able to pick up a new language in short time, since all the abstract models are known quantities. The hurdles should be in learning or un-learning scrum [wikipedia.org], agile [wikipedia.org], and MVC [wikipedia.org] rather than J2EE, Lua, and Qt.
Proper instruction must be modeled after teaching flexibility and raw logic. Entry-level courses should include basic theory of computation (automata) and should focus heavily on discrete math and logic. Middle-level courses should include statistics, probability, object-oriented design, and should additionally build on the entry-level courses. Advanced level courses should include collaborative design and over-arching design principles like MVC and agile development. At least two different languages should be required by various courses, and the math courses should not use any industry-usable language at all (NFA [wikipedia.org] is a language after all...). Companies tend to vastly prefer CS-Math dual-majors over other degrees because it shows you understand the data structures and algorithms; such a program can't just teach you a programming language and call it a degree.
Strostrup is the problem (Score:5, Insightful)
It's amusing seeing Strostrup whining that schools are teaching Java instead of his C++. The problem with C++ is Strostrup. He's in denial about many of the fundamental problems of C++. He's publicly stated that there's nothing major wrong with C++. If that was the case, we wouldn't need Java and C#, which are, after all, attempts to improve on C++.
Down at the bottom, the fundamental problem with C and C++ is the "pointer=array" concept. That was OK for 1978, but it didn't scale well. It's the cause of most of the buffer overflows in the world. C and C++ don't even have syntax for properly talking about the size of an array parameter. That's just broken. C and C++ need something like conformant array syntax for parameters and in other contexts where one needs to talk about the size of an array.
The second fundamental problem with C and C++ is that the programmer must obsess on "who owns what", and the language not only doesn't provide help with this, it doesn't even have syntax for talking about it. There's no distinction between a pointer that "owns" an object and one that just "uses" it. Yet if the programmer doesn't carefully make that distinction, the program will have either memory leaks or dangling pointers.
The trend in C++, since templates went in, is to try to wallpaper over the problems with the underlying model. It never quite works; the mold always seeps through the wallpaper. Container classes almost, but not quite, succeed at encapsulation. There's almost always some place where a raw pointer has to be allowed to leak out. The standards committee has gone off on a "generic programming" tangent, with emphasis on weird template features used by few and used correctly by fewer. Just because you can abuse the C++ template system as a term-rewriting engine doesn't mean you should do that in production code. This results in a whole new class of incredibly obscure compile-time bugs. The standards committee has been thrashing for over a decade in this area; in the 1990s, the new version was to be "C++9x"; now it's "C++0x", and since we're close to 2009 already, "C++1x" looks like the reality.
C++ is the only major language to have hiding ("abstraction") without memory safety. No previous language had it, and no later language repeats that mistake.
Back around 2001, I made an effort [animats.com] to do something about it, but the political hassle was more than I had time for.
Re: (Score:3, Insightful)
C++ is designed for programming at a lower level than Java, C#, Perl, Python, or other bytecode languages. The object-oriented facilities enable large-scale application development by a team of programmers, but fundamentally it is a low-level language like 'C', from which it is derived.
If you were writing a video game, you might care if the garbage collector could start running whenever you instantiated an object.
C++ has facilities such as exception handling and RTTI, but in practice they aren't used with
The power of denial... (Score:5, Funny)
Oh yeah?! Well, I don't believe in you, either!
Too damn bad.... (Score:5, Insightful)
That the companies that are complaining about the poor training that new students are getting are not willing to hire older programmers who got exactly the kind training Bjarne is pushing for. Yeah, got exactly what he wants to put back into schools today, then we have tested it and developed it over decades of developing and shipping products. And there are hundreds of thousands of us out of work in the US.
I've taught programming classes and have had the experience of having companies call asking for the names of students who did well in my classes. I have also had the experience of trying to apply for those jobs. I have told the companies that I will work for an entry level salary and since they trust me to do the training and evaluation of the students you would think was qualified...
The best response was to be ignored, the worst was being laughed at.
Fuck 'em all,
Stonewolf
Here we go again with the myth (Score:3, Insightful)
The old "there a shortage of skilled labor" myth.
First off, all we have is the anecdotal exposition of one person.
See my other posts on the skills shortage. I've posted this before:
http://www.cs.ucdavis.edu/~matloff/itaa.real.html [ucdavis.edu] [ucdavis.edu]
http://www.fastcompany.com/magazine/85/essay.html [fastcompany.com] [fastcompany.com]
http://www.upenn.edu/researchatpenn/article.php?708&bus [upenn.edu] [upenn.edu]
http://techtoil.org/wiki/doku.php?id=articles:shortage_myth [techtoil.org] [techtoil.org]
All companies want are disposable interchangeable people who will work for nothing. This concept is doomed.
What, exactly, Bjarne, is the definition of a qualified developer? Developer of what? Software for what?
The entire concept of a "software engineer" or "developer" is meaningless. Take for example the statement "I am an Engineer". That statement is so broad to be meaningless. What type? Electrical? OK, what type? AC or DC? Electronic? Computer? Servo systems? Architectural electrical? Power grids?
Do you get my point?
Ok, now to developer. Database applications. Financial systems. HR. Medical systems. Commercial systems. Academic records. I've had a5-6 IT and development jobs and each domain was unique requiring becoming a psuedo expert in a few short months. Expecting a "one size fits all" approach to work is a recipe for failure.
So before we prescribe a solution, we need to determine what exactly we are trying to solve.
Such a tool... (Score:5, Insightful)
I have to say after reading this article -- Stroustrup is a tool. It is just that simple. Nothing more than a pundit at this point. He had a stroke of genius in programming and now is an expert in everything related to programming.
He thinks companies aren't happy with their graduates? Well, I say companies have terrible hiring practices, terrible mentorship programs, and ridiculous expectations.
Balance the theoretical and the practical? Wow. Brilliant observation. Great, Bjarne. Please give us more sweeping Karate-Kid style one-liners.
High schools should teach students to work hard? Great, Bjarne. Thanks again for that. Search out information as needed? Another stroke of brilliance. Express ideas in writing and verbally? WOW. PINCH ME. Such genius can only be dreamed of.
Then, the article closes with him trying to be edgy and go out "with a bang". Sloppy, fat geeks. Nice. This guy is a douchebag. Pure and simple.
Here is my own contribution to douchbaggery... I think we should take aging, isolated, self-important pundits out into a remote area and bury them neck deep in the dirt.
Re: (Score:3, Insightful)
/unpedant
Quote is also a noun. I'm sure you meant to say, "Read on for more choice quotes from the professor."
Re:Better English education as well. (Score:5, Funny)
/pedant
Quotes is a verb. I'm sure you meant to say "Read on for more choice quotations from the quotable professor."
/unpedant
Quote is also a noun. I'm sure you meant to say, "Read on for more choice quotes from the professor."
/gollum
Quoteses is also a plural noun. We're sure hobbitses meant to say, "Rrread... ON! for more choice quoteses... fromtheprofessor. My precious."
Re: (Score:3, Informative)
/gollum Quoteses is also a plural noun. We're sure hobbitses meant to say, "Rrread... ON! for more choice quoteses... fromtheprofessor. My precious."
I told you they were tricksy. I told you they were false.
Re:If they can't get a smart and social employee.. (Score:4, Funny)
My production would definitely be down if I had a cheerleader. Depending, of course, on what she looked like...
Re:If they can't get a smart and social employee.. (Score:5, Funny)
My production would definitely be down if I had a cheerleader.
They have a pill for that now.
Re:If they can't get a smart and social employee.. (Score:5, Funny)
Rosie O'Donnell will be cheering for you if you don't get back to work.
Signed,
Your Boss
Re:He sure thinks a lot of himself (Score:4, Insightful)
Someone can learn the basics of a lot of programming languages, but not know the fundamentals well. What a university should provide is a solid foundation. My education included chip design, compiler design, assembler, and other low-level topics that I never use on a daily basis. But studying them at the university level definitely makes me a better programmer.
Re: (Score:3, Interesting)
Most of these topics can easily be researched and learned without a university.
It isn't like say, brain surgery or nuclear engineering.
Re:He sure thinks a lot of himself (Score:5, Insightful)
Most of these topics can easily be researched and learned without a university.
Yes, they can be researched - but, let's face it: most people either think it's beyond them, think they'll never need to know it, or are just too lazy. The ones who would research it themselves are likely to be the ones who are good anyway.
Re: (Score:3, Insightful)
And what makes you think that it will be different if they do study? They will be on full auto mode, study the bare minimum and get the degree.
In the case of CS there really isn't a difference between self-taught and degree holders, and the "good" degree holders likely knew most everything before starting the degree.
My fellow CS students could be classified in two groups: OMG-I-think-I-Have-An-Algorithm-In-My-Program, and I-Write-Artificial-Neural-Networks-For-Fun.
Re: (Score:3, Funny)
Someone can learn the basics of a lot of programming languages, but not know the fundamentals well. What a university should provide is a solid foundation.
Quite the opposite. You can learn a solid foundation in highschool or on your own -- or even in a 101 course. Universities already teach foundations -- in fact, that's all they teach, and that's why CS programs are complete and utter failures. You should be expected to study the very low-level basics of electrical engineering. 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
Re:He sure thinks a lot of himself (Score:4, 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!
Re: (Score:3, Insightful)
Programming languages? Ha ha ha ha. I don't think my university bothered to teach any programming languages outside the first couple of intro courses (even then it was geared more at fundamentals). In some classes we were expected to learn whatever language the class required on our own and be able to use by the time the first assignment was due. Most classes didn't even care what you coded in as long as a TA knew it (if you wanted partial credit). Granted most of my classmates had aspiration higher than be
Re:Choice quote (Score:5, Funny)
Re: (Score:3, Interesting)
Re:On High Schools doing more... (Score:5, Insightful)
You don't need the latest and greatest to learn how to code. Infact, the more I see of computers and teenagers the more I think I had it better being limited to machines that didn't have a 1/10th of a meg of RAM and no Internet. Today there are just far too many distractions on a PC to get kids away from the task at hand. To be honest, if I were teaching coding I would go with the 2004 text about whatever language that normally can be found in the bargin bin for 5 bucks, a bunch of P-II 350s, a 10 dollar flash drive for each student and whatever freeware IDE I could find for the chosen language. No other software on the PC and no network connections either, thankyouverymuch.
This would keep the students mind on the task in front of him. When I first got my Vic 20 with no media storage and no game cartridges I had to sit down and learn how to make the machine do what I want it to. I found that it was a very gratifying thing to do. If I would have had MySpace and EverQuest I doubt I would have ever have gotten as far.
BTW: Get off my lawn!
Re: (Score:3, Interesting)
Agreed. Every student in CS probably knows 'a thing or 2' about computers and will try to multitask. Again and again it has been proven that multitasking actually does not work nearly as well 'single tasking'. The computer multitasks, not the user! So you cannot open up your word processor/text editor, type a paragraph, go on Facebook, (stupid people) check your sports statistics/(smart people) check important news, your downloads on whatever client, and rinse and repeat. For many, this is normal behaviour.
Re: (Score:3, Insightful)
Well, if you want to motivate a child, perhaps you do have to have the latest and greatest, or at least somethin
Re: (Score:3, Interesting)
Well, if you want to motivate a child, perhaps you do have to have the latest and greatest, or at least something with some cool factor.
I'm not so sure. The "cool" part of playing with the old machines is that there was little abstraction back then keeping you away from the bits. If you poked the right memory location with the right number, the pixels on your screen would change. Poke another bit and you'll hear a click on your speaker. That's very cool, in my old timer opinion, and something the kids today
Re: (Score:3, Insightful)
Better Idea: Why learn to write code on a PC?
Many of the projects I did in school were micro-controller based. We designed little gadgets that tried to detect if a room was empty and turned out the lights. It had to "talk" to sensors and lights.
I think the standard undergrad "programming 101" entry level class project was to write a controller for a snack food vending machine. Inputs were the various butons and output opended dors and rotated a try and give out change.
I've heard others did ATM machines.
Re: (Score:3, Insightful)
Re: (Score:3, Interesting)
My high school didn't even remotely prepare me for university-level education. I literally skimmed through high school (that is, minimal effort) and (based on my standardized test scores) I got a scholarship for my first year of university. Then I tried to skim through my first year of university. Needless to say, it didn't work - I had to retake three classes.
It wasn't a lack of funding in high school that caused the problem. It was because schools in the U.S. aim to teach the slowest student in the cl
Re: (Score:3, Interesting)
If colleges did their job and taught students business skills such as economics, accounting, project planning as well as professional programming skills such as object oriented programming, secure coding, MVC, three tier system design and SQL, and not calculus IV obscure algorithms, zxy-tree discrete unified field algorithm garbage we would not have this problem.
HR is convinced computer science is required for any I.T. job when in fact they do not teach practical skills outside of academia. The .com bust cr