My name is Tim Teulings. I live in Dortmund, Germany. I work as a software developer.
I’m an experience developer mainly using Java and C++. But I used a number of other programming languages in the past and I am still interested in new programming languages and new language concepts. Even if the language is new - if it is well designed I’m interested in working with it.
I’m currently implementing my backends using JavaEE. I used Glassfish for a while and switched to Widlfly/JBoss recently.
I however recently also took a look at Spring, Spring Boot and Spring Cloud. While I like JavaEE since it always allowed me to get my tasks done in a simple way and I enjoy its good design, I have to admit that Spring is providing a much broader experience for the developer these days. The JavaEE specification process would have to speed up to hold the pace Spring currently has. So depending on the actual needs and constraints Spring may currently be the better choice for developers if you need more than what JavaEE provides. I do not think though that an application server is it itself a bad thing.
I would implement backend APIs using REST but also interacted with other system in the past using SOAP. I designed a number of well written APIs over my career.
I spent a lot of time in the past to implement rich client desktop and mobile frontends by writing sophisticated widget frameworks on top of the OS widgets or even on top of the naked OS rendering stack (In C++ on top of Win32 controls, in Oberon-2 on top of X11, bare Win32 API and Mac carbon APIs and then using C++ on top of Win32 API and X11 using Gtk theming). While doing this I thought a lot about how to design graphical user interfaces and reducing visible dirt and create a clean and simple look, resulting in easy to use interfaces. Since I’m not a designer I concentrated on the more technical aspects of good user interfaces.
Model driven development, custom programming languages, DSLs and code generation
The best code written is the code you do not need to write at all because some infrastructure already offers it for you. This infrastructure can either be some 3rd party (open source) software, a library or a framework.
The second best code written is the code that is created or extracted from some higher level source of abstraction. Since abstraction is the key of programming, developers should try to find a as high as possible abstraction level while describe their problem and and later implementing the resulting solution. May it be a new (simple) scripting language, a declarative domain specific language together with one or more code generators, a interpretation of a model - I have done them all and it was really fun. Depending on the needs and constraints I would either choose Coco/R, ANTLR or Xtext.
Developing frameworks makes even more fun than using them. Since there is not one frameworks for everything and frameworks tend to be better the more they are especially designed for a small, well defined problem area (I call it the Heisenberg principle of Software Design - a framework cannot offer a big productivity boost and on the same time be good for every purpose), there will always be a need for developing one more new framework or at least extending an existing one.
No software is dead if the code still lives, no software too old to not still do its purpose if it is well maintained. Writing new software is fun, but maintaining, refactoring and improving new software can also be fun (and yes, there are people out there that think different, I know). There are a number of technics and approaches one can apply and I know some of them. I already deleted more code in long maintained projects than some developers wrote over years.
DDD is one of the keys to design and maintain larger systems. IT is also the key to define APIs for such systems. It is still difficult though to get people use DD principles explicitly thus I try to enforce such thinking in others ways. I would like to make more use of DDD in the future.