Software

For my codes see my github page.

Why this article on programming and software?

I learned programming a few years back starting in 2011 when I switched from theory of partial differential equations to the much more practically oriented subject of scientific computing for my PhD work in shape matching. On the way I of course had to learn how to practically realize ideas using various programming techniques ranging from prototyping (“quick-and-dirty”) in Matlab and Python as well as implementing methods in a robust and scalable way in C/C++. It of course turned out that knowing how to program alone is not enough and one also can (and should) learn many tools that make your life easier when developing scientific codes.

Professional programmers in industry of course know and use such productivity tools but in the academic world many programming habits are not only incredibly inefficient but also endanger reproducibility of research works! Having an accepted paper, even in a top journal, is not enough. To be fair one needs to distinguish between the scope of industrial software development and scientific software development since the latter one often does not have a clear predefined goal and often needs many more redesign and refactoring phases. You may be tempted to think that you don’t really need to “satisfy a customer” but this is wrong. Your customer just has different requirements…

So what will I write about here?

I had the luck to get influenced by many people who, first, are great scientists but secondly also are experienced in writing production codes in industry and in leading large scale projects such as tsunami simulations in the framework of UNESCO projects.

Here I strive to share these experiences with you by  elaborating on my experiences with certain languages and tools that I use in scientific code development. I do not claim that what I do is the best or only way to get things done but I noticed that I got much more productive when looking beyond the scientific horizon and adopting some techniques used in other places.