My coding interests
In this article, I want to give you an overview over my current coding
interests that might find their ways into articles on this blog.
The Unix way of life
I use Unix-like systems for many years now. I switched from Windows to Linux
in 2008 and was at peace for a long time, till I learned about even better
(to me) systems. Enter *BSD. But this is for another article.
I like good graphical interfaces, but I often prefer to work with the terminal.
This sets me apart from most of my colleagues, which even choose to ridicule
my "old-fashioned" ways.
My taste for Unix also found their way into my coding: I prefer C and Go for
my native binary needs, while writing scripts in Perl and Python.
Low level coding
I prefer coding in simple languages that give me a huge amount of control
over the machine. C again has me covered here, but I also follow the
development of other languages like D, Zig, Nim or Rust, as they seem all
promising to me.
I also like getting my hands dirty. I find Forth and Assembly fascinating
and will try to get some experience with them in the future. One interesting
project could be writing a game for the Game Boy, as I also am very interested
in game programming in general and game programming for retro consoles
especially.
I am also interested in reverse engineering and Ghidra, so that is another way
to interact with the "lower level" that I enjoy and that I want to learn more
about.
Libraries over Frameworks
At work I have to code with Java, C# and Powershell. These are neither unixy
nor low-level. This makes me dearly miss the simplicity of my private projects.
One aspect are frameworks. I believe that Frameworks are a huge productivity
boost as long as they just work. But you cannot use them (or any other
abstraction) to avoid having to learn the system below the abstraction. This
is something my colleagues and many other programmers seem to forget to easily.
And sometimes frameworks will break or act surprisingly.
Take Hibernate as an example: If all you do is simple CRUD, maybe you do not
need to know much about databases and sql. But then, suddenly, you are
confronted with slow database performance or with weird behaviour you don't
understand. And then you have a problem: You now have to understand it in
order to fix it, and this means not only learning the layer below (the
database), but also the inner workings of the framework. Is it a bug in
Hibernate, or are you using it wrong? Who knows?
I prefer to write my own abstraction over the database any time. I believe
database access is too important to most software for it to be a part of your
application that you don't understand too well.
Hiding complexity is like hiding your stuff below your bed. Looks more tidy
than leaving it lying around in your room, but I wouldn't call it cleaning up,
the chaos is still there.
Simplicity
Having read until this section, you now know that simplicity is the big concept
for me in computing. We are building huge stacks of layers over layers that
all should free as from the shackles of the lower layers, but instead just add
more complexity that we have to deal with.
Take a look at the Linux audio frameworks and compare them to sndio which
just works. Look at the modern web with ever-changing frameworks and
languages that compile down to the Javascript, CSS and HTML that no one wants
to deal with. Look at electron, which creates nice, but horribly performing
GUI applications that I will not touch unless I'm forced to.
Take a look at systemd which is like I wrote over frameworks: Nice as long
as it works, but hard to understand when it stops working. And it is not a
question of if, but a question of when it will malfunction.
I try to reclaim being able to understand my own computing systems. I try to
work with and work on software that is understandable and that is efficient
and correct by reducing needless complexity.