Has programming stagnated?

Over at Coding Horror I found an article linking to Alarming Development which was hosting an article claiming that programming as reached a dead end.

The article makes it seem like no progress has been made in the area of programming since the “dark ages”. Yet I recall writing in assembly for mainframes, poking memory locations to display graphics, creating UI’s with curses (the screen library, not angry comments) and manipulating databases with procedural code.

Today I think most programmers understand that the relational database model (even as poorly implemented as it is in SQL databases) is a huge productivity amplifier. Yes, we have a few “everything in XML” fringe programmers who haven’t got the memo, but for large data sets shared between many systems internally, a solid relational design will reward you handsomely.

We have screen building tools with various levels of binding (personally, I find “bound controls” to be scary if they aren’t bound to business logic handling objects instead of directly to the database, but maybe that is just me). As others have pointed out, these GUIs can be data driven. (I do wonder about the comment about the GUI driving the schema though… I’m not sure I would want to write a *different* app against that schema. However, maybe I’m missing illumination on that topic.)

Of course, those are just tools. We have also seen advances in the infrastructure of languages themselves. From assemblers to compilers to interpreters to just in time compilation, the process of converting text to executable has continued to improve in terms of round trip and sophistication. From line editors to screen editors to editors with shell capabilities to IDEs to form building IDEs to the current kitchen sink refactoring IDEs, our editors have learned more about what we want to do and help us do it. Debugging has moved from liberal printf() sprinkling to inspection on the fly to being able to recompile on the fly altered code.

The languages themselves have evolved, from spaghetti code to procedural to object oriented (with a dash of functional being tossed in as seasoning). Our ability to express code has been improving and becoming more automated in regards to accuracy. (I do look forward to the day when provable code comes out of “the proof is longer and harder [and independent of] the code” nightmare it currently resides in). The Python crowd already knows the joys that C# is looking to provide (lambdas, closures and other functional goodies on top of a solid procedural base). Meanwhile cross cutting (aspect oriented) code allows a type of code reuse that is otherwise difficult to achieve.

Now, maybe all this progress just isn’t enough for our “Comrade”. Actually, it isn’t enough for me either: I want a pony too. However, I don’t believe programming is at a dead end: there are too many pieces of the puzzle that aren’t integrated fully into the “mainstream” languages for me to think we are at a stand still. I see functional programming ideals, aspects, domain specific languages and many other “they exist but are not part of the mainstream languages yet” pieces of the puzzle falling in place in the next decade. Likewise, the surrounding tools will continue to improve with countless tool changes that I probably can’t even envision yet.

Category: