I was reading an article on the Wall Street Journal this morning about Microsofts restructuring efforts (Google Cache, gotta love it... http://188.8.131.52/search?q=cache:_t7JxwmjanEJ:online.wsj.com/article/0,,SB112743680328349448,00.html%3Fmod%3Dtodays_us_page_one+&hl=en), when I came across this little gem…
“Old-school computer science called for methodical coding practices to ensure that the large computers used by banks, governments and scientists wouldn't break. But as personal computers took off in the 1980s, companies like Microsoft didn't have time for that. PC users wanted cool and useful features quickly. They tolerated -- or didn't notice -- the bugs riddling the software.”
Hold the phone, are they actually suggesting that the general population didn’t notice or didn’t care about the software industries piss poor programming practices? If you really think so, try reading Slashdot and that will change your mind.
The article brings up some great points. People have too often discarded older programming practices and languages in favor of “The Next Big Thing ™”. Take Pascal for example, a language that I feel is dieing before its time. For a high level language it can do all the things that C can do, but adds in some nice bonuses like bounds checking, and a string type to keep those nasty buffer overflows from happening so often. Instead of utilizing that, the industry created languages like C# and Java. Unfortunately Pascal is not as sexy as C/C++, so it kind of got thrown to the wayside, which is a shame because I liked Delphi. There is also COBOL, whose batch processing capabilities far exceed those of C. Even the worse written COBOL program is easy to read and understand. Newer generation programmers can learn a thing or two from COBOL, where you had to plan your program before writing the first line of code. Remember, no one language is better than another overall; it’s choosing the proper tool for the job.
But the problem goes much deeper than the compiler wars that have raged over the years. Modern CS and IS degree programs do not spend enough time teaching proper fundamentals. In fact, most spend 15 or 20 minutes talking about Pseudo-code and flowcharts for program design. In my college days, I only had one class that dedicated 1 measly assignment to creating a crappy flowchart for a program, and it didn’t even get moved into code afterwards. I was fortunate enough to have learned programming from old school CS folks before ever stepping foot into a college classroom, otherwise I would have never learned proper programming principles. Programming is more than just learning languages syntax; it’s about learning proper fundamentals. Consider this, when first learning C; a programmer is introduced to IO with something like this:
fgets(input_buffer, 20, stdin);
And what’s worse, even if they did, they wouldn’t know why the second snippet is a better example than the first.
Project management also has a lot to do with why systems fail. I found many of the things in the article on this topic disturbing. The concept of throwing engineers into a “bug jail” seemed kind of wasteful. If their testing tools can detect bugs like that, why not fix the code and teach the engineers what they did wrong rather than losing productivity time? This cannot be good for morale. I found this particular line to be disturbing
"Mr. Valentine, the enforcer, shot back, "Is your code perfect? Are you perfect? If not, you should shut up and support this effort,""
While I am usually the first to dismiss the “feelings” oriented policies of business these days, I have serious issues about berating an individual publicly for asking a question. Granted, the context of the question by the attendee is not indicated, but you have to wonder, why not just answer the question. If management cannot answer simple questions as to the merit of an initiative, then they have no real business leading it. Failure to answer a fundamental question such as this fails to command respect, and blowing up verbally at an employee does even less for the overall morale of your project team. While I agree that changing the corporate culture there would be good for productivity, I am not sure that this is the way to go about it. There’s a lot of speculation going on as to what’s really going on in the halls of Microsoft, but if they are really cleaning house of bad programming practices, Vista might actually be something worth looking at. I will wait and see...