Slide 1 Slide 2 Slide 3

Software Development

My first computer was a Commodore VIC-20 (predecessor to the notorious Commodore 64) which I got at the age of 14, and quickly I got interested in software development, which I have been since.


A little "history"

At the age of 14 I got my first computer and in the beginning of was for gaming, but slowly I got more and more hooked on writing programs. The first "not for the fun of it" program I wrote, was a program on my Commodore 64 that was able to calculate and print prices for different sheets of glass that my brother could use in his business. This meant that my boy-dream of becoming a pilot, was gradually replaced by a (perhaps more realistic) desire to become a "programmer" in stead (the titles "Software Developer" and "Software Engineer" was not coined at that time).

I am glad I started out many years ago programming Basic on small home-computers and later Pascal on 80x86 IBM compatible computers. Back in those days we only had very little amount of RAM (remember buying 16Kb expansion for my VIC-20 for +$200), and the CPU's were slow, and using floppy disks you had wet dreams about some day owning a hard-drive. All the things we did back in those days have become obsolete, except that fact learned you know the "cost" of what you were doing. I have often since seen younger colleagues who have no idea about the "cost" of the code they write. I am not anal about the use of memory and CPU cycles, and I don't bend backwards trying to optimize every bit out of the code I write, in order to save on memory and CPU-cycle usage, however I am aware of the costs of what I do.

I started out using Basic/Comal at home and in primary school, then came Pascal, and C when I did my informatics education. Gradually the old DOS world died away, and Windows became the new defacto standard to develop on. My Pascal knowledge let me quickly switch to Delphi which for many many years were my preferred platform. At the time of writing this I still do some Delphi, but C#/Visual Studio has become my new prefered weapon of choice. During my education-/work years I have been using other languages/development-platforms (e.g. a little C++) but I am sure nobody wants to hear about the Assembler I did on the Motorola 68000 (Amiga), and such :-)

In the past I did as much network administration (AD, Exchange, SQL, IIS, Citrix, AS/400) as I did developing software, however the last 12-15 years I have worked mostly on software development, but I still draw from that knowledge I obtained working "on the other side of the table". Today I don't see myself as a programmer (Code Monkey), but in stead I see myself as a Software Developer/Engineer and I like to participate during the full life-cycle of software, from the very first step, where the software is only a dream in somebody's mind, till the very end where it is up and running in production (in use by the customer/user) - we all know that is actually not the "very end" as the software often lives on for years to come :-)

When I started developing software in Basic and Comal, GOTO and GOSUB was the way to control the flow in your program, and if you were lucky the implementation of Basic/Comal that you used, allowed you to re-number your lines of code, and/or allowed you to use labels. Then came Delphi and we were taught to put all of our code into event handles, so you ended up with programs where everything was tied deeply into the GUI. So to improve your code an old dog have to learn new tricks. A lof of my spare-time is spend learning new things, which I do by buying books (I actually reads some of them), watch videos/tutorials, and put the obtained knowledge into use in the software I write at home. The things I have learned can then be put into use in at work, where I am able to bounce knowledge between myself and my colleagues. Software Engineers who don't share knowledge and bounce ideas with their colleagues are becoming extinct and obsolete.

Here is a short list of some of my skills/areas where I always tries to better myself:

  • Clean Code
  • Architecture / Patterns
  • Dependency Injection / IoC
  • Test Driven Development / Unit Test / Continuous Integration
  • Agile/Scrum

 

External Links: