Sunday, April 27, 2008

Top 10 Advances in Software Development

I started my professional programming career over 20 years ago on the Commodore Amiga. The Amiga was a state-of-the-art personal computer, with a proprietary operating system, windowed GUI, and dedicated sound and graphics chips when the IBM PC was still saying, "C:\DOS RUN."

The Amiga computer was fast for its time, but maddeningly slow in hindsight: 5-10 minutes to compile a typical development project. Hard drives were still external, bulky and expensive at $500 for 30MB. The Amiga system APIs were plentiful, massive and complex, like the Win32 APIs that followed. I wrote software in C, using a programmable text editor and the "Make" tool to build projects.

Business Software
A lot has changed in two decades. As with most things in this business, software development tools and systems are now better, faster, and sometimes cheaper. But what are the most important changes?

In the spirit of David Letterman, following are my "Top 10 Advances in Software Development." These are the things–from my perspective, in increasing order of importance–that have most improved software development and entrepreneurship over the past 20 years. I encourage you to reply with your own Top 10 list.


10. Modeling Tools
Of all the items on this list, modeling tools still have the farthest to go before they become the essential and dominant part of the software development process that they should be. There are some promising candidates, but most modeling tools are still too "heavy," expensive, and disconnected from the code and overall development process. And while the tools are getting better at modeling classes and use-cases, when it comes to writing logic and the "guts" to most functions, code is still the way to go.

9. Automated Build Tools
The C "Make" tool in 1985 was quite powerful for its day, doing much of what the automated build tools can do today. However, today's tools are graphical, making it far easier to create complex and logic-driven build routines. Modern tools are also better at handling errors, and can restart the build process in the middle, automatically determine project dependencies, interface with source control systems, and manage the work of a virtual team across the Web.

8. IDEs
Integrated Development Environments (IDEs) combine all of your programming tools together in one application, with a consistent user interface, macro language and documentation system. IDEs make good on the promise of windowed GUIs, enabling developers to create a comprehensive "dashboard" for the software development process.

7. XML
Sometimes the greatest solutions are the most simple. XML represents data in a human-readable and generally-universal plain text format. Years ago this wasn't possible with limited storage space and computing power. But now most modern software uses XML to store and exchange data. As a result, we are seeing an increase in mashups, where software is combined in new ways to provide more powerful solutions.

6. Faster Processors
When I first started programming professionally, building an average-size development project would take 5-10 minutes. I'd spend an hour or three coding, then start the build and go grab a Coke. Now I can make a change, build the project in seconds, and almost instantly see the results and debug any problems. Not only does this save time by not having to wait around for the project to build, but the rapid-feedback cycle results in faster solutions while debugging.

5. Microsoft Windows
Say what you will about Microsoft, but kudos to M$ for delivering a world-dominant computing platform, offering software entrepreneurs such as myself a market pool 600 million strong and expected to hit a billion by 2010. When you have that much attention and opportunity focused in one place, you are going to see the incredible advances that continue to fuel Moore's Law and drive our information society.

4. Code Outlining
Code outlining is using XML tags to organize source code into collapsible sections and hierarchies. Arguably the most controversial item on this list, this is also where you'll find the most personal bias. With my cubital tunnel, every mouse click and key press can be a literal pain. Code outlining can collapse a 50-page code file into a single screen and save hundreds of clicks and endless scrolling.

3. Code Sharing and Google
In the old days, if I ran into a programming roadblock, I had to rely on the vendor's limited documentation or hope that one of my programming buddies had encountered a similar problem. It wasn't uncommon to search for a solution over weeks and even months. Now with Google, other search engines and code-sharing sites, millions of "buddies" are accessible in seconds. If someone somewhere has encountered a similar problem, chances are they've shared their solution on the Web, and Google will find it.

2. Managed Code
Write the code and it just works. That's what I love about managed programming languages and C# in particular. Sure, my code may have logic errors that I need to debug. But I am no longer spending hours needlessly chasing pointer-to-pointer bugs and memory leaks found in C++, for example. With managed code, the focus is on business processes and logic, not programming language behavior and side-effects.

1. World Wide Web
It's interesting that the greatest advance in software development isn't development-specific. The Web has transformed nearly every aspect of a software development company, greatly simplifying many tasks and making it possible for small companies to thrive in the global marketplace. For just a few dollars a month, a software entrepreneur can market, sell and support his products and services from anywhere to anywhere the Web will go. This improves productivity, spurs innovation, and raises the overall global economy.