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.
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.
I am _not_ fat.
..is here.
The Army reading list
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.
Try using a tag team. Maybe if each programmer had a cheerleader coordinating his efforts, he could get his production up.
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.
... 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.
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.
Do not look at laser with remaining good eye.
I think he has a good point. One we already knew, but good none the less. I have just completed two years of a Software Engineering degree and it really was an easy two years with nothing all that challenging presented. I have friends getting good marks which really aren't that good (hope you guys aren't reading..) Software Engineering has apparently been said to be the hardest form of Engineering around because it's so hard to wright a program of significant size which is bug free. If structural engineers building bridges had as many bugs in their work as software engineers have in theirs, the world would be a very unsafe place.
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 !
/unpedant
Quote is also a noun. I'm sure you meant to say, "Read on for more choice quotes from the professor."
While probably safe for work, I don't actually want anyone to see this, but I found one!
If you are about to mod me down, keep in mind that this post was most likely sarcastic.
Bjarne Stroustrup, creator of C++ [...] weighs in on [...] Java (there's too much of it)
Oh, gee, now THAT is a surprise!
My production would definitely be down if I had a cheerleader. Depending, of course, on what she looked like...
Developers: We can use your help.
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.
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.
But, where then would Slashdot get its readers?
Bruce Perens.
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/
(*) 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.
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.
Developers: We can use your help.
They can't produce quality products as cheaply, as reliably, and as quickly as they would like...
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.
'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!
(-1, Raw and Uncut is the only way to read)
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.
Have you read my blog lately?
Most of these topics can easily be researched and learned without a university.
It isn't like say, brain surgery or nuclear engineering.
Mod me down, my New Earth Global Warmingist friends!
First Stroustrup complains Java is a major ill of CS curiculum, and then Sun says that Java solves all the problems of people who have C++ implementations. And for my next feat I will find an article with the Democrats blaming Bush for something. :-\
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.
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.
/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."
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.
My production would definitely be down if I had a cheerleader.
They have a pill for that now.
I was a developer. Highly paid and with lots of stock options. I worked my ass off for years and years making double the average salary. I was on a plane to Japan more than a few times with less than 24 hours notice. "Employee of the year."
I got tired of it and switched into systems design - technical architecture. My salary went down a little, but my work load became manageable again - 50 hours per week.
I miss programming. It was enjoyable and gave me a feeling of accomplishment - every day. I'd return, but the salaries are half what I'm worth (IMHO). I'll stay in technical architecture for the higher salary, greater prestige and control and continue my work on outsourcing development where ever it is most efficient (generally, not India).
Rosie O'Donnell will be cheering for you if you don't get back to work.
Signed,
Your Boss
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.
God spoke to me.
Having taken a class from him, I cannot honestly respect any feelings he has about education. The man is hands down the worst professors I have ever had, He has no concept of teaching, he rather just rambles in class and expects the students to know everything. In a intro level CS class, he expected every student to be proficient in C++, event though in Texas, the high school CS curriculum is entirely JAVA (which isnt a good thing, but it is the way it is). While I agree with what he says, I do not support him even talking about education. If he were not the creator of C++ he would not have a job in Acedamia.
Funding is a necessary but not a sufficient condition for academic success. I attended a school district that spends about half as much per pupil than the big city school district despite having about 3x more special needs kids per 1000. Despite that lower funding level they achieve a 90+% college attendance rate vs about 20% for the large school district. The difference is that in the district I attended (and the similar one my children now attend) the parents expect their children to succeed and put a great deal of effort into making sure that happens.
There are 4 boxes to use in the defense of liberty: soap, ballot, jury, ammo. Use in that order. Starting now.
There is more java about than c++ because it is easier to teach.
System development and construction are not similar disciplines.
Programming and Plumbing are similar in that they both start with P.
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 being code monkeys for the rest of their lives.
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 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.
Current CS grads do nothing but complain (none of this code looks like it was written by the book!), stumble into pitfalls of hubris (Sure I can have that ready by noon tomorrow!), download as much slugware onto their workstations as possible (it's an additional backup software that we used in my database relationships course!) and give up if they hit a wall (teacher... I mean, manager, you ask the impossible! the textbook answer wasn't the right answer!) -- all problems that a highschool dropout can walk around with a blindfold on if he's actually been working for 2 years instead of going to school for 4. You tell me we're getting a kid fresh out of school and I kiss goodbye to the next month of productivity.
I am the richest astronaut ever to win the superbowl.
Lack of funding? Young man, I learned Pascal on a TRS-80 Model II. The cellphone that is likely in your pocket is probably more powerful in just about every aspect. The book we learned from was probably close to a decade old at the time and was sad in the shadow of what you can get at Borders for 25 bucks. I learned programming just fine.
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!
Dedicated Cthulhu Cultist since 4523 BC.
/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.
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.
10 little-endian boys went out to dine, a big-endian carp ate one, and then there were -246.
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 created a large surplus of candidates where they could require it but now its leveling out and they are filtering good applicants out.
Every other profession out there is trained at a university on how to do their job. HR is trained from a B.A. with a minor in H.R. Chemists are trained with a science degree in chemistry, teachers with a teaching degree, etc. Its logical to assume HR thinks computer science teaches students how to be practical in business.
http://saveie6.com/
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 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 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 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, agile, and MVC 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 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.
Use my userscript to add story images to Slashdot. There's no going back.
Not sure if this helps or hurts, but here is why I mainly only hire developers with degrees: it shows dedication. It might not be the best practice, but being able to "stick it out" shows me that you have the tenacity to stay with a problem and find ways around your shortcomings to succeed because many times, a project throws you in situations where your education will let you down, but you still need to succeed.
Please note that I said "mainly" because I do realize that there people that do not fit in the normal mold, but they are found very quickly usually through references from friends/family in the field.
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. And it does not apply to just CS students really. It applies to just about anyone with a PC these days. Older people often do not even know the computer can do more than one thing at once, so they stay focused one thing at a time. Not bad I guess.
I would love to see a school implement what you are saying. Old computers, no Internet, a foreign but learnable *nix (BSD or Linux with no X until necessary!). And students not allowed to bring their own computers. Then CS can really focus and will learn how to use *nix (not X or any GUI), a good text editor (Vim or Emacs; Nano for quick edits), and everything else necessary without even using a mouse. In fact, take away the mouse completely! Minimalise!
At my university the normal thing for 1st/2nd year CS students is to go to the "Linux Lab" (old crappy Red Hat with GCC 3.4.x and GNOME), open up an X terminal and ssh (because the server runs x86 and the machines are running x86-64 mode). They could forgo the entire X portion (speed things up too), and use x86 mode.
I am not sure why every time I go to any lab I find things not set up the way I would like to see. And I do not think I am the only one, nor am I complaining because I am not root. GCC 3.4.x and all the other old versions of software in that RHEL distro is a joke in my opinion. An insult.
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 to do something about it, but the political hassle was more than I had time for.
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. If you were a child today, you wouldn't feel an urge to play with a TRS-80 Model II (or BBC Micro in my case) because it is now old obsolete technology. You certainly wouldn't ask your parents to buy one for Christmas. So, you are unlikely to learn to program it. One of the major reasons so many people grew up liking to program from the late 70s to early 90s was because all the "latest and greatest" home and school computing devices had simple accessible programming languages pre-installed, and in many cases the manuals that came with them taught basic programming. And it was the coolest, latest, greatest thing. Children getting a PC now face a tytanny of choice, wondering "what's a good language to learn", while having to dodge the armies of angry geeks arguing furiously for and against each of them, before they start. And the chances are, whatever language they get hold of, it's most popular manual linked from its homepage will not teach you how to write Galaxians, but how to write a Pet Store's inventory management software. How many eleven year olds are going to shout "way cool!" to that? Today, if you want fun motivating programming for children, you have to a lot more to hunt it out than you did in the 80s.
Frankly, the recent trend of middle-aged geeks moaning about kids of today not wanting to download kits to reprogram their mobile phones that have such powerful processors (but just muck around making game levels in LittleBigPlanet), is rather like our grandparents moaning that we didn't want to play with Meccano, but just mucked about with that infantile brainless Lego...
Oh yeah?! Well, I don't believe in you, either!
We're geeks... We're the sorcerers of the modern-day world. --
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.
Just don't use PCs theyare far to complex and have huge APIs. Start the beginners on little 8-bit devices
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 class - even in advanced placement classes. (Yes, I realize I'm arrogantly claiming I'm smarter than the rest of my class. Humor me.) The whole "no child left behind" idea is fundamentally flawed - if they teach at the slowest student's rate, then the smartest students are going to be extremely bored, and they're going to turn their attention to unimportant things like video games.
If high school had required me to actually exert effort to graduate, I would have been far better prepared for a university-level education.
It apppalls me that Strouestrup is appalled that people can work as programmers without having had his University's darn supposedly valuable training. Whatever happened to the time-honoured tradition of a bright kid teaching themself assembler and networking and graphics in their bedroom? How many legendary micro programmers would have made their mark if they were forced to go through that lousy academic education process and pass their lousy applied-math exams (because that's what "computer science" is)? I never did like C++, I always thought the extra baggage just got in the way. I hereby accuse Strouestrup of foisting the whole O-O mess onto the C world. At a stroke thousands of top-notch C programmers were told they were 'out of date' by the HR department who wanted to replace them with the new cheap C++ grads. Then the C++ guys had it done to them when Java came along, then the Java guys with things like Ruby, PHP etc. As soon as I heard C++ acolytes talking breathlessly about "polymorphism" and "abstract base classes" I detected a strong smell of horse-shit. And look what a gargantuan mess they've made of C++ now! This is literally the language you will never stop learning. We are so lucky that C itself has remained largely uncontaminated by this disaster and we must fight to prevent any of that crap being transferred from C++ back into C. And as for industry: they are interested in just one thing; getting it done on the cheap, and paying people as little as possible, wherever they can find them in the world. Fuck 'em. So Bjarne Strouestrup, it's clear to me that you're well and truly serving your new masters at Texas A&M who are doubtless stuffing your fat arse with wonga. If you're so hot, why don't you go write some damn software in that crappy language of yours and show us what you can do? Don Knuth wrote Tex (major respect due); Larry wrote Perl and Patch; the awesome RMS wrote GCC, GDB, EMACS; Chuck Moore is the Forth-meister; hell, Bill Gates wrote MS BASIC (at least in part, in assembler); WTF has Bjarne Strouestrup ever done?
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
TRS-80's had built in basic that anyone who could type could code and manuals so anyone who could read could learn. Cell phones don't have those, and there's a real struggle to find those types of tools today.
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.
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]
http://www.fastcompany.com/magazine/85/essay.html [fastcompany.com]
http://www.upenn.edu/researchatpenn/article.php?708&bus [upenn.edu]
http://techtoil.org/wiki/doku.php?id=articles:shortage_myth [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.
putting the 'B' in LGBTQ+
There's this little known language that almost every modern cellphone supports though...
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.
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.
I once had a signature.
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 almost never get to see. Everything they're learning is so abstract that they don't understand why anything actually works. How boring that would be...
Devon
I'm of the opinion that the language is almost immaterial. Within a few semesters a student should be exposed to multiple languages anyway, so grinding that axe is missing the point entirely. Team issues, though ... I'll get to that in a minute.
It's not just the quality of CS grads and it has nothing to do with what language they're taught. The quality of grads in general is usually pretty low. The fact that it hasn't improved despite generations of languages isn't surprising: Basic business training is not nearly as difficult as CS, and we have millenia of experience in that domain, and yet those guys come out pretty damn green too.
I think this is largely because the teaching paradigm is almost entirely memorize-and-regurgitate. This is a fine way to teach multiplication tables but it's not very applicable to most real-world skills. Generally speaking it's far more valuable to know where to find information than to have memorized the information itself; this not only expands your ultimate capabilities, it makes you less error prone. Yet when was the last time you saw information retrieval as a college-level course? The only time I have seen that was when my wife was working on her masters in library science.
The value of looking things up is taught in (physical) engineering (mis-remembering physical constants makes bridges fall down) but it seems wholly ignored in most college-level disciplines. I credit Google for improving the tendency for people to look things up rather than memorizing them, kind of contrary to what you might have read in The Atlantic last summer. Information retrieval is an incredibly valuable skill. It's why skilled programmers used to have bookshelves of reference material. (In some respects I miss that, it was always fun to guess how a person thought by looking at the books he had on his shelf.)
As Stroustrup says this problem is compounded by the fact that students, even at the college level, are treated as singletons. How many jobs have you held where you were the only one doing everything? I've been there and done that, but most of the time we work in teams, and it's quite rare to find courses teaching people how to work together effectively as teams.
I'm not talking about just splitting something up into tasks done by multiple people, but rather the concept of layered skills on a team: mentoring or apprenticeship.
There is a reason why trade skills have been taught using apprenticeship for millennia (it's not just a way of limiting the influx of competition). It's because learning your trade solving real problems working with people who know how to do that kind of thing is far more enlightening that trying to bend your mind around abstract examples written on a white board sitting in a room with three hundred other people.
Brooks' team design from The Mythical Man-Month has (mostly) withstood the test of time; it should be something that is put in practice in the classroom, not just discussed for a few days in the abstract.
High-quality education needs both hands-on in a team and white-board theory! And yet it is beyond rare to see students of various levels (e.g. grad students and freshmen) mixed up on a classroom project. Instead we have them build toys, individually. They puzzle through building toys then we kick them out into the workaday world having never done anything more complicated than that.
The whole of our educational system is designed incorrectly, segmented and stepped rather than mixing and a continuum. It puts far too much load on teachers because you just can't have much one-on-one time when you're the only one the students can rely on; in a one-room school, for instance, it was common to have more-ski
jim frost
jimf@frostbytes.com
Wrong. I am not American. Guess from where I am...
... from another third world country that suffers some of the same problems as the Indians.
My point was that you were missing the fact that slashdot is not entirely composed of Americans. So your question "who cares" should raise a couple of "I dos"
-- dnl