Age does have some benefits, though they are sometimes hard to appreciate among the aches and pains and general tendency for complaining about…well, getting older. In some respects, I was fortunate to begin my career in technology in 1980 just when things were getting interesting for that field. It would be more than a decade later before the 'WWW' and internet came online, but the foundation was being laid back then for both the hardware and software that would power the next generation of technologies.Behemoths such as IBM and DEC were leading the way. Mainframe computers still roamed the data centers and the first IBM PC was still under development and wouldn't be released for another two years. Software in those days was still something of a mystery and seemed to lag behind the strides being made on the hardware front. Compilers had been around for a few decades but aside from COBOL, FORTRAN, and several varieties of Basic, much of the programming for the first generation of microprocessors was done in assembly code. The advent of the PC along with the first Apple home computer would pave the way for broader use of higher-level languages such as C, Pascal, and Basic. It wouldn’t be long before these languages moved beyond creating trivial apps and computer games for hobbyists to becoming the backbone for building important applications for both the consumer and business markets.During the 80s and early 90s, the discipline of software development was anything but disciplined. Enough “spaghetti” code was created back then to overflow an entire chain of Mama Lucia’s. About as structured as most coding efforts got was scrawling out a flow chart and that was if you were really disciplined. Thankfully, a few pioneering individuals saw the need to impose some structure on the practice of software development and stepped in to fill the void.The word “structured” would become prominent during the 1980s. A new approach to software design emerged known as Structured Analysis and Structured Design
(SA/SD). Blazing a trail for this concept were Ed Yourdon, Larry Constantine, and Tom DeMarco. The entire process otherwise known as the Software Development Life Cycle (SDLC) was broken out into a series of stages. Not too unlike the OSI model used in data communications. It was the first attempt to corral the process of software development into a defined methodology. The goal was standardization of approach eventually leading to a higher-quality (bug-free) product.A parallel concept emerged around SA/SD known as Computer-Aided Software Engineering (CASE). CASE had actually been around since the late 1960s, but it now had a development methodology to propel it forward. CASE had originally revolved around the mainframe, but with the decline of mainframes and the emergence of the PC, it shifted to a suite of tools based around programming languages. I recall the excitement about how CASE would eventually lead to software that would essentially write itself. The mid-1980s and early 1990s were indeed heady times in the field of software development.The support from CASE
spans the entire SDLC and has three core components:
- Tools – support specific tasks within the SDLC ranging from analysis modeling to design on through to configuration and project management
- Workbenches – integrate two or more CASE tools to support software process activities. Examples are modern IDEs such as Eclipse and Microsoft’s Visual Studio.
- Environments – the whole “ball of wax” consisting of a collection of tools and workbenches to cover the entire SDLC.
The maturation of Object Oriented Analysis and Programming (OOA/OOP) during the 1990s, led to the development of methodologies specific to OOP, which if they didn’t directly build upon SA/SD, certainly drew inspiration from the earlier methodology. The Unified Modeling Language maintained by the Object Management Group (OMG – the other OMG) is an example.IDEs such as Eclipse and Visual Studio and application programming frameworks such as Microsoft’s MFC platform for developing Windows applications in C++ allowed developers to create a skeleton application right out of the box that could then be extended and customized into a full-fledged application. In the case of MFC, it generated a lot of code that did little more than display a single window. But it was an example of software writing code for a specific application no matter how trivial.CASE tools are divided into two categories defined as “Upper CASE” and “Lower CASE.” The former are typically tools devoted for the analysis and design phases of development and consist of diagramming tools and report and form generators. Whereas, Lower CASE are tools that support the generation of database schemas, program generation, testing, and configuration management.Many modern IDEs integrate aspects of both lower and upper CASE tools. It’s not uncommon to find class diagramming tools, code completion, code generation, CMS platforms such as SVN and Git, debugging tools, and automated testing tools such as unit testing built-in to many IDEs today. There are also IDEs specifically built for mobile software development such as Eclipse and Android Studio on the Android side and Xcode for Apples’ iOS. There is even cross platform support in the Xamarin Studio mobile IDE for both Android and iOS.Yet, despite the impressive evolution of CASE tools we still don’t have any that will spit out a complete application of any practical use. Software developers are still in high demand despite the outsourcing trend of recent years – at least in the U.S. In addition, the array of professionals required to develop and support software which includes business and system analysts, the full range of software developers, test and support engineers, configuration management specialists, tech writers, and project managers are still very much needed. Their positions are secure for the time-being without the fear of being made obsolete by automation.What CASE, and perhaps more importantly, software development methodologies have accomplished, is to bring a degree of discipline and professionalism to the practice of software development. At the end of the day, methodologies govern the practice of software development and CASE provides the tools to both guide and assist those who crank out code day after day. The existence of such practices and tools haven’t eliminated spaghetti code, but if we’re lucky, they’ve shrunk the portion size (and carb count) from a Buca di Beppo family-sized platter, to a more modest side dish.