Software development

Software development is a very wide subject and is growing day by day. It became impossible to have an overview about all the different sub fields of computer science and software development. I am interested in the following areas.

Object oriented and functional software development

It is worthwhile to keep an eye on the developments, because programming languages are constantly evolving (like natural languages). It was interessting to watch how functional programming went slowly into the mainstream. C++ 11 and Java 8 incorporated many features that were tried out in functional programming languages before, e.g. Haskell. Since Java 8 and C ++ 11 developing so so much easier. This incorporation also happened in the JavaScript world, e.g. the React framework is very functional.

And in the end the right language increases the productivity, the code quality and thus the time to market.

Object-functional programming
Object oriented and functional programing languages are beeing amalgamated into object-functional languages. This is still and process and I am curious of the new languages that will come. The most known languages in this area are Scala and Kotlin.
Kotlin is IMHO the best language on the JVM right now.
Scala is a research oriented programming language and is an important milestone. Because its development was driven by programming language researchers it included many things that were to abstract for "normal" software developers and wasn't excepted widely.
Groovy was one of the best languages for rapid application development on the JVM in the late 2000s.
Since the 90s I am a strong supporter of functional programming languages. In 1998 I wrote my diploma thesis on geometric algorithms in Haskell.

Parallelism and concurrency

One of my main interests is how to make software faster.

Parallelism and concurrency
Often large speedups can be achieved by concurrent execution of critical parts of a programm. But this is not always easy and a very challenging topic. One example is that there are upper bounds on the speedup, because there are problems that are inherently sequential or do not scale well.
GPU computing
With massively parallel GPUs speedups of 10 and more are possible.
Distributed systems
With distributed systems one can increase performance and scaleabiliy and also achieve fault tolerance and resilience.

Agile methods

How to finish a project in time, in budget with the right product ...

In order to create software successfully, you need also knowledge in agile methods, project management, soft skills, creating presentations, etc.

Data intensive applications

Data is the cornerstone of our society and economy. Therefore the buzzwords "Big Data", "Data Science", "Business Intelligence" and "Data Warehousing" get a lot of attention in the media. I worked on some data intensive apps.

  • Camera image processing for measuring instruments (2010-2014)
  • Column oriented databases (2002-2006)
  • Parallel ETL processes (2001 - 2009)
  • Fraud detection in telecommunications (1999 - 2000)

Other languages and topics