Basic techniques and tools for development and maintenance of atomic-scale software
- Francesco Sottile (Ecole Polytechnique, Palaiseau, France)
- Micael Oliveira (Max Planck Institute for the Structure and Dynamics of Matter, Hamburg, Germany)
- Yann Pouillon (Universidad de Cantabria, Spain)
- Damien Caliste (Alternative Energies and Atomic Energy Commission (CEA), France)
- Matthieu Verstraete (University of Liege, Belgium)
The software illiteracy currently widely present among scientists, including young researchers, has become a problematic issue for the future of research, even if its effects are not fully visible yet. Achieving a sufficient scaling to unleash the full power of the most recent supercomputers requires a significant upgrade in programming style. In turn, this requires much broader skills than what is commonly available in scientific research groups at present. Massive dissemination regarding this matter has thus become urgent. Without several rapid, global and well-coordinated actions, the risk is that many software packages, although achieving a high level of quality on the scientific side, will simply not be able to run anymore on cutting-edge computational infrastructures within 3 to 5 years, which would be damaging for research at many levels. Furthermore, all software newly developed should take this situation into account from the earliest implementation stages, which is still far from being the case. Most scientists do not even have the technical basis to meet the challenges the near future will bring in this area, and do not know where to start from. The first step is thus to provide them with such a basis.
The main objective of this tutorial is to improve the skills of the participants to produce software which:
- is suitable for a long life cycle;
- is adapted to team development;
- features an acceptable execution speed;
- is portable;
- is re-usable;
- interoperates well with other atomic-scale software;
- performs correctly from a scientific point of view.
The tutorial will cover the following topics:
- Basic concepts of software maintenance;
- Version control;
- Code re-use, libraries, and collaborative development;
- File formats and conversion tools;
- Python scripting;
- Debugging, profiling, optimizing;
- Big Data.