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.
/pedant
Quotes is a verb. I'm sure you meant to say "Read on for more choice quotations from the quotable professor."
"What kind of music do pirates listen to?" -Paul Maud'dib
"Yeeeaaarrrrr n' Bee!!" -Stilgar, Leader of Sietch Tabr
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.
As a High School student a good school I know that I am pushed to do more, to learn more. I shadowed at a school that is not as fortunate as the one I attend and I have noticed that the way they teach at the High School is far different then the one I attend. They don't have nearly as much funding as needed leading to a lack of proper equipment and good teachers who can make the students motivated. From what I have heard that is how it is across America. Maybe instead of blaming the High Schools he should blame a lack of funding that leads to this problem.
... 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 !
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.
Incidentally, I find it appalling that you can become a programmer with less training than it takes to become a plumber.
Of course he does. His product is teaching people to be programmers. Unfortunately for his business model, no one really needs the type of training a plumber has to go through in order to write software.
Yes, sometimes lives depend on software working correctly. Many millions and billions of dollars may ride on getting the math or the database updates to work reliably. Those are the most exceptional and specialized cases in the software world. Well over 99% of software does nothing more significant than make the clock blink on your DVD player.
Bjarne Stroustrup, creator of C++ [...] weighs in on [...] Java (there's too much of it)
Oh, gee, now THAT is a surprise!
now that Bjarne has ridiculed you all will you mod him as flamebait too?
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.
They can't produce quality products as cheaply, as reliably, and as quickly as they would like.
Well, according to this link - http://www.sun.com/customers/software/elp.xml - switching from C++ to Java helps here. Maybe Prof. Stroustrup might find the source of many of the problems in his own mirror... ;-)
----------------------------------- My Other Sig Is Hilarious -----------------------------------
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.
Just because you're a sloppy fat geek computer genius semi-buried in a pile of pizza boxes and cola cans doesn't mean you don't have social skills.
Pizza is a good way to make friends.
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.
The itmanagement.earthweb.com webmaster(s) have some learning to do, too.
Seems to me to be a cheap company hiring cheap developers.
now we need to go OSS in diesel cars
Did Stroustrup create a professor at Texas A&M? I thought he was a software developer, not a genetic engineer.
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
Take away the sloppy fat and he's talking about people like John Carmack. If some of these companies had a computer genius or two working for them maybe they wouldn't have to lament the fact that their products are crap.
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)
The really good type of programmer he says is lacking will be learning many different languages... ON THEIR OWN. They don't really need the university.
That's an interesting point. My degree is in physics - while it is in principle possible to learn the same amount of physics as is required for a BSc without university, it would be much harder and take much longer. Having teachers introduced me to the right concepts and presented the right questions. Is the same true for CS? I'm sure there is more to programming than learning the syntax, but does programming require a degree?
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!
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.
Hmm. Perhaps this is why companies can't find good programmers; they're explicitly not looking for them in their natural habitat, and not recognizing them when they do find them.
What next, demand doctors drop the white coats and the god-like attitudes? Expect lawyers to give up Armani suits and martinis? Sorry guys, you've got to take the good with the bad.
I would say that to be a programmer requires something innate, but to be good you need education for sure.
If you've ever sat through a programming 101 course, you'll realize that some people "Just Get It" and some people have absolutely no clue no matter how simply you describe it and how simple the task is. Some people can see the flow of ideas necessary to make even something as simple as a for loop work, while others won't even begin to comprehend the concept or even be able to visualize any of it.
But eventually, once you have the basic grasp of it, having the education will expose you to a lot of things you might not know. Abstract concepts even as simple as data structures like linked lists might not immediately occur to you, so having someone teach them to you will help to no end.
But still, if you're not cut out to be a programmer, no amount of degrees are gonna help you...
ìì!
The companies are complaining because they are hurting.
Then they should start their own training programs and recruit students using high wages as an incentive to joint the program. For the right salary, I'll sign up.
Just callin' it like I see it.
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.
...from the dinosaur age of Unix, Windows, Linux, Turing Machines, multithreading, C++, etc. All that antiquated stuff is on the way out. This is the 21st century, the age of parallel programming and multicore. The baby boomer generation have had their say and they got us into the current mess. They have run out of ideas because they're too old and set in their ways. Now it's time for a new generation of thinkers to have their turn at the helm. Their job is to abandon last century's failing paradigms and change computing for a new age. The revolution is still ahead of us.
It's time for the old guard to retire and fade away.
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
C++ is old and creaky. You have to work around its defects to properly abstract programming constructs. So someone invents a language you can be productive twice as quickly. That should be a huge advantage.
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.
Incidentally, I find it appalling that you can become a programmer with less training than it takes to become a plumber.
Clearly the Republicans were aiming for the wrong demographic.
Empires grow and crumble, and the Turtle Moves. Gods come and go, and still the Turtle Moves. The Turtle Moves.
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.
Universities are supposed to be for higher level learning. They're supposed to teach students how to think. If anything the problem is that we have too many people who think degree = job. Are you telling me that mechanical engineers are coming out of school ready to hop into a job where they take something from design through manufacturing? Of course not. Companies hire junior engineers who learn from senior engineers. I've talked to engineers in pretty much every field who talk about the day that they where surprised by actually using something they learned in school. Most of engineering is learning your domain and the specifics of it on the job.
Companies don't want vocational level students. There are plenty of those and most of the jobs have been outsourced. They essentially want Senior Engineers on day one. Since they can outsource junior engineers they don't hire any, and then they wonder why there aren't more senior engineers.
And then we have the place where CS is different. Thanks to Open Source and the Internet, companies can luck into hiring new Senior Engineers without any formal training. The kids they want to hire are going to have been working on open source projects in high school and college, and by working with Senior Developers online, they're going to be far better than anything a college can put out. I can't think of another field where you can hire a Senior (or at least mid-range) employee with no formal work experience.
I think there are two pretty easy ways to fix this.
1) Universities shouldn't become more vocational, but they should have a framework for practical work. Think about fine arts majors. Generally they have frequent recitals/performances/showings. They work with other students and faculty sponsors to work on their craft. There should be practicum classes where students work in groups to create specs, design, and implement programs. Theater majors don't take "Playing the Character Stanley in 'A Streetcar Named Desire' 101". It's expected that they can take abstract technique from an acting class and apply it to any character on stage. By the same token students should be expected to take theory from their programming classes and use it to program in an actual language. We don't need "Java Programming for the Banking Industry 101".
2) Corporations need to take some responsibility. In the 1960s companies were more local and so they took more of an active role in their towns. They wanted their schools to be good so they'd have good employees. They wanted to have as many well paid employees as possible so there would be more people to buy their products. There was the idea that being good to your employees was good for your business. Corporations need to get back to this. They need to realize that if they want to have really good Senior Developers, they need to put programs in place to mentor and train them. Sure a school can teach students not to use global variables, but best practices for the banking industry? Or the insurance industry? Take some responsibility for creating the workers you need. Very few people are going to research how to do multi-level transactions for fun.
I am not a genius in Calculus which is why I am not majoring in computer science. I am good at Algebra but Precalc was the limit to what I could endure in college and had to change majors.
I am sure I am not the only geek here who loves science, business, and philosphy courses but could not give a damn about non practical engineering courses and still have years of experience in I.T. I know what an o^2 algorithm or a linear search routine is to cut down on the number of calculations to solve a problem in code but computer science is not practical as its overly blown to an extreme.
The reason I am talking about this (it may appear offtopic) is because H.R. requires a computer science degree regardless of experience in this day and age after the .com crash and still have not readjusted their qualifications when the labor market shortened again.
Sure they want programmers to work for peanuts but they are filtering out a good number of candidates in the process and then they outsource to India because they can not find any qualifed candidates here in the States or in Canada.
Bjarne Stroustrup is correct in that Business skills are not taught nor valued in computer science today. Sure its a science go to Devry if you want programming! ... bla bla that I read here.
Truth to be told I learned more taking economics, marketing, human resources, accounting, and finance about what customers needs are and how computers fit in more than what any computer science degree can teach.
Most of today's grads are clueless and I think Human Resource managers are as well as they assume computer science is about programming and business just like Business administration with an emphasis on HR is about job training for their jobs.
http://saveie6.com/
I've been developing for the past 11+ years now and I've taught a few C/C++ courses along the way so I thought I'd throw my two cents in.
Now, I hate to say this but some of the curricula offered at some of these colleges are a sick joke! Is it me or do mathematics professors make bad computer programming instructors? Unfortunately, some of these fine institutions are too cheap to hire a separate computer programming instructor who is actually up to date with the rest of society and who has received the news that Java is no longer state-of-the-art.
I also think that these teachers are WAY too quick to rush into Object Oriented Programming (again because it's so "**state-of-the-art**") and not solidify the basics "like what a function is" or "what a variable is", etc. You would be amazed at how many students I've tutored where the teacher is explaining virtual function pointers and still 90% of the class still doesn't know how to pass an integer to a function!
Armani suits and martinis get girls. White lab coats and god-like attitudes get girls. Fat and pizza boxes do not. Coincidence? I think not.
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.
Apologies in advance to those of you who are offended by this, but I don't really care what Bjarne Stroustrup has to say anymore. There are hundreds of thousands of developers and development teams figuring out how to write software just fine without him. Can't we all just forget about the great strides he made in screwing C up and move on?
I've had many different instructors and professors who all taught a bit differently. I remember my CS class, where the TA (likely just following the prof's program) gave us a "middleware" OS, and we essentially had to provide the guts to execute different pre-written programs. That sucked. I left not understanding OS's. Another professor threw compiler theory (the dragon book) at us, and asked us to write a Pascal compiler. I didn't get it (probably because I'm stupider than your average CS student). What would have helped (in the case of the compilers class) is to have us newbies who just learned C write some simple parsers. Then, have us write some basic assembly programs (or MIX, or some byte code). Then, write a more complicated parser - aha! so THAT's why lex/yacc is cool. Then, have us write some assembly, and then more complicated assembly programs. Then, generate assembly from a simple language - aha! that's why we push stuff on a stack, that's why we have return addresses, etc... I think the most effective teachers will understand how their slower newbie students think instead of that grad student trying to fill in some lost undergrad credits. That said, another good way teach is to challenge students and provide the materials and support to let them succeed. My graphics professor gave us a picture of psychidelic mirrored spheres and told us, "write a program that generates this." Man, I had no idea, but I sure wanted to do it, and I did the research, and I didn't fail. Much better than, "here's paragraphs of arcane terms and strange symbols - figure it out or drop out."
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.
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
Um, fuck you buddy! I'm quite proud about not being a confirmist monkey. Us sloppy fat geeks are the ones who embrace new tech and make it do neat tricks, and ultimately that's what kickstarts interest in all things technical. It's the wackos that dig up all the fun stuff.
Thanks for the unusable kludge that is C++, but please go back to your Smalltalk fan club and stay there.
-Billco, Fnarg.com
I remember watching a show on television about doctor's salaries. One of the MD Union guys said, "Hey we pay athletes millions of dollars to hit a small white ball around, so paying 100K for a life saving operation shouldn't be too ridiculous." what's my point? Well, it all comes down to "money". I used to think that those "Learn to program in 24 Hours" books were the worst thing that could have happened to our industry because it has allowed "cowboys" to enter the business and run-a-muck (you wouldn't build a house after reading a "Learn to build a house in 24 hrs" book right?). But then I remembered how I have used short articles and "dummies" books to quickly stick something together to meet a need or a deadline - and I had to because of MONEY!!! Employers have deadlines and need results and they push us to "whip something together". They are not academic institutes that care about the protocol for SOAP etc they just want you to link to that server and grab that info. It seems to me that there is a place for the "technician" and the "academic" in this world. In my experience it has only been with the advent of "architects" that more time and money is spent on proper planning, design etc. I think that it is a good development for the industry and I hope to see more of it, but no matter how much academics jump up and down and rant about this stuff - if there is no buy-in from the business side nothing is going to change. And as long as they can make a buck off of quick-fixes there will be no buy-in.
http://projectleader.wordpress.com
He's nerdy in the extreme, whiter than sour cream.
Well, just about anything can be learned without going to a university. The question is, will someone let you perform brain surgery without a degree? The only reason it works with programming is that producing examples for a portfolio will not kill anyone or cause a meltdown.
There will never be any Software Engineering taught in a CS dept. No way would a Computer Science professor EVER teach such a base, primitive, and unrefined subject such as those dregs in engineering do. Let the $10/hr guys in India do that. Writing code, how insulting!
So... that about sums that up doesn't it. Here anyway, the Software Engineering course is out of I think the Mechanical Engineering department. No CS major would be caught dead taking it tho - it involves teams ;)
Modern Software engineering has NOTHING to do with CS. Once you realize that, you're 99% of the way there. Some colleges now have Software Engineering departments. Hire those students or just an engineer that knows the problem domain, and teach them to code.
- Adam L. Beberg - The Cosm Project - http://www.mithral.com/
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.
Oh yeah?! Well, I don't believe in you, either!
We're geeks... We're the sorcerers of the modern-day world. --
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
What the hell are you all talking about? I have yet to find a "good" programmer. I've been doing software development for over 20 years and I can tell you most are either so full of themselves or can't communicate with any other living soul.
I write software only because it's easy for me whereas most all others I have to work/deal with struggle to make a reasonable recursive function let alone understand business or scientific logic. It is generally a piece of cake for me but then again I have an education in engineering AND computer science.
There is something to say for motivation, or lack there of, by management. They don't want to rock the boat so they let the mediocre stay in the mix and bring the entire quality down.
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+
If you haven't had a C or C++ class, I'm not convinced you know ho pointers work. If you haven't had a Lisp or Scheme class, I'm not convinced you "get" recursion and functional programming. If you haven't had an assembly class, I'm not convinced you can debug anything nontrivial.
If I'm not convinced you can know these concepts, I'm not going to hire you. And if you're not willing to get some useful real-world experience by being a "code monkey" for your first few years, no one sane will hire you.
Socialism: a lie told by totalitarians and believed by fools.
Don't make competition the driving force of extra curricular activities.
A few of my peers and I recently stayed up quite late, and pulled a few all nighters, doing what I have to consider some pretty awesome C hacking. It's the first time I've worked with a team to complete a programming project in meat space, and it was by far one of the most enjoyable experiences I've had thus far in high school. We competed with each other a bit, but not nearly to the extent that often occurs in other activities I'm in. This is mostly because we were all there for the same reason -- because we liked it. Not a single person was there to get something put on a resume, or to get a grade. I think that helped a lot. When you care about a project, you tend to be more cooperative, because you care more about completion than how much credit you get.
Therefore, I have to say -- as a student -- that the challenge here is to give us something we can care about, and support it.
Currently, the only way any of us can get funding/space (mostly space) from schools and parents is if we're involved in some sort of competition. That's because colleges and work places prefer to see "I have proven myself superior to my peers in objective competitions" instead of "I'm going to be great here because I love what I'm doing and will stay up until one in the morning if that's what it takes to get stuff working." And that -- the focus on academic competitions and turning the pursuit of knowledge into a damned football game -- ticks a lot of us off.
Comment removed based on user account deletion
Well, that's the thing, is that, the sloppy geek who also made himself a billionaire is kind of a statement of fact. Bill Gates and Paul Allen, Bill Joy, Steve Wozniak, none of those guys are going to win the cover of GQ, none are really "team" players, and all of them make more money than all of us on this forum combined, and I'm sure that they've had their fair share of pizza.
This is my sig.
...because I wholeheartedly agree. Exactly _what_ has Bjarne done outside of his ivory tower? Has he ever worked in the real world with projects and deadlines and costings? I think not.
If you haven't had a C or C++ class, I'm not convinced you know ho pointers work. If you haven't had a Lisp or Scheme class, I'm not convinced you "get" recursion and functional programming. If you haven't had an assembly class, I'm not convinced you can debug anything nontrivial.
The intro classes covered all of that, the concepts were gone over in class but the programming language was mostly left up to the student to learn (aside from the "you barely know what a computer is" version of one of the classes). No need to waste class time with details that any intelligent person could learn much faster by reading a book and examples (or getting individual help from TAs if they have trouble). These classes were all taken in the first one or two years by any student who knew they were going into CS (along with various math classes and so on). If you think universities teach a couple programming languages then you basically have no idea about what computer science is.
If I'm not convinced you can know these concepts, I'm not going to hire you.
And someone who learned programming on their own is guaranteed to have studied all those languages why exactly?
Then, the B-team takes it over and can't figure out what the heck it does. The code is then doomed to painful process of continuous decay
The B-Team is, in the corporate world, in India, so who the hell cares what happens to it. I think programmers in the West (EU+USA), need to start thinking about what gets them the most features now, and leave legacy issues off to the offshore teams. Clever designs, chopping out the comments, all those "bad rules" that are so ruthlessly enforced to make our corporate masters happy, and for what? To make you perform less productively in terms of features / lines of code? When you will people wake up and realize that dumbing down your code to make up for people with lower skillsets is just a euphemism for sending your job to some guy in India with an MS Cert making $2 an hour. If they want you to train them, then train them, and get paid for it. But don't sit there and not deliver features when they are going to use a bunch of wizards and total crap offshore to argue they do more features than you. Throw the triple pointer at them and inline assembly at them and let them f-- it up.
This is my sig.
That's not all that would "going down" ...
*shoulder nudge*
GET IT?!? GET IT?!?
I'm not expressing any preference for a CompSci degree vs "self-taught". What I'm saying is that most CompSci or "Seftware Engineering" courses today are churning out graduates with no useful job skills.
Students don't "just pick up" pointers, recursion, or assembly-level debugging on their own (at least, not a signiicant percentage of students). There's a lot I can teach a new hire on the job, but they need the fundamentals in order to make that training practical.
Pointers are hard for most people to understand deeply. Someone who has "only used Java" will not grok pointers, and I will not hire someone who is uncomfortable with pointers in the screening process. (Plus, in general, someone who has written a non-trivial program in C++ is going to have a big advantage in getting hired for a C++ job - same with any language.)
No matter how much you know about the theory of data structures, if you can't actually write the code in C to reverse a linked list, what good are you? And a stunning percentage of grads can't seem to reverse an array in place, or for that matter actually know anything about the theory of data structures.
I'm not looking for deep C++ knowledge: if someone doesn't really understand the volatile keyword, or know what the mutable keyword does, I can teach that if/when it becomes necessary. But if you've never written a non-trivial C++ program, that's a problem. And if you've never written a non-trivial program using pointers, or recursion, or have no idea what object code looks like, then I won't even interview you.
Socialism: a lie told by totalitarians and believed by fools.
As someone who has been a C++ developer for 20 years, I have to say: C++ is a language disaster. It's hard to teach, it's hard to manage, it's hard to debug, and it's hard to optimize. Stroustrup has done more to hurt progress in computer science than almost any other computer scientists. Even Java, for all its faults and limitations, isn't as bad as C++.
We used to learn Quality Control, Software Psychology, Logical Methods, Flowcharting, Debugging, best practices, naming conventions, etc.
But around the 1990's that all changed and most Comp Sci programs became diploma mills, even graduating students who cannot even finish writing a program. Professors gave them an "A" for effort even if their program was incomplete and compiled with errors.
The industry reacted by requiring certification exams, but those too became diploma mills, just buy the exam CDs or download them off BitTorrent and remember all trivial questions and pass the exam with 98% and still not know what the programmer is doing.
Companies reacted by only keeping programmers that could write code on time, quality was no longer an issue a programmers became the equivalent of a burger flipper, quick and sloppy wins the job, slow and quality control can get you fired at the next downsizing. Computer Science and IT became another Fast Food industry with Bit Flippers passing themselves off as programmers.
Java and C# were invented because the average programmer was too stupid to understand what pointers were used for, or how to do garbage collection, so they got written out of the new languages and they do their own garbage collection. It seems the practice of close off an object when no longer in use and freeing up the memory is no longer practiced these days.
Programs became so inefficient that faster processors covered up for that. It used to be when a report took 15 minutes to generate, they'd hire me to rewrite the code so it runs in 15 seconds, but now all they got to do is just buy faster computers so that 15 minutes becomes 3 minutes and that is good enough for the managers. So the optimizing code to run faster skill is no longer needed or taught.
Greed and sloth have ruined the computer industry as well as computer classes.
Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
Sure there are exceptions.. The STL.. awesome use of templating and inheritance. However Nethack, which could go pervasive class oriented shows that a standard approach can handle an amazing level of detail.
now lisp is an eye opener. I wouldnt want to do a big program in it, I'm not that smart. But for some reasonable code it is elegant.
Python is the language I have the least issue with.. I'm not a java fan, it's too needy for my tastes. C lacks good string manipulation. Perl has some weird memory issues that crop up. Ruby is pretty damn stout.. I'm pretty happy with it.
ok, rant mode disabled... The whole point is use the tool that does the job simply with a good link in for future modifications.
Storm
Cheerleaders definitely get my "production" up most of the time.
Anybody who invents a language called C++ which ends up like *that* clearly does not know the difference between increment and excrement, and should not be taken seriously when they pontificate about these sorts of things. (Look how badly things turned out last time we took this guy seriously). I drank deeply of the OO kOOlaid in 1988. Turbo Pascal turned me into an object oriented programmer. But like the guy in that Monty Python skit who accused the woman of having turned him into a newt in front of an incredulous mob, I got better. C++ sucks, and there's no fixing it. Screw Stroustrup. /A&M graduate, class of 1991.
You wrote that at quarter to 7 PM. Good programmers have gone home by then.
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.
But I want the right to be a slim, bike-riding programmer with a scotch!
Oh wait, that's called a computer scientist.
I guess it's getting late, as the title morphed in my eyes couple of times:
First time: Blame Startup On Educating Software Developers
Second time: Blame Stroustrup On Educating Software Developers
I thought that can't be right, he is ..for lack of better words.. a mythical figure for CS people.. blame him?! .. click.. Oohh.
As a C language expert (I really am) I say that there is nothing wrong with C.
It is at the processor and memory level of things and that is perfect for
those of us who know how to use it.
C++ is a language designed for accedemics and folks who don't do
real world things. It is over thought out and overly complex.
There is nothing wrong with the C array idiom.
Everything else is built on top of that.
It is the way real memory is in a real machine.
He seems to misunderstand what a University is and is supposed to teach. Which is sad given that he works at one. Universities are about research and theory. Colleges are about the practical. This isn't about whether students are learning what they should be learning at Universities. It's about whether that student should be there in the first place.
I graduated from the University of Essex in 2004, it was ranked 44th out all the 127 universities in the UK, so a very middle of the road uni, nothing like the Redbrick or Ivy League unis
The Computer Science course was heavily Java oriented, there was a bit of C, SQL and *shudders* Prolog too
It taught us everything mentioned in Bjarne's article with the exception of direct memory access, because it's not needed except in some very specific situations (e.g. when Accenture were re-writing the trading platform for the London Stock Exchange and speed was of the utmost importance)
Bjarne spends much of the article plugging his book and talking about the impressions of employers, but when was the last time he spoke to a developer in the trenches? Starting salaries for graduate developers in the UK are appalling (outside of London), the pay is about the same as that for a data entry clerk (I've done both and the latter only involves 2-3 hours work per day with the rest spent looking busy)
Being a good developer demands much more than a 9-5 commitment ESPECIALLY during you first job, if there is no incentive then why bother? Why not just find another career which isn't so demanding and has better rewards?
That's why there's a shortage of good grad developers these days, because the smart ones have already figured out that the game is rigged and it's not even worth playing
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.
As "cheaply" as they'd like... that's the real problem. You want talent? You have to pay for it. Good, cheap, fast... pick any one.
But he's right that sticking talent into a process designed for the untalented isn't going to work. The problem is that most managers like that process because it gives them the idea they are actually in control of something... whether they are or not.
The tyrant will always find a pretext for his tyranny - Aesop
I'd like to see more evidence of this. Sure, some have a natural knack, but that's probably true of a lot of fields.
But I should point out that a lot of (licensed) plumbing is learning intricate standards. You have to learn boat-loads of rules set forth by various lawmakers over the years. Many of these rules may seem arbitrary, but they exist nevertheless. Programming is less about that, at least until you get into big teams that have to learn various methodology standards like CMM or Agile, or Java's libraries :-)
Table-ized A.I.
programming is more like an art rather than engineering. This nice article http://www.paulgraham.com/hp.html
I love how this post just reiterates the content of my original post.
Yet it's +5 insightful and the original post is -1 Flamebait.
Way to go my little slashtards! Mod away!
Mod me down, my New Earth Global Warmingist friends!
I'm not surprised BS is down on Java. It does to OOP what C++ was supposed to have done but instead just crapped up a good problem solving language. To support this I have almost 30 years of programming and architecting on micros, minis, and mainframes running TRSDOS, DRDOS, CPM, MSDOS, UNIX, MVS, AND Linux for large enterprise wide comm servers and client/server apps. I have done 'at the metal' coding in C and ASM for comm servers. My list of languages include BASIC, C, and yes C++ - but I hated it, FORTRAN, COBOL, ADA (hated it), RPG II (hated it), REXX, Intel-Zilog-and Motorola ASM, PERL, HTML, Java, JavaScript, many UNIX shell variants, SQL, DBII, Pascal, and who knows what else I may be leaving out this early in the day. In other words, been there done that. Unless some damn fool pointy hair boss interferes I chose the OS and language to best solve the problem. And right now if Microsoft is the answer then the question was not phrased properly. I can even code in C# (Microsoft's feeble attempt to undermine Java) but use Mono on UNIX/Linux. So I feel more than qualified to say to Stroustrup, "Sit down and STFU". You had your shot at language developing and screwed up a lot of things. MS Windows instability over the years is a prime example of using C++ when C was a much better choice to build an OS. You may have a different opinion. I especially want to hear from Visual Studio coders who can only do VS BASIC or C++ on Microsoft and think they are programmers. When you have earned your Silver Back status and designed and built applications handling millions of dollars in transactions daily running for 6 to 8, and in one case almost 10 years error free, or apps doing 1,000s of transactions hourly without a glitch, then come sit down and we'll do lunch.
Too lazy to create a sig...
This site isn't so bad. Reddit on the other hand is terrible. You can say something that's 100% true, and if the herd/mob mentality doesn't like what you're saying, you get modded into oblivion.
-- http://ninthagenda.com/
but GREAT programmers are just getting started...
Plumbers earn a considerable amount more than than programmers though.
-1 disagree is not a modifier for a reason. -1 troll, flamebait, redundant, overrated are NOT acceptable substitutes.
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
you can do that in c++? care to show me how?
One fundamental mistake in the education system is that there is no clear distinction between education for becoming a computer scientist, education for becoming a software engineer, and education for a programming/IT position.
In order to be a computer scientist, one has to learn: lambda calculus, automata, compilers, parsers, algorithms, binary logic, set theory, discrete algebra, graph theory, and other stuff mostly related to mathematics.
In order to be a software engineer, one has to learn: software development methodologies, the software cycle, analysis and design, formal methods, testing methodologies, software cost analysis, etc.
In order to be a programmer one has to learn: programming languages (Java, c++, C#, C, javascript, etc), IDEs (Visual Studio, Eclipse, etc), databases (SQL Server, Oracle, MySQL), protocols (html, xml, sql, etc), other tools (web servers, application servers, web browsers etc).
The 3 categories are all related to each other, because they are for computers, but they should not be mixed; they are different roles. Unfortunately, most education programs do not separate them, and thus people get confused and choose courses that are not suitable for them. Eventually, these people get bored, educated badly, and when they enter the market, they can't serve the needs of the market...
(disclaimer: I have an MSc in Software Engineering)
All software development methodologies are extremely bad:
1) they are boring.
2) they are extremely complex.
3) they do not produce results fast enough.
4) they require specialized tools.
5) they are not precise enough.
6) produce extremely large amounts of paper work.
In other engineering disciplines, methodologies are extremely well defined. For example, in order to design a bridge, the civil engineer has to take certain steps in a specific order. A civil engineer does not have to battle his/her methodology all the time.
In software engineering, software development methodologies get in the way. The software engineer has to constantly think of how to work around the methodologies, because the methodologies are worthless.
This is a big problem in teaching software engineering. Which methodology to teach? there is no clear best approach, and software engineers are taught every method in existence. This is confusing, to say the least; when these engineers enter the market, either they are unable to apply their half-assed knowledge of software engineering methods, or the methods are so costly that their managers do not allow the engineers to apply those methods.
Due to all the above, software development is a craftsmanship, an art, and not an engineering activity. The academia is not interested in solving the problem because it's not research and only research pays their bills, the market is not interested in solving the problem because the market is interested in results, and therefore the problem is perpetuated...and the poor software engineers/programmers are stuck in the middle...
There is more to "flamebait" or "insightful" than the basic points you make.
Yeah, it's called Viagra.
Ironically, everyone I know who ever took a class from him says he was a bad teacher. In the past he has taught a portion of an introductory engineering class. Everyone says that he talks about stuff way beyond their understanding, leaving them completely lost. (Admittedly, I never got the chance to witness this for myself.)
Am I the only one who's shocked that Stroustrup is an Aggie?
My other sig is extremely clever...
Don't forget about those of us who no longer have time. I finished two years of college when my first son was born. I had to pay the bills, so I had to get a job to take care of my family. When push came to shove, I had to drop something. School was the least important of the three choices (family, work, school). Luckily I had been working on some of my own projects and got into the industry, but I still wish I could go back and learn a lot more things. I try to learn things on my own as well, but that takes time away from my family so I don't spend as much time as I'd like to. Maybe after my kids are older I can spend more time for myself, but they're only babies for so long.
This is spot on correct. Everyone wants the experienced developer, but few are willing to punt the money to train said developer in development operations.
One wonders if the future of development is going to rely on students doing their own small projects for a few years out of college before any company will touch them (in other words, will 90% of graduates need to form startups just to get experience that larger, more experienced companies look for?)
Sure, it could be a poor search or interview, but have you ever considered bad interviewers?
I've encountered more than one interviewer who seem to believe that the best way to identify a candidate as being "good" is to give them a test from a second semester programming course and see if they remember the definition of something. It begs a question: Do you really want a programmer who is completely reliant on memorized information? I knew a guy in my courses who could give you the textbook definition of OO to the letter; problem is, he couldn't actually IMPLEMENT it to save his life.
Logic and proportion fell sloppy dead decades ago, but I have to admit I recognized myself in Wayne Knight's portrayal of Dennis Nedry, from Jurassic Park. He was my White Knight, with brains sufficient to engulf six million lines of code and a startlingly arrogant take on who gives a damn about conspiracies no one knows about yet. Is that the frantic largesnack coderboy Stroustrup is aiming his adhesive spit at? Life large in memory, Dennis, Iron Byron of Defective Codebase!
``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
I don't disagree, my original point was simply that universities teach a lot more than just programming programming and, at least my university, often expected students to learn further programming languages (and their very specific details) on their own. As I said in my last post, good universities will also teach all the things you mentioned but that's only a starting point.
That there are tons of shitty universities with shitty students is an inevitable fact of life and happens everywhere. So a degree on it's own is only a piece of paper and doesn't really guarantee anything. If you're familiar enough with the university it's from than you might know what it requires for graduation but even then they'll be exceptions.
I'm also sure a good percentage of the good students at my university went for graduate degrees and/or aimed for positions other than run of the mill development (specialized software, research, modeling, etc.) which removes them from the ones you see. If they're aiming for software development than they'd finish with probably a year or two of actual development experience (projects, internships, etc.). It's also possible that the positions you're offering aren't comparable to ones that good students can get at other companies.
We don't need cheerleaders ... we need fluffer girls!!!
Take a little BJ break in the morning and the afternoon to keep the edge off and keep you motivated. I'm betting sick days would fall off to near zero. :-P
Cheers
Lost at C:>. Found at C.
I'm uncomfortable about how close this new educational program sounds like a trade school education. A person going to a university for a programming education should be looking for more than "how to program". Programming is just a means to end. The question is, what is the end.
I believe there are just two ends that a person pursuing a degree in programming would desire. One is to learn about the math/logic side of programming. Algorithmic efficiency for the diverse set of problems that emerge in programming would be the chief subject of study. I would classify this pursuit as computer science. The other end would be the social side of programming, that I would classify as software engineering. It would be concerned with constructing frameworks that a large group of people would use to create programs.
I do also think there should be trade school courses for programming. The computer scientists and software engineers should make sure this could be completed in two years. This is probably the biggest failure of those involved in programming today. You shouldn't need to have a four year degree to do simple programming. I personally have wasted too much of my life writing programs that should have been available or connectable to my current environment.
You win +100 Internets for having a Derek and Clive reference in your signature! You cunt.
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.
Then how can a university justify charging people to study there for 4 years if they don't gain any useful work skills? Universities weren't built so you could slowly drive through one and get a degree from it -- setting you behind your career market by 4 years. Basically, all a 4-year CS degree does right now is hand you a wrapper to put around your head that says "SUCKER." For some reason I can't comprehend, people think that it's the way it should be! It almost causes me to question my sanity. After all, if I can see the insanity in everyone else in the whole world, that probably means that I'm the crazy one! If 4 years of schooling can not compare to 1 year of work experience, then the schooling needs to change.
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.
This wasn't about a matter of preference or comfort. It was about a matter of flexibility and ability. Can he program in Open Source as well as he can with Microsoft software? Would he become absolutely paralyzed until he downloads his favorite instant messenger? Not a question of whether he wants to write accounting software in notepad, but whether he can. Formal education shouldn't be about pigeonholing these kids -- that's the one educational advantage it should hold above going to work and getting paid for 4 years verses going to school and paying for 4 years.
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!
If "mentoring a junior programmer", for you, is synonymous with making them forget the last 4 years they just dumped a quarter million dollars into and teaching them what they should have been taught, then you're already dead :(
I am the richest astronaut ever to win the superbowl.
Uh, yeah, actually you can research and learn brain surgery and nuclear engineering without a university, too. In fact, you can research and learn anything without a university. It's all written down in books, which you can get from a library and read. The only thing that sets apart brain surgery and nuclear engineering from programming is that there are laws against performing surgery without a degree or operating a nuclear reactor without a degree. I look forward to programming catching up in this regard.
Proud neuron in the Slashdot hivemind since 2002.
I believe so. If not for college, it never would have occurred to me to learn calculus, or linear algebra, or probability, or NP completeness, or compiler design, or pipelined processor design, etc. etc. etc.
Proud neuron in the Slashdot hivemind since 2002.
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.
If you do the "team sport" part right, then you can have multiple computer geniuses, all semi-buried in their work for long periods of time, all cooperating to produce a single product. That's where I am right now.
Usually the big thing isn't the degree but the certification (boards, etc).
You may be surprised to find out there are many, many programming certificatons.
Granted, they typically aren't required by the government for work in a specific field.
It would be interesting to see how something like that impacts the software industry.
Mod me down, my New Earth Global Warmingist friends!
Reproducing how?
I'd love to see a meaningful programmer certification to come along (I've got a couple of java certifications, myself, so I have a point of reference on meaningful. Hint - java certifications ain't).
Proud neuron in the Slashdot hivemind since 2002.
I'm all for universities teaching useful job skills, but let's be realistic. You're describing a set of skills that together mean "senior developer" to me. Someone with 5 years real-world experience should have these skills. Without internships, an undergrad degree being equivalent to 1 year's practical experience sounds right to me. An engineering degree (in any field) is about learning the tools (conceptual and practical), and getting the breadth of understanding that means you don't get stuck 10 years into your career. Learning what sorts of problems are going to have an answer in their algorithms book, and that the programing tool you choose makes a huge difference in what problems are easy and what problems are hard.
Of course, the interns I've worked with recently knew *nothing*, but I can deal with someone smart who at least knows the basic syntax of the languages we use. Estimating project completion times and vetting design docs are things I'm going to hold the team lead responsible for, not the junior team members.
Socialism: a lie told by totalitarians and believed by fools.
University education provides something job experience cannot: flexibility. A decent CS graduate should be able to pick up how to use whatever tools a particular employer uses fairly quickly. Someone who's spent that entire four years just learning to use a particular set of tools will have more trouble learning to use a new set. The conceptual CS might be learnable on the job, but people tend not to learn it very fast there.
They aren't there to be trained for the specific openings your company has, so go call the whaambulance.