Programming

My life as a programmer...

No, that's not meant to boast about it. The more I learn, the more I realize how much I still have to learn. This page should show where I'm coming from and is meant for a better understanding.

Commodore C64 and BASIC

When I was in primary school (in Germany it's 4 years long and starts when you're 7 years old - at least back then) I started programming on a Commodore C64. My cousins had some Commodore C64 (with a floppy drive, for some reason none of them had a datasette tape recorder) at that time. So every time my family visited their houses (in most cases for birthdays) I waited until everyone was having some coffee, juice and cake. Then I tried to write a few lines by myself. For everyone of you who now thinks: "Gosh, that guy is a prodigy!" - no, I'm not. I was just curious and interested. And my first program looked a little bit like this:

10 PRINT "WHAT IS YOUR NAME?"
20 INPUT A$
30 IF A$ = "GERRIT" GOTO 60
40 PRINT A$ + ", YOU STINK!"
50 GOTO 70
60 PRINT "HELLO, GERRIT. HOW ARE YOU?"
70 PRINT "BYE."

Maybe not the greatest program, but funny if you're 8 years old and put your younger brothers in front of the computer.

On my 9th birthday I got a NES. The oldest of my younger brothers was a huge fan of it right from the start and also wanted a video console. So my parents gave him a C64 as his Christmas present. I think he didn't like it so much as he was a pure gamer and not interested in the system at all. And he also was more interested in the NES games than the C64 games. So I had the chance to widen my programming skills on his machine.

By the way: He still owns his C64, but hasn't used it for decades.

This was the point were I started (like many other with BASIC, of course).

By the way: Shortly before I switched to the next computer 4 years later I was able to write and read a file from disk and also write it to disk. You see: I'm really not a genius.

Commodore Amiga 500, AMOS BASIC and Amiga BASIC

In the year I turned 14 I bought an Commodore Amiga 500. At that time it was still superior to the PC. The Amiga 500 had some nice graphics and even came with a sound chip. The only drawback was the clock rate which was at ~7 MHz while the PC had between 16 and 40 MHz.

It was clear to me that I also wanted to program on that machine (also I used it a lot for gaming). So I bought the whole AMOS suite - a BASIC IDE. That BASIC was much more advanced in comparison to the built-in BASIC of the C64. And it was also heavily related to game programming. I wrote all kind of small programs. Here it was a lot easier to figure out how to do things. Maybe because of my experience which slowly grew, but maybe also because the documentation was a lot better (the C64 BASIC manual I had were only a few pages, but the AMOS manual was a thick book).

Later I also tried AmigaBASIC which was a little bit different, but also didn't come with a real IDE. It felt more like programming on the C64 again.

PC, QuickBasic and TurboBasic

When I bought the Amiga500, it was already going out of production. And it was also obvious that the peak time of the Amiga computers was over (also Commodore came up with some more models). So I bought a PC - a 80486 with 40 MHz, a VGA graphics card, a floppy drive and a 210 MB HDD. A huge difference in power to my Amiga500. The only disadvantage: The PC had only a PC speaker. If you're used to the great sound of the Amiga500... So after some time I bought a sound card - a SoundBlaster 16. What a difference! I guess I only had that feeling one more time when I bought my first 3D card (a Vodoo2).

As I already knew BASIC I started with Microsoft QBasic and QuickBASIC. In aspect of the system there were more functions which enabled you to to interact with it. But in aspect of graphic and sound it was very limited - also because of the PC and the operating system itself.

Thanks to a friend I came across PowerBASIC. It not only was a lot faster thanks to the circumstance that it really compiled the program (as I remember you could create executables with QuickBasic, but it simply consisted of the runtime interpreter and the BASIC code packed into one file). You also had more possibilities and the IDE was a lot better.

Assembler

Because of the limitations of BASIC I had a look at Assembler. But it was only a quick glance because a normal program would have took to much time to write as it would have result in much more lines than e.g. a BASIC program would have (one line versus maybe 8 to 10 lines).

But it helped me a lot later (see next paragraph as well as the Apollo85 project) and also for my understanding of how computers and processors work.

Borland Pascal

At some point I started with Borland Pascal - also known as Turbo Pascal. Pascal did a few things different than BASIC. And it had an easy and comfortable way of writing and using libraries (they called it "Units"). It also supported access on the graphic modes of the PC. And it shipped with an text user interface (which also was used for the IDE) called Turbo Vision - the best text UI I've ever seen up until now (I'm trying to recreate it in my project Java API for NCurses). I have to admit that I never used it as I didn't completely understand the concept of object oriented programming at that time. And also it's benefit. Today it's the total opposite and I'm wondering how I could have written programs without using OOP. But that was the same when I started using functions after moving from C64's BASIC to AMOS on the Amiga500.

Thanks to my knowledge of assembler I was able to use the Turbo Pascal inline assembler. So I was able to program the graphics card by myself without using the built-in functionalities of Turbo Pascal. This way I had to implement simple drawing routines by myself, but I had a lot more freedom and more graphic modes. I was also able to use the mouse driver, so I could have a mouse pointer in my graphics mode.

Borland Delphi, SQL

When the world switched from MS-DOS and Windows 3.1x to Windows 95 and it's successors I switched from Borland Pascal to Borland Delphi. Borland Pascal already had a Windows IDE (also I never used it), but that was for Windows 3.x development. With Delphi the new visual components of Windows 9x could be used (including network access, database access and so on). It was also a switch to pure application programming.

As Delphi shipped with database components and even a database called Borland InterBase (which was made open source later on as Firebird) I got in touch with SQL. This is one of the very few things I still use nowadays (SQL, not InterBase / Firebird).

PHP, HTML, JavaScript

In 2000 I founded a company with 2 friends. And one of our projects was a web page based on PHP for an U.S. American costumer. My part of the project was the programming. I had to learn PHP, HTML and little bit of JavaScript in just one day. In addition we had to use MySQL as the database - which I never had used before. And we delivered the whole thing just a few days later.

Here it paid off that I already had some experience in some other programming languages. I guess the more you know, the easier it gets to learn new programming languages and concepts (also I think they have a lot in common - there aren't many new things nowadays).

It was also an advantage that I knew SQL - also MySQL was much more limited than Borland InterBase. And the last time I had to use MySQL, it still was...

Scheme

During my year at the University of Tübingen our lecturer for computer science was a huge fan of Scheme. And therefore we had to learn it.

Scheme is a Lisp dialect. And the version of Scheme we (had to) use was DrScheme (which was later renamed to Racket). And that programming language was very very different from all the ones I had learned before. There was surely no productive use of learning it, but it was interesting to use something out of the languages you would normally learn or use.

Java

After half a year our lecturer had to switch to teach Java - also he preferred Scheme a lot and had a lot of critics about Java. But we students liked Java a lot more and were happy about the change. The first step I did with that language were without the support of an IDE. And we only had two lectures before we had to use it (just for the concept because the API can be read, they said). This was the start of me and Java and I'm still using it, also a lot of - good and bad - concepts and APIs have been added since then.

One of the surely good API things was Swing for the graphical user interface. The handling, the possibilities as well as the look and feel were a lot better than of the Abstract Window Toolkit (AWT) (knowing that Swing is heavily based on AWT). I use it often at home for smaller programs and also used it one of previous companies, but seldom at work now as most user interfaces are web based nowadays.

At the company I worked from 2005 on I used PostgreSQL as a database. It was installed on a Linux machine and worked very well. I supported almost all SQL feature (and all the ones I needed back then) and scaled very well. I also was able to write some stored procedures. A really nice database.

Around 2011 ~ 2012 I got in touch with the Eclipse Jetty web server in the version 5 (back then it wasn't even an Eclipse project). And I still use it, but - of course - in a more recent version. It's a really great embedded web server. I recommend it and haven't yet found any limits or bottle necks.

Together with Jetty I also got my hands on Apache Struts 1 as well as on Apache Struts 2. Funny fact: I used Struts 2 before I had to use Struts 1. I could clearly see the difference and why they changed what they changed. Also Struts 1 is discontinued since 2008 I reassure you that it is still used productively.

If you talk about Java and web containers (like Jetty or Tomcat) you also must talk about Servlets and JSPs. And JSPs are also important if your working with Struts (as they take the "rendering" part).

Nowadays the web programming shifts more to Restful web services which consume and produce JSON or XML data and have a JavaScript based web front-end - at least for business applications. As I also had to implement that during my work I had to use Jersey for the restful service (the client part was done by using Ext JS).

I had / have several projects which used / use Apache Derby as their database. A pure Java database which normally runs embedded, but also can be used in a server version. Very flexible and has a lot of features - even database encryption (e.g. PostgreSQL doesn't support that - at least not in a way which is transparent to the client). I also use that database for all of my projects at home.

If you use databases in Java it is only a small step until you come across JPA. As JPA I use Hibernate - at home as well as at work. But at work it is hidden by JPA entity manager of the EJBs.

Which leads us to the next topic: EJBs. That is the technique I'm currently working with at work. We use WildFly (aka JBoss AS) as the EJB container. Makes a lot of fun as there still many things to learn, but it can be also very frustrating as it seems that the documentation on that topic isn't very good. All the good books I found don't handle the current EJB version. And the very few books which handle the current EJB version aren't good books. The online documentation of WildFly seems to be even worse. Red Had knows why they give support to the commercial version named JBoss.

For my projects at home I started using Spring as I normally playing around with pure client applications which don't have any server side. Still I have all the neat things I know from the JEE world, also they are a little bit different.

IBM Lotus Notes

During the 2nd year of my computer science school we had to do a practical training (means the whole 2nd year). In this year I got in touch with IBM Notes (formerly Lotus Notes). The company sat me into the call center (it was the IT company of a bigger company and the call center consisted only of 2 people) and gave me two books about it. And after two months I got my own room and started developing.

I developed for Version 5 and 6 there. Later - when I already had my degree - I used Version 8 (the first on the Eclipse Framework). From a developers perspective it didn't change much (means the programming side, not the user side). At least the components I used stayed the same.

Still developing for Notes was a lot of pain. Each application comes with a database. But that database consists only of one table with all the fields in it. And it doesn't support relations - at least not in sense of a relational database. Notes supports 3 languages for programming: The Formula language (which was taken from previous IBM products like e.g. the IBM Lotus SmartSuite), Lotus Script (which is very similar to Visual Basic, except that all the visual components are missing) and Java. But not at every point all of these languages are available. And the built-in Java IDE - if you want to call it like that - was very very bad. I often coded it in Eclipse and copied the result to Notes.

In the end I'm not sad that I don't develop for Lotus Notes anymore. But I surely miss it as a mail and calendar client. Not when I had to used it the first time in 2002 (I'm a fan of Thunderbird). But since I have to use Microsoft Outlook...

Something to mention, also I didn't program anything in it or for it: IBM Connection, an enterprise social software application written by IBM. In one of the companies I worked for we looked for an Intranet solution. And as my boss was a huge fan of IBM - especially of Notes and the SmartSuite, we were interested in this new piece of software. We even were invited by IBM to the IBM European headquarter in Ehningen and got a nice presentation of IBM Connection. Afterwards we got version 3 of it installed. Great product - also some of the colleagues had problems using it or understanding its concept. Seems some people back then weren't very familiar with things like Wikis, Internet forums or social platforms like Facebook while others started right from the spot to put all of their information into it (which is also one of the goals of the system). One of the guys at IBM even told us that each department within IBM has a specific number of data they have to "produce" or "enter" into the system in a specific range of time. Okay, maybe that's a little bit over the top.

As IBM Connections is based on DB2 and WebSphere it is also possible to develop your own "Widgets". But I never had the chance to try that.

Salesforce

My first contact with Salesforce was as a pure user as I sometimes had to act as a member of the support team. But as I had to synchronize data between the internal license server (JEE) and Salesforce I also came in contact with Apex and SOQL (Salesforce Object Query Language; similar to JPQL of the JPA). I used the Developer Console - which is awesome for a web based project, but not comparable to a real IDE. I thought about installing Force.com plug-in for Eclipse, but refrained from it after reading that Salesforce would stop support from October 12, 2019 on.

Linux

I've played with Linux earlier, but I started using it productively in 2005 as a platform for PostgreSQL. I had SUSE Linux at home (I have bought every version from 6.4 to 9.3), but never used it much. That changed at that point and really started to like. Maybe because as a developer you're a fan of open system. Maybe not necessarily in the aspect that you can change everything, but you can debug a lot of things which are not running or at least not the way you want or the way you expected.

Unfortunately SuSE Linux changed to the worse over time (at least in my humble opinion). At the end it was always like this: If you find a blog post or tutorial about something Linux related you can bet on the fact that the files are at a different location in SuSE Linux. And also it worked a little bit different there. So I stopped my subscription there.

When I helped building an virtual appliance in 2012 I started working with Ubuntu Linux. And I have been a big fan of it since then - also they also change things from version to version which can be really pain. Other the years I worked with the following versions:

  • Lucid Lynx (10.04 LTS)
  • Precise Pangolin (12.04 LTS)
  • Trusty Tahr (14.04 LTS)
  • Xenial Xerus (16.04 LTS)

One of the side effects: When we developed another appliance (this time a hardware appliance) I started a project for creating Debian packages} using Maven: Java Dpkg.

Another side effect: Beside the system configuration as well as the configuration of some additional programs and services I also learned Bash scripting.

Windows

"Everyone has knowledge about Windows. So why does he even mention that?", you my wonder. I only mention it because I also have been the administrator in one of the companies I've worked for. So I have at least some very basic knowledge of the administration of a Microsoft Windows based network.

COBOL

In the 3rd year of my computer science school we also studied COBOL. I guess it was because IBM was one of the co-founders of that school - beside Hewlett-Packard. And it is still used in some companies - especially in the financial sector - as they still have their IBM mainframes and applications. And even one of my former employers had a production planning system which runs on Windows, but was written in COBOL.

From a programmer's perspective COBOL looks a little bit like BASIC, also the formatting is more strict (because of it's history when it was still written on punched cards). And it is more like writing a novel than programming as it is more like writing complete sentences.

I was really surprised when I saw "Object-oriented COBOL for Web Services" at a fair at the former fairground of Stuttgart on the Killesberg (in meantime it transformed into the Killesbergpark and got replaced by the Stuttgart Trade Fair which is next to the Stuttgart Airport). I was asking myself who would be so crazy to do object-oriented COBOL (can't even image how that looks like) and write a web service in it. But I once saw a complete shop system written in Lotus Notes. And in that case I clearly can imagine what kind of effort that must have taken. So maybe it's not that crazy.
I don't know exactly the date when I saw that COBOL booth back then, but I think it was between 2000 and 2010.

VMware

I've been aware of virtualization for a long time as it has been a huge topic for many years now. I've played with VirtualBox before, but the first productive use case for me was in 2010 with VMware. My employer at that time decided to stop the uncontrolled growth of computers and servers in his server room and replace it by two ESXi servers and a SAN. It was costly, but in the end it was the better solution. Especially as we had maybe more than double of machines running than we had physical servers before. It reduced downtimes, the resources were used more effectively (e.g. my PostgreSQL server was running on a single core machine before that. Afterwards with multiple cores - which it didn't need all the time - it turned into a rocket). And it was also more fun to administrate this than the many physical machines before - especially because of the VMware Client software (I didn't have to walk to the main building and sit into that cold and ugly server room anymore).

Later I got also in touch with Hyper-V. But in my humble opinion VMware seems to be the better system (okay, maybe not in aspect of that new web interface introduced in version 6 - that is really pain).

Tools

Last but not least some tools I've been working over the time (also that list is maybe incomplete):

Concurrent Versions System

I guess I don't need to talk much about CVS. Back then it was good and worked. Now it is surely outdated and I would go for different source control management - based on the requirements.

Visual SourceSafe

Visual SourceSafe - another old version control system. But like CVS there are still people and companies using it - also both systems are discontinued for some time.

Team Foundatoin Server

The TFS is surely better than CVS or Visual SourceSafe, but not really my favorite system. Also it has some interesting aspects (e.g. like a built-in bug tracking system which works together with the change-set management. You can even configure the workflow within the bug tracking system).

Apache Subversion

SVN is the version control system I'm currently using for my private projects.

Bugzilla

I used Bugzilla - and still using it - at work as well as private (but not for my own projects). Also many projects are using it, e.g. the Mozilla projects (of course) and the Eclipse projects.

Apache Maven

I got in touch with Maven in 2012 and using it since then. Also I wish that the documentation would be a little bit better it is a great system for solving dependency issues and helping you creating build processes. Also these pages here were created by the reporting and documentation tools of Maven.

Jenkins

I'm using Jenkins since I'm using Maven. Great build server, especially as it can be combined with other tools (e.g. the Eclipse IDE).

Nexus

If you're working with Maven in a team you sooner or later will be in need of a repository for your team. In 2012 a former colleague suggested Sonatype Nexus and the team followed his proposal. So I'm also working with Nexus since 2012.