Sunday, July 8, 2012

My Story - The Beginnings

Early next month I will turn 10. 10 years of professional employment, in various roles, industries and working on various technologies. I am also turning 13 since I've discovered Java, 14 since I've started with C++ and 15 since I've first laid my eyes on a programming article out of conscious free will (see note 1). While my last 7 years were mostly dedicated to game development from which 4 to management, I remember my first days with great pleasure.

I woke up this morning remembering my past experience with computers. It is not something I highlight in my CV anymore because it happened already too long ago but, nevertheless, it is still a fundamental part of who I am and how I've shaped myself.

Spectrum days:

It all started when I was very young (I would say 8-10), when my parents brought home a Spectrum-compatible personal computer. Back then, programs were loaded onto audio tapes and programming was done in Basic. I got a book with games (source code) and I remember typing them in and trying to run them. I had no idea what debugging meant, so all I did was to input the instructions one by one, as carefully as I could. I remember how my father helped me debug some of the programs. I was also writing some small programs by myself - again, taught by my father who was hooked by the possibilities opened by the personal computer. I remember drawing cones from a series of radius-decreasing circles - the "for" loop. It was more than 20 years ago.

Fast forward 4 to 6 years and, in 1995, I got my first real PC. I was 15 and I started using it for playing games and composing music.

First lines of code:

Two years later, in 1997, I met a real programmer. I was visiting an aunt and she introduced me to one of her former students who was a professional developer. I had a brief introduction into the world of Delphi and Windows rapid application development. Around the same time (July-August 1997) I first laid my eyes on a computer magazine article on Javascript and dynamic content in web pages. It was the time of Netscape Navigator and client-side Javascript was absolutely cutting edge. I was fascinated. I remember reading the same article over and over again for hours. It made sense for me.

Few months later my parents brought home Visual Basic 5 and a Visual Basic book. I took the book, I installed Visual Basic and started to learn. My first complete application was a drawing Paint-like program which used the native Win32 function FloodFill to fill shapes. I particularly remember this detail because, for me, being able to access the powerful native Win32 functions was like magic. It was what real programmers did. Immediately after, I wrote my first game - a Tetris clone.

Visual C++

I don't remember exactly how, but I remember stumbling upon a Visual C++ book in my personal library (Visual C++ For Dummies). Soon, I got hooked by the power of native code and the promise of absolute speed. I knew that if I wanted to be a real programmer I had to go the C++ way. I was 18 and the year was 1998.

I remember clearly reading about input and output streams, about linked lists and pointers. Linked lists in particular were a major stroke of insight because, at that time, they seem so hard-core, so close to the machine, such a powerful data structure. I remember that I was in vacation, that it was summer and very hot.

I quickly moved to MFC and Win32 programming. I got a new book (Visual C++ 4) and I started the long way of coding native UIs. I remember the book was mostly about all sorts of wizards the environment provided to assist programmers in writing the UI code. I didn't like the idea of having code generated for me that I didn't understand. So I started from scratch to write a MFC application without the help of wizards. Once I got the main window up and running, with menus and the ubiquitous "About" dialog, and I knew I had to do something with it. Around the same time, one of my friends, Iulian Ursache, invented an algorithm for parsing and evaluating mathematical expressions. I had the window, he had the algorithm so we met and worked together to write our first Win32 function plotting application. It was such a breakthrough! We were one year away from finishing high school (1998).

First commercial product:

The same year we had our first entrepreneurial experience - we developed a multimedia CD for our graduation. I remember people looking awkwardly at us when we were asking for money. It was my first experience with a commercial product that had to work on more than my machine. It had an installer, it was distributed on a CD-ROM, it had HTML content and a Visual Basic application that integrated Internet Explorer. I remember that half of our colleagues had problems running it but, in the end, we were able to ship it. Good for us, because we had already cashed their money.

Java days:

Soon after finishing high school I started learning for the admission exam to the University. I remember my parents leaving me home to study and myself sneaking in to the computer. I had discovered Java and I had finished my first Java game just days before the exam. I was 19 and it was a Minesweeper clone.

Briefly afterwards came another Java board game and yet another board game on Linux (C++ KDE application, written with KDevelop). I am mentioning all these technologies because, back then, every time I was stumbling upon a new development environment or operating system I had to write a program for it). While the first application taught me about the branch-and-bound algorithm, the latter opened my eyes towards A* search and heuristics.

While I use the "I" pronoun quite a lot, we were actually a group of friends interested in programming and operating systems, and we talked a lot about these subjects. They, for instance, opened my eyes to Linux and to many algorithms and techniques.

The next two years were mostly dominated by Java - a function plotting and curve fitting application written for the physics department at the University, a second commercial application (a website with database support) for the company my father was working for, and many smaller apps and games. Java was very useful for me as it got me the power level I wanted, the extensive library I was looking for, the ease of coding that allowed me to finish my apps within reasonable time and a simple distribution environment that did not require extra installers or additional dependencies.

My first employment:

In 2001 I got my first summer job as a programmer; I wrote multiple apps that were then sold on the Elance website: an HTML editor with syntax highlight, a visual editor for CSS and a DWG (Autocad) file viewer using the OpenDWG library. I remember perfectly those days as I was excited to work with other colleagues side by side, coding together more for fun than profit. Back then was when I first got introduced to OpenGL and the NeHe tutorials (now in the legacy section) as my former manager was coding a 3D chat application. A new stroke of insight - 3D graphics were not a miracle and, although difficult to work with, not something outside human reach.

In 2002 I landed my first full time job. I was halfway through the University and I had to combine both work and studies. That was exactly 10 years ago. I started off coding C++ on Linux, writing a voice recording application. I remember my first assignment was to develop a driver for a National Instruments data acquisition board that was used by the app. It was kernel development and every time it crashed I had to reboot the system. Around the same time, I got my first lesson in customer management. The job asked us not only to write the code, but also go to the customer, install it and provide support for it. I remember that we had to call him every two days to get information about how the system was functioning and ask if he needed any help from us. We were a team of three, all students, all of the same age, all friends. The company manager gave us free hand and we had no team leader to guide us. Beautiful days, with lots of things to learn; a mixture of Linux, Windows, C++, Java, C# development, more oriented towards fun and interesting technologies than to actual business requirements. Crazy days and some nights spent in the office.

My first 3D game and the move to Bucharest:

During the same period I was involved with some other interesting projects: a regular expression parser and interpreter, a website and my first Perl CGI scripts, a 3D Tennis game (I remember spending weekends locked in my room coding on it), I learned C# and I coded a parallel maze searching algorithm (I was more excited about maze generation than the parallel search, to be honest), and many more.

Then, in 2004, I graduated University and moved to Bucharest. I started as a Web Developer managing an application for a British client. Soon afterwards I saw the job announcement for Ubisoft and I got a job there. In Ubisoft, I participated in quite a few projects, working on physics, animations, AI, pipeline, network synchronization. I got into the lead programmer role in 2007 and then, in December 2008, I became Producer. Soon I am going to finish my 4th project in this position, still working with Ubisoft, but with a team in Ukraine. I am writing this post from my hotel room in Kiev, on a hot summer day, 10 years after I got my first full time employment, looking forward to the new challenges that lie ahead.


(1) I added Java here because discovering it represented a significant turning point in my professional growth. At the same time I was also discovering the Web and cross-platform development, Linux, productivity and the need for easy deployment. Later, I've mostly abandoned the language in favor of C# (initially) and C++ later. Therefore, it has been many years since I've written a program in Java.

No comments: