Home | About | Partners | Contact Us

SourceForge Logo

Quick Links
Building XL
XL Mailing List

Understanding XL
Conceptual overview
XL examples
Inside XL
Concept Programming

In depth
Browse GIT
SourceForge Info

Other projects
GNU Project
The Mozart Project

XLR: Extensible Language and Runtime

The art of turning ideas into code

The sources of software complexity

Prev: Moore's Law and Software


Next: Limits of existing languages

There are four main sources of complexity when writing software:

Domain complexity is directly created by the application domain or the problem space. If you are writing the software for launching rockets, you need some basics in rocket science. Domain complexity cannot be really avoided. As Einstein once said, we can only keep thing as simple as possible, but no simpler. Concept Programming simply tries to simplify the representation in the code of all core concepts from the problem space.

Scale complexity is induced by size or other scaling considerations. From a size perspective, software is now one of the most complex, if not the most complex form of engineering. Any piece of software today involves millions of bits interacting precisely in tens or hundreds of physical components (multiple computers, CPUs, graphic cards, memory, networking components, timers, sensors, actuators, to cite a few). Most performance issues are a particular form of scale complexity, related to the passage of time. In that area too, software engineers need to pay attention to an unusually wide range of time scales, from nanoseconds when dealing with individual computing components up to multiple years when dealing with software maintenance or high availability software. Scale complexity is reduced by layering abstractions, a process that Concept Programming facilitate by offering more flexible ways to represent concepts.

Business complexity is introduced by constraints on the business environment: budget, team size, time-to-market, ill-defined requirements, etc. These considerations are not generally under control of software methodologies. Yet best practices improve the efficiency of engineers, which in turn allow them to meet higher demands. Thus, it is only indirectly that Concept Programming addresses this form of complexity.

Artificial complexity is caused by the artifacts used for building software, notably development tools. Software engineers usually begin by learning the details of individual programming languages, which have often no equivalent in the problem space (that is, they do not relate to domain complexity). The concept programming metrics are intended to detect artificial complexity, with the objective to minimize it.

The complexity of software is not constant over time. Domain complexity and scale complexity both roughly follow Moore's law.

Prev: Moore's Law and Software


Next: Limits of existing languages

Copyright 2008 Christophe de Dinechin (Blog)
E-mail: XL Mailing List (polluted by spam, unfortunately)