At first, I wanted to start blogging about things related to my job but then I realised how introducing the topic out of the blue would have required explaining How I got into programming and how I use it at work.
So, here is my attempt at doing just that.
I just want to add, that I program for fun and because it makes my life easier. Quite often someone else’s as well. That does mean that I program at work, but as a mean to help getting my job (or someone else’s) done faster and better, i.e. it’s not my main function — at least it isn’t as of this writing.
I belong to the new generations —which means that my early years are actually kind of the new days— hence I have no cool stories about computers that needed a whole room in an University, had no experience with keypunch cards; heck, I hadn’t even been conceived by the time the internet started to get mainstream!
That means that my very first experience with a computer… Was actually an IBM PC! Yep, a somewhat small thing with 64MB RAM and a 15” screen that was able to handle a 800x600 pixel resolution (and 16bit colour depth!).
As the curious kid I was, the first thing I did when we got that thing (running Windows 95!) was to… try and find out what to do with it. Yeah sure, it turned on, you could move the mouse around, make a few drawings on Paint or whatever but… these things had to be able to do something else.
It wasn’t long after its arrival that I learned by heart every single configuration that was available and got bored of the computer. Luckily, a time after that I received a copy of some version of Logo.
Now the fun started! Why draw geometric figures that won’t be precise with Paint, when I had the opportunity of drawing anything I could imagine just by telling that agreeable turtle how to move?
Maybe it was a hidden desire to rule the world and have everyone do as I said but it was a damn good feeling to see that turtle do as commanded. Even when it made something unexpected because, hey, I had told it to do that even if it wasn’t what I wanted.
In other words, it wasn’t the turtle that was an idiot, the problem was the 7 or 8 years old creature between the chair and the keyboard — and at the time I knew it as well.
Later on, I discovered that it wasn’t only that turtle’s nature, it was computer’s nature to do exactly as they’re told (even if you tell them wrong!); the little dictator inside of me was very pleased.
While writing this, nostalgia kicked in and I found a version of logo writer. Here’s a little something I did in the time needed to remember syntax and basic commands:
And here’s the code for that:
cg pu setpos [-200 -95] pd setc 8 repeat 125 [repeat 6 [left 120 repeat 7 [fd 20 right 60]] \ pu fd 60 left 60 fd 40 right 120 fd 20 left 60 pd] pu home setc 1 pd
As a side note, this turtle’s space is topologically equivalent to a donut!
Maturing and serious programming
While starting high school, I felt I had tons of time in my hands and learned how to program in Pascal and Basic (because it’s what I had at hand!), a couple years later discovered Visual Basic and learned to love it, hate it and eventually forgot it — I thought, erroneously, that I’d never need it again.
After that, I went to the University (not this time, the first time) and learned about the existence of Linux. Free Software philosophy, bash, Python amongst other things followed that discovery. I almost immediately fell in love with the Operative System —specially when one of the best professors I’ve ever had introduced me to Debian—. Have used nearly nothing else for my daily life since then.
When I got back to study at another University, notions of scientific programming turned out to be part of the Mathematics curriculum which got me to learn how to program in C.
Currently, I’m at yet another University (this time just an abroad semester) where I get to learn how to program re-usable, generic and efficient scientific software in C++ and some Java which I had already learned for personal purposes.
I’m lazy… yep, not a good thing to say (specially if the section is called “At work”) but there’s more to it than just the definition of lazy. The thing is: I strongly dislike doing things inefficiently.
The way I see it: the faster I finish doing the things I don’t enjoy as much, the faster I get to do something more interesting — or even nothing at all!
That would be optimal in an objective-driven environment, which sadly is not the case at my current job, therefore I’m just… well, more productive.
So, how do I get to be more productive? I just assume that for every single repetitive thing that has to be done than once manually, someone will probably make a mistake at some point — most likely more than once and each time in different sneaky ways.
If the cost in time of automating the task (and then finishing the task in this more automatic way) is roughly equal to the time it takes someone to do the task by hand (including an error check). I just go for it and automate it… Not only I get to have some fun, but I get to be sure there are no errors (or know the kind of errors there may be) and the best thing: it may even be useful later and save us a few hours!
At first, of course, I had no idea how to do such things, nor was I able to estimate the time cost of a task accurately, the latter ability came with time and experience, the former was product of my already mentioned insatiable curiosity and a few hours of research plus tons of hours of practise — most of those hours were my own personal time or dead time at a company.
I had the privilege of being in touch with computers from an early age and always had an interest for programming, being something that somehow suits my personality and way of doing things.
My studies have brought me somewhat closer to the programming world, and by chance my job allows me to do some programming somewhat regularly… Because, who on their right mind would argue against doing something in a day rather than three or four?