(Note: This is the first part of a whitepaper I wrote a couple of years ago which I never had a chance to publish in full. I plan to serialise the major sections into separate blog articles here.)
Over recent years, there has been a quiet renaissance in a style of programming once isolated to niche fields of academia and computer science: functional programming. Functional languages like Scala, Haskell and Clojure are attracting significant attention from developers, and aspects of functional programming are now established in many programming languages/platforms, including the industry heavyweights Java and C#.
But what is the catalyst for this renaissance? The increasing scale and sophistication required of custom software development has led people to reprioritise the benefits of functional languages (e.g., immutability, expressiveness) as a way of increasing code quality, boosting development productivity and reducing complexity and risk.
Alongside this rising popularity, organisational barriers to entry to functional programming have been lowered by the availability of these languages on existing enterprise development platforms (e.g., Clojure and Scala running on the Java Virtual Machine, and F# on the Microsoft CLR) and in some cases augmenting existing languages, as Scala has done with it’s hybrid functional/object-oriented orientation.
A third factor contributing to this increased interest is the cyclical nature of IT in general, as subsequent generations of practitioners rediscovering old approaches. Agile software development principles hark back to the days before heavyweight command-and-control process took over the IT landscape. The NoSQL database movement is “new” only in the sense that many people have forgotten that non-relational databases were once a viable choice for many data storage requirements.
See “Resurgence” for more information on the driving forces behind the popularity of functional programming.
So why should businesses care about this revolution? Isn’t the choice of programming language an arcane detail in a world where most software can be accessed as a commodity service in the cloud? In some cases this is true. Every business has certain capabilities that are essentially the same from one organisation to the next. Examples might be maintaining the general ledger or managing payroll. The software to support these capabilities can be acquired off the shelf and adopted with little or no customisation. The programming language those systems are written should not be a concern to the consumer. On the other hand, every business depends on capabilities or processes that differentiate them from their competitors. Since these processes are unique, there is—by definition—no off-the-shelf software to implement them. In a business landscape that is increasingly technology-dependent, the ability to continually develop and maintain custom software ahead of competitors is a universal requirement. This is where functional programming languages come in. Choosing the right language for the job can make a business more responsive to customers, allow it to adapt to market pressures faster than competitors, and attract a different class of technical professionals.
The benefits of building expertise in functional programming are twofold:
- Deliver more robust and scalable software solutions
- Position your organisation as an employer of choice in the marketplace for high value developers