Fredrik Vold - Skills

Introduction

Rather than just rambling off a list of my skills, I will tell you stories about them!

All of this is presented as "to the best of my recollection", and I have valued telling the story over presenting hard data points. Some things might be out of order, some might be misremembered, and certainly a whole lot has been skipped outright.

As you can see, "Webdesign" is not included. I'm a programmer, a writer and a spin doctor, but I'm not a designer.

Programming

Teaching myself to express my thinking in a new language becomes easier and easier. Of course, it's much easier to learn a new language once you know the terminology aswell. For a trivial example, knowing that a for loop is called a for loop makes it way easier to look up in the documentation. This is the story of how I fell in love with programming.

The Beginning

My love for programming comes from first being frustrated at having to follow instructions on-screen. In effect, I was doing what the computer told me to do. The Dragon 32 that I first learned BASICA on in the early 90s would tell me "PRESS PLAY ON TAPE DECK." I did not read english yet at that time, so I just recognized the word TAPE and pressed the button as instructed. Yes, Mr. Computer, Sir.

Quickly I discovered that this worked perfectly in reverse as well. I could tell the computer what to do.

I was absolutely amazed when my father typed up a few rows of BASICA to have me guess a character from a book he had read to me. I'm slightly ashamed that it took me a long while to arrive at "FRODO" for the name of a character in Lord Of The Rings, but I guess I thought that was too obvious. When I did type it in, however, a message telling me it was correct came up on screen, followed by a dump of the source BASICA code!

Having discovered that if I typed the line number of the line I wanted to alter, and then what I wanted the line to be, I could change the answer to the question, or even the question itself!

My newly discovered god-like powers left my head spinning with ideas.

Basic

Out-growing BASICA does not take a lot of time, and it's limitations are pretty severe.

Not long after I started getting a grasp of it, however, a new computer was purchased to the household. The shiny new IBM 80x286 had more more memory than I thought I could ever fill, and two disk drives. No tape player needed! It even had it's own monitor, so I was not limited to using the computer only when nobody was watching TV.

Unlike the PCs I had used before, this did not come with IBM DOS. It had MS DOS, and as part of the software package was QuickBasic.

QB and I soon became friends, and before long I was making use of the amazing possibilites it offered. Just the amazing flexibility of being able to edit lines of code in place without having to retype the whole line made my life so much easier.

It was during what I now call The Basic Era that I experimented with a whole range of languages, from MoonRock to Pascal.

At some point my father skipped the 386 completely, and signed up to a deal at work where he would get a hugely expensive 486 with 16MB RAM, and then pay it off over the following five years!

Sure, he wanted it for himself, too. He was getting into MIDI in a big way. He bought a GUS MAX and a MIDI keyboard, leading to conflicts over who got to use the computer.

In the end, however, he did pay for it. It was absolutely his computer, and there simply are no counter-arguments to that.

The solution? Reading about programming and programming languages, and writing Pascal and Basic on paper.

I learned a whole lot during that time. For example, I learned that LISP can be very useful (for (very) specifc (and (sometimes) arcane) tasks).

perl

Somewhere towards the end of The Basic Era I laid my hands on a modem. The Internet was still widely proclamed to be a fad that would soon pass, but dialing into a BBS was an established fact of geekdom that simly would never go away, so that's what I did.

Originally it was to finally deepen my understanding of Pascal to the point where it would be useful in Delphi, so I could finally discard Visual Basic, but it ended up being where I met what would be My Weapon Of Choice for a great many years.

A BBS I frequented made reference to CPAN, and a lot of messages said to "just fetch it off CPAN." Intrigued, I went to a friend's house (one with an actual internet connection), and together we looked it up.

He was disintrested, as it had nothing to do with making music or playing Warcraft, but just a quick sniff of cpan.org had my mind made up: I was going to pester my parents into getting me on the internet even if I had to do chores to get it.

There is a straight line from that moment, through CGI.pm and POE, to the Node.Js code I wrote this morning.

Sadly, I don't do much perl anymore, but using it I have written more software than with any other language. Sadly, most of it was not for myself, but as work-for-hire, so very little of it is available for me to peruse now.

I still insist on typing it out as "perl", with a lower-case p. That story is too long to fit here, though. The shortest possible version is "Debian GNU/Linux 1900 2000", but feels incomplete without mentioning Undernet IRC and #LinuxHelp

Ask me about it sometime. Bring snacks.

Lua

Alongside programming, I've also developed a love for games. I discovered the game Vendetta Online while it was little more than a tech demo, and fell in love with that game for a while.

It didn't take me long to get inducted into the ranks of The Guild of Free Traders. One of the Deep Guild Secrets was that there was price data in the log if the verbosity was turned up. Sadly, it was not it a readable form, but the some of the numbers lined up with the prices of certain commodities. Making sense of endless lists of seemingly unreadable data is very much what perl was made for, so naturally I set about automating the then-tedious task of updating trade prices. Simply not updating the trade prices was not an option. TGFT was founded on always knowing the prices of everything everywhere, and since Vendetta moved to a dynamic economy this was a vital part of being a member of The Guild. Hacketi-hack in perl, and suddenly Zathras' Automatic Trade Updater was born.

Not long after we had all become absurdly rich, Vendetta got an overhaul to it's user interface. They had implemented it in Lua, and like so many MMOs of it's time, it was moddable.

This is where I pivoted my programming into a new language yet again, and before we knew it the whole thing was running not as a separate program that munched on Vendetta's logs, but as an in-game script that would yank data directly from the game.

Profits doubled as many more guild members were now running the software.

Soon automatic trade route selection and ion storm avoidance plots were added, and it became something everyone in the guild ran, even the escort fighters. When asteroid data was added, and the miners started adding data to it, I think half the money in the game belonged to TGFT and it's members.

On the surface, all this is "just a game", of course, but behind it all was an understanding of security concepts, database backends and socket communication I had picked up working as a perl developer, and through it I learned a whole lot about what makes a good user experience for non-technical people.

Years later, this became useful in another game. FiveM, a modding framework for GTAV, has Lua support. I could go on and on about the Swedish Paradise GTAV RP server, I guess, but that will completely ruin the flow of my story! If you ever find yourself in need of having three hours filled with something, ask me about working with an index-from-1 language in a modding framework where most of the documentation is based on guesswork.

Java

Ever heard of Minecraft?

It's a little game some dude made in his spare time, so it might be a little too obscure.

Anyway, this guy called notch hacked together his own spin on Infiniminer. In his version you could mine, but also craft items, so he called it Minecraft.

It was written in Java, for some odd reason. I didn't like Java. I still don't.

If you wanted to write mods for Minecraft, however, it was the language to do it in. Besides, at the time most Real Business Applications were written in Java, so that's where the work was.

I fell in love with the server mod Bukkit, and did silly stuff, like a chest locking plugin.

This was my first experience of working with a language I didn't really enjoy, which is a very useful experience. It means I could probably express myself in PHP without bursting into flame.

To keep myself sane through The Times of Java, I kept up my perl development, which was still my salaried job at the time. The perl work was all boring business applications and database interactions and I was looking to branch out.

It was the story of notch, and his spare time success, that rekindled my childhood dream of writing a game. Prototypes were made, but nothing came of it.

Strangely, it was Java that forever cemented my love for the freedom of perl. All other languages now have to measure up to that standard.

Without IntelliJ IDEA I might not have remained sane. My biggest take-away from Java? Always use a good IDE when working with strongly typed languages!

I mean, everyone knows vim is the Only True Code Editor, but it's certainly not an IDE. Java in vim would be madness for sure.

JavaScript ECMAScript

"Java is to JavaScript what Car is to Carpet."

I genuinely try to call it ECMAScript, or even just ES, but for whatever reason the name "JavaScript" has stuck, so that's what it's called. I invite you to join me in trying to deal with it.

While I was working for Huge Nameless Corporation, basically just sticking it out to finance my hobbies, a new demand came up for the primary product: AJAX.

To this day I'm pretty sure that the one making the demand had no idea what it is, and had only overheard the word at a conference somewhere, but it was not the sort of company where you questioned the bosses too much.

AJAX was demanded, and after a couple of months, AJAX was delivered.

Up until that point I had only ever used JavaScript for perliminary client-side data validation and a bit of fancy table sorting, but once the demand for AJAX was a fact of life I had to really dig into it.

Oh wow. My world changed for ever. I wanted to do everything with JavaScript and make everything move and flow all fancy-like.

Mostly, however, I never really found much practical use for it in my projects outside a splash of AJAX here and there, until Node.js came along!

Holy makrill! With Node.js I could develop the server-side part of the code and the client-side, without having to change mental gears. How did I even do web-stuff before this? Can I ever go back?!

Thank you, Pointy Haired Boss at Huge Nameless Corporation. Because of your love for buzzwords, I have a that much bigger pen to play in.

C#

My most recent language! I was afraid it would turn into another horror story like Java, but so far it seems to be lacking whatever quality in Java made it chafe.

Sure, it's strongly typed, but not absurdly so. Yes, it demands that I state the type twice when declearing a variable, but as I learned from The Days of Java, that is a job for the IDE.

My skills in C# are still weaksauce, obviously, but I'm quite sure I would have fallen into a deeep and dark hole had it not been for Visual Studio.

Say what you want about MicroSoft, but they make one hell of an IDE!

My C# practice is currently being done with Space Engineers, as I absolutly learn best when I can turn it onto a game, but it won't take me long to get comfortable enough to write Real Applications in this language.

Language

This section is under construction!

Soft Skills

This section is under construction!