The Azimuth Code Project is an online open source project that will provide source code for analysis and simulation software used on the Azimuth project. It is hosted by google and available under the LGPL (lesser gnu public license).
We will try to provide well documented, simple and up-to-date implementation, mainly for instructional purposes. As a side effect we will try to show that clean, simple, open-source, well-managed and up-to-date code handling is possible at a low cost, and how it can be done. The creation, documentation and publication of custom extensions to packaged software is supported, too.
If you want to join the Azimuth Code Project, leave a comment here:
The code is hosted here:
See also software engineering in climate science.
Many papers in climate science present results that cannot be reproduced. The authors present a pretty diagram, but don’t explain which software they used to make it, and don’t make this software available, don’t really explain how they did what they did. This needs to change! Scientific results need to be reproducible. Therefore, any software used should be versioned and published alongside any scientific results.
All of this is true for large climate models such as General Circulation Models, as well—but the problem becomes much more serious, because these models have long outgrown the extend where a single developer was able to understand all the code. This is a kind of phase transition in software development: it necessitates a different toolset and a different approach to software development.
Many sciences rely on computer code for simulations and analysis of data. Since results in science should be reproducible, the code used for published scientific results needs to be published as well. Therefore, one objective of this project is to
show how computer code can easily be versioned and published along with any scientific results that are based on the code, by example.
Scientific results belong to humanity, therefore
all code used in science should be open source, everyone should be allowed to use it.
A basic paradigm of science is that in principle, it should be possible for every fellow scientist to understand what another scientist has done. Therefore, any used code needs to be as easy to understand as possible. This project will therefore
show how code can be documented and
show how code can be structured using established paradigms from software engineering, by example,
in order to make it as easy as possible for others to understand it.
Technical choices are based on the objectives. The use of established paradigms from software engineering suggest that one should use
object orientation and
automatic memory and thread handling as an additional abstraction layer.
The first point rules out languages like C, the second one languages like C++. While many people today are convinced that the low level memory management is necessary in high performance computing, and that object orientation adds unnecessary complications, this project is based on the belief that sooner or later the scientific community will have to accept that the amount and complexity of software does not leave a different choice than to follow the software industry and use the above mentioned paradigms.
The following article is a funny collection of coding practices that you should use, if you don’t want anyone else to understand and maintain your code:
This book explains good coding practices from the point of view of an experienced programmer:
Steve McConnell, Code Complete: A Practical Handbook of Software Construction.
Andrew Hunt, David Thomas and Ward Cunningham, The Pragmatic Programmer. From Journeyman to Master.