The complexities of programming

Hi ho. I figured I’d spread my less than divine knowledge about programming to you. With various discussions going on about testing and programming I thought I’d offer some perspective on what goes on during software development. These are general rules and most corporations tend to follow them, although there are exceptions.

Okay, first off programming is not new. Not really. Back in 1946 Konrad Zues, a German engineer, developed the worlds first programming language: Plankalkül, while hiding in the Bavarian alps waiting for the war to end. He uses it, amongst other thing as a chessopponent on his Z3 computer. The language has even tables and data structures. Plankalkül is however buried in some German archive now. Still the first instance of software engineering. It wasn’t until about 1954 when IBM created FORTRAN that real programming (using a readable high level language) with COBOL following in 1959. Various other languages are created (including BASIC in 1964, yup it’s older than I am) with the “C” language coming along in 1972 by Dennis Ritchie. Okay, enough of the history lesson.

So what goes into programming is essentially a co-ordination of efforts anywhere from one to several hundred people. Yes, even I have some co-ordination when I write software. Of course everything begins with a design. An idea. A thought. This manifests into software by writing code to form the application (or applications). There are dozens of methodologies as to how to code, how to write software and nobody follows only just one. Some people just jump in and start writing with no idea what they’re doing or where they’re going. Others follow a precise plan and follow it to the letter, filling out dozens of forms just to requisition a single line of code change. Sometimes I feel like this at work, but usually we all fit somewhere in the middle. There usually is a test plan that is followed (at least by the programmers) and sometimes QA (Quality Assurance) is included and gives the program a whack or two. A cycle of life as it were, test, code, compile, repeat. For the most part what you end up with is a stable, complex piece of art. Sure you can argue the stability question and not everyone calls it art but generally if it starts up on at least one persons machine it works (or at least worked at the time). Theres an old joke about blaming QA on something while programmers just look innocent saying “It worked on my machine”. Never seems to work for me.

Anyways, it’s a complex beast, especially when it comes to something like The Sims that has millions of lines of code. Dozens of people have had their hand in it, everyone is trying to navigate around maintaing or enhancing it. There are deadlines from suits that have no clue how long it takes to completely test something. There are 10 million combinations of hardware out there to make sure the system runs on. And on and on. No, I’m not making excuses for anyone here. Programming for the Apple platform is a cakewalk compared to Intel development. You know exactly what hardware you’re dealing with and the operating system is pretty much rock solid. Windows, well that’s another story. I’ll put something in perspective here. Train control software I write takes 6-8 months to completely test everything. That’s top to bottom, 4 full time testers. Sure, if we screw up in programming we can kill someone being safety critical and all. 6 months however is impossible to justify to the business. You can’t tell them they have to wait that long for a product or an update to a product. Okay, game programming isn’t safety critical. I don’t think anyone is going to drop dead playing The Sims, but there are sometimes unrealistic deadlines imposed, strained resources and just plain mistakes. Software is inherently buggy. With all the configurations to support and the complexities of the application, mistakes are bound to happen or slip through testing. It’s not an exact science. What worked yesterday might not work today on exactly the same machine. Programming is not a magic bullet that is 1, 2, 3. It’s a series of complex motions all arriving at a common end. Hopefully that end runs as smooth as it was planned, but there are bumps along the way. Just relax and ride with the bumps and don’t jump out of the car at the first sign of turbulence. It’s a tough job and the guys that write software as monolithic as The Sims have done a great job so far.