Living in a software world of objects
Even though it was a lifetime away in 1989, I distinctly remember learning the C programming language using the excellent book by Brian Kernighan and Dennis Ritchie (quite aptly and unimaginatively called C Programming Language) as my guide. I thought the language was beautiful and eagerly joined The Santa Cruz Operation in Watford, just outside of London, to test my skills on System V Unix.
It was only a year into my career as a professional software engineer that I read a book that changed my life, “Object-Oriented Programming: An Evolutionary Approach” by Brad J Cox. It may surprise many of you to discover that Brad invented Objective-C, the language of choice until very recently for iOS and OS X. Brad transformed the “beautiful” C language into something extraordinary, he introduced objects. I was hooked. It wasn’t just a new programming language, it was an entirely new way of thinking about programming. I could now model the world more faithfully by creating software objects and having them undertake tasks or actions just like in the physical world.
Although I was now dreaming of a world of object-oriented programming I was still programming in C. Then, to my delight, fate came knocking at my door in the form of a bank I had never heard of called Swiss Bank Corporation (a name that needs no further clarification). SBC was looking for Objective-C developers to build trading systems for the NeXTSTEP computer. I joined SBC on August 17th, 1992.
As I delved deeper into the art of object-oriented design and programming, my entire thinking changed, I experienced a paradigm shift. The power of object-oriented design and programming allowed me to create better and better software, software that was easier to maintain and understand. I now shared a common language with the traders who used my software. I talked about the objects expressed in my software which mirrored the real world the traders occupied. The internal design of my software continued to evolve to better model the business of derivatives trading.
My discovery of object-oriented programming directly enhanced my ability to create awesome software. Software created without objects quite simply wouldn’t have been as good in whatever metric you care to use. For example, my software was easier to change, easier for new developers to understand, less buggy and more flexible because of the use of objects. So I’m perplexed but the recent lack of enthusiasm for object-oriented programming amongst developers, especially more junior ones.
Functional programming seems to be all the rage now. I confess I’m no expert at Functional programming and I am sure it is excellent for some domains like analysing data. However I would be very surprised if a Functional programming language was a better choice than a object-oriented programming language for a general purpose application. I doubt one could construct a coherent model-driven design using a Functional programming language, or perhaps I’m wrong - it wouldn’t be the first time.
If you are a software engineer who has moved from object-oriented programming to Functional programming because of its superiority then please enlighten me and my fellow dinosaurs on what we are missing out on.