From Java to …

Gunnar Stahl
6 min readFeb 17, 2021

My story begins sometime around 1985. Born in 1971 in a small town in hessen, germany, I grew up in a time when phones had houses attached to them via cables, required you to speak into a dog chew bone, had dialtones and rotary dials, which took way too long to go back to zero when you had to dial fast.

And somehow during my adolescence, when computers were for me just part of science fiction, I knew that one day I would work with them.

My first computer was a C64, which came without a storage device. So I learned Commodore Basic by writing my first programs, and by not turning the computer off, since then the program would go into the big black void. My address storage and retrieval program was written about 4 times, all due to the fact that keeping the computer running during the night was a no go. But every time, the program became better.

Later my brother created a thing called a “datasette”, which was a casette player linked to the c64.With that I had the ability to store and retrieve my code. Depending on the quality of the tape, it was more of a write-once-read-failed storage system…

I still can recall the sound of this datasette and the sound that code produced when being written to a cassette. Lateron, this datasette was replaced by the 1541. 5.25" floppy discs…

After 13 long years in school, sometimes around 1990, and after the mandatory alternative service (instead of going to the military, which I found pretty dumb), I decided to take a 15 month long course for learning how to write computer programs. ‘Organisations-Informatiker’, as the course was named in germany.

Cobol, RPG, C, SQL and all these dinosaurs of ancient computer history were all hammered down into my mind, and I really liked it. I liked that I started to think like a programmer.

After these 15 months I took my first job at a company, writing code in business basic on a data general system. And I was good. I knew how to deal with the code, how to write code that excelled.

What I wasn’t good in was humans. Understanding their behaviour and that what they say is rarely what they mean was (and until this day is) a somewhat limited ability of mine. Knowing to be different was a thought that lurked in the back of my mind for way too long. The hell that had been school had taught me that understanding these weird creatures that call themselves humans will never be part of my personal knowledge. But who cares, as long as there are computers around.

Many years later, during a rough time in 2014, I went to a psychologist, to find out what was wrong with me. The official diagnosis after 6 months of assessment was ‘Asperger syndrome’, ICD-10 F84.5. The reality behind that technical term lets me understand data in a way that mere mortals seldom come to understand. But it does not help me understand illogical systems, like humans. Although, as a married man and a father of two sons, my abilities to deal with these humanoids are no longer that bad. Well, compared to … computers anyway.

But the other reality is: I never realized before that I am an autistic person, since most of the people in my field of expertise and line of work have their own traits as I do have mine, just in varying colors and intensities.

My journey through the kingdom of programming took me through different paths. And in 1998 I came into contact with a programming language called Java. What a fine language, write once run anywhere, with a syntax so clear and concise, and a documentation so well written, logical and useful. What a blessing to not have to pay for big clunky compilers like Borland C++, and being able to just download the jdk and start hacking away.

And in 2000 I used Java the first time in a commercial project as a freelancer. Yes, AWT is awful, and Swing just barely better, but the ugly interfaces look the same regardless of the system they run on. And not being a designer helped me creating ugly user interfaces…

Java was a steady partner in my journey through different projects, as a freelancer as well as an employee, and now again as a freelancer. My limited abilities as a designer pushed me more and more into the backend world, where I truly feel at home. Working with backends, designing the flow of data, understanding the intrinsics of data are all things that fulfill me. The backend is where the truth lies. The frontend normally is just a design shell that tries to hide the inabilities of the backends.

So now, in 2020, I learn the next language and try to get to the same level of understanding that I have in Java. Well, learning a language normally is not such a big of a deal. By looking at code of most modern languages I normally get very fast to the point that I could write code in that language.

No, learning for me means to understand the intrinsics of a language. To become fluent in it, and in its tools. Like I do in Java, with its vast ecosystems of Maven, Spring, Hibernate.

So I decided to take a course at devslopes, and this course is the reason, why I write this article. Since part of the course is to write articles about your experiences.

Just a couple of minutes ago I finished the boss enemy of week 3. Creating an application from scratch, taking a design, turning that into a working application. And here I am, being the non-designer that I am. I now _have_ to deal with this inability. And I have decided to become better in this. So, designing useful interfaces will be a part of my journey ahead. Yeah…

Java and Swift are now the companions I deal with. Java as my daily tool in which I write code for my customers, and Swift as my next target I want to become fluent in.

Many things are really great in Swift. Like returning more than just one object at a time. Or the weird thing that method parameters can have different names, one for calling it from the outside, and one for using it on the inside of a method. Getting rid of the trailing “;” at the end of each line.

And some things are really strange in Swift. Closures for instance. Trailing closures without argument names. Currently, they really do not feel that natural to me. Thankfully the Java version of streams, with the heavy usage of closures, is more natural and I can use that knowledge to understand how closures work in swift. I think in a couple of weeks, this will no longer be unnatural for me.

Or the fact that I have to deal with by-value-types again, instead of the Java- way of copy-by-reference. Java is (asides from the basic types) purely object oriented, without by-value-types. In Swift I now have by-value-types, and by-reference-types. Feels strange. But maybe they have their usage…

In Swift you have truly immutable ojects. Whereas this concept is not part of the Java-language. In Java, you have the ‘final’ modifier. And in many projects it is mandatory to have all method parameters ‘final’, partly due to the wrong assumption, that this final modifiers turns objects into immutable. Which is not the case. It just means, that you cannot reassign a new value to the final variable. What you do inside the object which resided in the variable that was marked final, is completely independent from whether or not the object itself was marked final. There is no equivalent to ‘let’ vs ‘var’ in Java.

And I really like that concept in Swift. This is something that Java misses.

I think that from time to time I will publish about my current progress. So enough for today. There is a long journey ahead of me, and I do like this. Learning for me means living. I am myself not an immutable being, so yes, I want to learn, I want to live, I want to change.

--

--

Gunnar Stahl

Born in 1971, finished school after 13 years in 1990. Professional developer sind 1992. Freelancer since 2009. Maried, father of two sons. Autistic.