I started programming at the age of ten with Amiga BASIC. I had this book on programming with different programming languages Basic, Pascal, Assembler and C. I went through all of them in that order.
A HealthKit ETW-3400A, inherited from the time my father went to university, taught me some more of the basic principles behind the fascinating world of computers.
Supported by my parents with new hardware every now and then, I started teaching myself C++. That was in the days before the first ISO standard. I remember compilers being more than implementation specific than compliant to any specification.
The film Sneakers (1992) inspired me to program a graphical progress bar (in blue) that showed the progress of a file copy operation. That does not sound spectacular (actually it wasn’t even back then), but it was DOS and I was around twelve years old.
That was also the day I started playing with Linux. The first Debian took me several hundred meters of walking to install… literally… I had a few floppy disks that I carried between my parents computer, which was connected to the internet via an ISDN line (that was fast in contrast to the little 1200 bps modem I started with), and the computer in my room. The base distribution was about twenty disks.
Not satisfied with not knowing how Linux actually worked and who compiled it (I was a bit paranoid), I followed the Linux from Scratch instructions. That included compiling gcc twice and applying patches to different base packages. I still benefit from going through that pain (compiling gcc once took six hours).
I tried programming small games and playing with DirectX to overcome the Windows 95 API that allowed processing of only one key event at a time. Doing something more sensible, I supported the Folderol (distributed protein folding research) project (C++) to with an platform independent network interface (BSD sockets and WinSock API).
Time went by, and Microsoft Foundation Classes came. Fortunately, I finished school and started studying aerospace engineering at the University of Stuttgart. I met the Ada programming language, which kept me in some kind of illusion for a long time. In the search for a job, I started creating a GUI in Java and OpenGL for finite element method (FEM) software at the Institute of Statics and Dynamics. That job evolved into introducing Subversion to allow the three people working on the code to efficiently merge their changes.
I tried to take any course on software and software engineering I could get. Aerospace engineering required a lot of work in mechanics, thermodynamics and fluid dynamics along with the usual basics of mathematics and physics.
Finally, I had the chance to really focus on what I always wanted to learn. I considered creating flight controls the royal discipline of engineering. It is embedded (you need to know the hardware details), it is functionally demanding (real-time with „complex“ control theory) and it is critical for the safety of the airplane. Thus, I took courses in control theory and aircraft systems design.
At that time I had a job at the German Aerospace Center (DLR) supporting the automated design of aircrafts. The software I wrote calculated the loads on the fuselage during an emergency water landing (yes, there is a standard for this).
My mandatory student research program was about design, layout and programming of a control system for the microwave heating for the fusion experiment Wendelstein 7X in Greifswald. It was not very much about control theory, but I learned a lot about embedded systems programming.
My thesis supervisor also gave lectures on software engineering and programming standards. I learned an incredible amount about software from him. I am still grateful for what he taught me. My thesis was then the world’s first ARINC 653 host simulator.
Freshly graduated, I decided to start a Ph.D. at the same institute I completed my thesis. We placed the institute’s fly-by-wire platform into a small, two motor general aviation aircraft. I tried for one and a half years before noticing that it was not worth spending too many years at university.
Leaving university also meant to leaving the safety domain. I switched to the security domain and was hired by a company creating military crypto systems. Creating software for safety or security is actually quite similar. You need a systematic process, analyses and a thorough testing depth.
It was an interesting time. I worked on systems and software design, implementation and verification. The company had a hardware design background. They also developed software for a few years, but it was not what I was expecting. Along the way, I built up the complete network for the classified work from patching the network cables, setting up the server, selecting and configuring the tools for change and configuration management. There had to be more…
Thus, I started working as a consultant for software development in the hope of improving my non-technical skills. I managed projects ranging from in the health sector in California from the west to functional safety trainings in South Korea in the east. On becoming a father, however, I was no longer willing to accept the required flexibility (i.e. leaving for abroad for two weeks with a week’s notice).
So I joined the parent company and I am now responsible for the functional safety at their embedded software department. In this position I successfully lead an organizational change project to implement an ISO 26262-compliant development process that is now followed by more than two hundred developers. We certified most of our software in 2016 and a big code generator in 2017. But there is more to come…