It's always a good time for a new paradigm in software development and one of the latest is concept programming. Originated as a private project by Hewlett Packard (HP) software engineer Christophe de Dinechin in 2000, interest in concept programming is on the rise following publication of an updated description late last year.
Dinechin says that concept programming helps to cope with the increasing complexity in software by offering a new way to look at how software is conceived and created.
"It's an idea that applies at lots of different levels from assembly code and C programming up to high-level things like wikis. The reason it works for all these environments is because it focuses on the difference between what is in your head and what ends up in the code," Dinechin told Register Developer in an interview.
Based on the principle enshrined in Wirth's Law that software gets slower faster than hardware gets faster, Dinechin sees the software creation process falling behind the pace of hardware development. He argues that concept programming is the next step towards reducing complexity.
The basic idea is simple: program code should reflect the concepts it represents - or it should do what it says on the tin. Unfortunately this simple statement hides a world of complexity, and this is what Dinechin has spent the last eight years trying to unravel.
As part of this process he came up with a set of abstract, pseudo metrics to help apply concepts to software development. These include syntactic noise, which measures the visible representation of the code (the tin), and semantic noise, which measures how accurately the code represents the concept behind the application (the contents of the tin).
Dinechin's day job working on development of HP's Integrity virtual machine technology has meant progress has been slow. In 2000 he set up an open source project to develop a programming notation called XL that could represent what he sees as the important ideas in concept programming.
"The limitation with existing notations was that it was hard to find ways to add elegant extensions to them. You can extend languages like Lisp and its derivatives - but the problem is to get the extensions to look the way you want them to," Dinechin told Reg Dev.
He added that the deterministic structure of other programming notations goes against one of the important principles of concept programming - flexibility: "It's down to the old saying that, to someone with a hammer every problem is a nail. When you program in Smalltalk, for example, everything looks like an object. With XL, I wanted to create a notation that could be used in many different environments."
One of the intriguing aspects of XL is it has no fixed keywords - relying on what Dinechin describes as "shape": "XL does not use keywords - only a single syntax which can parse just about anything. The look of it is standard, it relies on a very small number of parse trees and instead of keywords it is based on the shape of the parse tree. This means you can play with it and experiment by adding things to it quickly."
He went on to say he hopes the freedom inherent in the XL definition will attract others to build additions under the open source process: "My hope is that we can create an ecosystem around XL. I would like someone to introduce additional things - like aspects, for example."
When Dinechin published the first fruits of his work on XL in 2002 it provoked a heated discussion among developers. He has used the input from this and other online discussions to refine the definition of concept programming and, importantly, its practical application to software development.
"I apply some of these ideas in my day job - but I would like to see concepts expand further into the developer community. There are some signs of it filtering through - in C++ for example. But the use of concepts there is limited to a means of naming a category of templates. This is only a small subset of what I mean by concept programming," Dinechin noted.
Dinechin emphasized his view of concept programming should not be confused with concept-oriented programming - an idea proposed by Brian McConnell in 1999. The term concept-oriented programming has also been used to propose extensions to object-oriented programming in a recent paper by Alexander Savinov of the University of Bonn.®