How to be proud of your work

My name is Sven Eden, I was born in 1976 and am working as a software developer. For me, being “proud of your work” began with realizing what Martin Fowler put in perfect words:

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

Avalanche “Yamakuzure”

Software development is more than artisanry, it is an art. I am not talking about ui design, but about how to write source code.

Although I wrote my first BASIC program in 1986 on a Commodore C16, and my first C program in 1990 on an Amiga 500 using Aztec C 5, I didn’t publish my first Public Domain project before 1998. Unfortunately only its latest incarnation, Demolition Man V1.5 for Quake, SpeakersII Edition, is still available.

Since then a lot of projects followed. Some were cool, some were just for the sake of themselves, some were outright idiotic. But over the years something became clearer and clearer: “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.


How it began

In spring 1986, I remember it was around Easter, a friend of mine and me went to a playing field to play some soccer. After a while I wanted a break and walked over to the side of the field where a bench stood. I saw something glinting under the bench and went to investigate. Maybe it was an empty beer bottle? If it was, it might have been returnable and would give me a few cents. That would have been quite worth the effort, at least for a 10-year-old.

I couldn’t decipher whether the bottle was returnable or not, so I turned around and held the bottle in front of my face for better light. Unfortunately my friend had just shot the ball at me, it hit the bottle and the bottle hit my forehead. I dropped the bottle, clapped my hands on my brow, and yelled at him that he was an utter idiot, and that something like that could cause a laceration. Well, it did.

With blood pouring out of the cut on my forehead, and in utter shock I went home crying. My parents rushed me to the hospital, where my head had to be fixed with four stitches. I still have the scar.
On the way home my mother tried to comfort me and asked me, whether there was anything I’d wish for.
Oh, I did not need to think about that one!

A few weeks before that incident my parents had bought themselves a Commodore C16, and my little sister and me weren’t allowed to get near this expensive high tech device. Remember, it was 1986. But from school-mates I already knew one important fact about these wondrous devices: You can play games on them!
So, of course, my answer was that I’d wanted to use the computer.
My parents said they would have to discuss the matter and will give me an answer once they reached a consensus.

The next day they told me that I could use the computer, but only if I learned BASIC. The Commodore machines came with a beginners textbook in BASIC, so I dived into it.

That day my parents laid the foundation for my later career.

From Dev to Nothing

Of course I played games on the C16, but I also dived into BASIC. In February 1989 I was working on a game (surprise!) which was quite challenging. You had no real (fast) graphics on the C16, so everybody used the same trick: The bitmaps of all the characters you could produce with a keyboard where loaded into memory on startup. So with a command called poke() you could change those 8×8 grids.

I had written a small program with which you could walk through a 8×8 grid and turn bits on and off. It told you the values you had to poke() into memory, and even had a preview.

When I was about halfway through “drawing” all the bitmaps I needed for my game, the C16 suddenly refused to start. It was dead. And I was devastated.

From BASIC to Microsoft

My best friend, however, got a shiny new Amiga 500 the Christmas before, and he offered to lend me his old Commodore C64. Well, better to start over than to do nothing, right? And also: Now I had sprites!
But I did not get very far. A few months later, it must have been late April or early May, he suddenly asked me to return his C64 because he needed it back.
Oh, I was so disappointed!

We played a few games, then my mother fetched me and we drove home.
Where a brand new Amiga 500 waited for me!
She had phoned my best friend and made him demand his C64 back, so she got me out of the house!
And not only that, my friend had secretly prepared a box with floppy disks, which was also waiting for me.
Oh, I was so thrilled!

The next day I was busy finding my way around the Amiga Workbench and to find something to program with. Eventually I found Amiga BASIC, developed by Microsoft. It was the worst IDE I have ever seen, but it it was a huge step up from ROM-based BASIC on a C16 and C64.

Speed up progress

Of course I was not happy with Amiga BASIC. But at least our clique of four, apart from my best friend there where two other Amiga enthusiasts we were friends with, were all on the same Hardware now.

Over the summer I got into BBS (Bulletin Board Systems) using the old modem (2400 bits/second!) of a neighbor who got himself a 14k modem, and started making music using NoiseTracker.

During the summer break my best friend got a present for the four of us from his mothers company: GFA-BASIC. This was a huge step up and we tried our first bigger project of writing an actual game. Here I could work with live graphics and the sound chip, which was amazing. In the meantime we moved from Logo over Comal to TurboPascal at school, and GFA-BASIC became rather boring soon.

In early 1990 another friend of ours came around with something brand new: AMOS.
I really liked that language, and quickly came up with demos and little games, and also had an AMOS board at one of my main BBS. (I now had a 16,8K modem.)

From BASIC to C

A week or two before the summer break 1990 started, my best friend approached me at school and gave me four floppy disks. He said the fiancé of his sister gave them to him, realizing he wouldn’t need them when studying chemistry, and that he figured this was more ideal for me than for him.

The four floppy disks contained Aztec C 5 for the Amiga Computer.
It was like fate shining through the clouds. At that very day, I had all my saved up pocket money with me, because I wanted to buy something. I do not remember what it was, I never bought it. DM 50 were in my pocket, and after school I went to a local store and bought the book: “Amiga C Programming” for DM 49,95.

After diving into the book, my first “Hello World”, written in C, compiled and ran on the very next day.
During the summer I devoured the book. The more I learned, the more I loved C. I did eeeverything in C from there on.

First platform independent steps

In 1994 I teamed up with a friend of mine who was into this new operating system people were talking about, this thing called “Linux”. We both were into programming and decided to write a set of libraries, a bit like an SDK, which would allow you to write programs that compiled and ran on Amiga OS, Linux and MS-DOS.
That was a nice idea, but we were too inexperienced to tackle all the hurdles we stumbled into. Also he was too deeply occupied with his coder group, and I had several music projects going on.
So, nothing emerged from this team, but we both surely learned a lot.

Life turned upside down

In 1996 four very serious events changed almost everything in my life. Okay, not really, but it felt this way.
First of all, I graduated from high-school. Which also meant to start military service, which we still had in Germany in 1996.

But two other events actually had more impact on me.

The developer improvement

In spring 1996 I bought my first ever C++ IDE called “Storm C++”. Additionally I bought a book with the boring name: “C++ Programming”. Coming from almost 6 years of C programming, covering the basics and the language core was a piece of cake. Therefore I could quickly concentrate on object oriented design and programming. The book was very good at explaining this, and I found a new home.

I am still trying to use the C core only whenever it makes sense, but C++ became my primary language back then. Also the Storm C++ compiler lacked support for templates, so I did not have to learn this “whole other world”, too, which was a bliss.

The fun improvement

The second event was id Software releasing Quake for the Amiga in fall 1996. Oh boy, that was Christmas coming early!

I had experience with Doom2 and Quake on the computers of friends, my parents and at school. And now I did not only have my own personal copy of my favorite game, it also came with the “Quake-C Compiler” and a lengthy README about it. And *bang*, I was into game modding.

Moving into the modern era

It wasn’t until 1999 before I got my first Windows PC. The Commodore Amiga was finally dead, and I needed to move on. I worked as a technical supporter at an online bank at that time, and they had a nice program. Whenever stuff got sorted out, they put it up for sale to their employees. So I got a decent Windows-PC with Pentium Pro (233MHz) CPU and ok RAM for DM 10 (around 6$ at the time).

But 1999 I had to make a very serious decision, too, now that I got a Windows PC. Borland or Microsoft?
After many sleepless nights, countless interviews with friends, and reading up on forums and articles in the internet, I finally came to the conclusion, that I would be better off with Microsoft Visual C++ 6 than Borland C++ 5.

Books, books, books

Of course, being into books, I did not only buy Visual C++ 6, but also the corresponding handbook from the Microsoft Press.

And as you can see on the right, the book still serves a real, valuable and important purpose. 😉

Visual C++ 6 Hand Book

Don’t get me wrong, the book is brilliantly written, from the Visual C++ 6 developers to developers using Visual C++ 6. I learned a lot from it. And it was fascinating how often the authors explained the “Microsoft way” in doing certain things, just to describe then the ISO-C++ way, and why you should prefer that.

Book Collection Part 1

Over the years I bought many books about programming, and still have most of them. Here you can see one part of my collection.

I have more books in office, and several dozen on my Kobo ebook reader.

And yes, I have read all of them.

Moving away from Windows

Summer 2000 I bought my first ever Linux distribution as a set of CDs: SUSE Linux 6.4.

I already knew my way around on Unix like systems from my studies of information technology at the university of Hamburg, Germany. Linux was quite different, but also oddly familiar, and I really liked it.

At that time I started working in web development and learned a lot about MySQL, Apache and PHP. The classic LAMP architecture was our thing, so I teamed up with a friend to do some projects.

From 2001 to 2002 my company delegated me to their front-end development department, so I found myself working on banking pages in JSP. The insight I got into AIX, Oracle, Java, JSP and the worst ever SCM “IBM Harvest”, have been very valuable and highly interesting.
Unfortunately the “dot bomb” explosion almost blew up my employer, and I was not permanently transferred to front-end development. In 2003 the third round of staff reduction also hit me and they let me go.

My friend and I later tried to start our own business, but that did not work out too well. Sure, we had a small bunch of customers and did some nice web sites. But my “friend” turned out to be all talk and no action, so wie eventually ceased all work and parted ways in 2005.

But 2003, apart from losing my job, presented me with something wonderful: Gentoo Linux.
Since then I have tried various distributions, and I am responsible for dozens of Debian Servers and VMs, but both privately and on my work machines, I kept being faithful to Gentoo.

Starting pwxLib

In 2006 I had a look at a game called “Atomic Tanks“. I found several game playing issues that I fixed and sent patches in. Sorry, but the old Atomic Tanks forums are long gone. Although I later rewrote the AI and the in-game menu system, plus adding a tiny physics engine for debris rendering, the important detail here is a mistake. At one point a value, that ought to be random, was always the same. I simply had initialized the (pseudo) random number generator with a zero before getting that value.
To remedy this, and to help with all the cases where you need random numbers in a small range only, I wrote a tiny helper class: CRandom. Although it wasn’t really needed for Atomic Tanks, it helped me elsewhere, and it grew.

Until December 2007 I had added a few more tools and decided to create a header based library. However, I needed a name for it. That’s when I started to use the term “PrydeWorX“. The simple reason was, that I was damn proud of that first incarnation of my pwxlib. And as my most successful Battletech Clan Warrior just earned his blood name “Pryde“, I found it appropriate to use that one to express my feelings.

Now the library has also a home here on the projects/pwxLib page, but it certainly needs improvement.


…to be continued…

Leave a Reply

Your email address will not be published. Required fields are marked *