Tämä asiakirja on saatavilla myös suomeksi. Dieses Dokument ist auch auf Deutsch erhältlich.
I prefer to use free software. Not only to save money but because I and others will be able to adapt the programs to better suit my needs. I have written some free software as well, mainly in the C programming language.
In my own C or C++ projects in the early 2000s, I used to follow the Ellemtel rules and recommendations (also available in PDF) with a few exceptions.
Nowadays it would seem best to follow the Google C++
Style Guide and the C++ Core
Guidelines and rely on diagnostics from static analysis tools and
compilers. Clang emits useful warnings and introduced useful
compile-time instrumentation, such as ASAN, MSAN,
TSAN. These combined with
a regression test suite and code coverage analysis allow efficient use
of version control tools, such as
In professional software development, one often has to adapt to predetermined programming style or tools. While it would be nice to always use the standards and tools, the choice could be limited by the selected target platforms. Luckily during the 2000s, the diversity of relevant C and C++ compilers and operating systems has been shrinking, and the remaining compiler families (mostly GCC, Clang, Microsoft) are closely following the development of the standards. As of 2016, it really is feasible to use ISO/IEC 14882:2011, also known as C++11. This is a clear improvement from 2003 when support for the then-5-year-old C++98 was still somewhat lacking. The future of C++14 and the upcoming C++17 looks promising.
As a doctoral student I wrote a reachability analyser and model checker for high-level Petri nets in C++ and C. It can help locate errors in parallel and distributed systems. The software is included in the Debian GNU/Linux distribution.
I like combinatorial problems, but I tend to solve them by brute force. I enumerated the solutions of the 6×10 Pentomino puzzle. I also designed some bedspread patterns with the help of some C programs.
jpegcomfor editing image comments,
exifironfor rotating and compressing images taken with a digital camera, and
jpegnailfor removing or embedding thumbnail-sized preview images within JPEG images.
The Java programming language was hyped in 1995. Once compiled and tested, a piece of software would work in every environment. That turned out not to be the case: especially the program interfaces of graphical user interfaces have changed in almost every version of the Java run-time system. Furthermore, the run-time system has grown very big, and no comprehensive free implementation is available. For these reasons, I try to avoid the Java programming language, even though I have made some experiments with it.
See also my miscellanous utilities, circuits and software for old computers.