My Journey as Programmer
Ignacio Vergara Kausel published on
5 min, 971 words
I thought it would be interesting, at least for me, to tell my journey with computers and in particular programming. It's a good exercise in retro- and introspection.
Early on in life, I got to use a computer; probably I was around 6 years old. My first memories were a computer my father brought every now and then from his office to work at home. I don't remember many details of that experience, but with my brother, we used to do very rudimentary drawings in WordStar or WordPerfect. Here I did learn the basics of how to move around the command line in DOS.
Skipping forward some years, I was in 5th grade when the school I attended offered a programming extracurricular. It was certainly intended for older students as it was imparted in the high school section and somewhat late in the afternoon. Anyhow, I went anyways as I had interest and curiosity. Most likely, I was the youngest student there. Our teacher was a German man (not too surprising considering I attended a German school) of advanced age, which also did some astronomy extracurricular and probably was the high-school physics teacher. In that class, we used Pascal or TurboPascal and learned about loops, conditionals, variables, and functions. Lessons mainly consisted of writing on the computer what the instructor wrote on the blackboard while the instructor explained the different elements. I fondly remember the green on black screen and how the computer we used didn't have a hard drive; thus, we had two floppy disks, one for the OS and IDE/compiler and the other for my programs.
Since then, I have always been interested in programming but never put much time into practicing it or doing anything of any worth. During my late teenage years, I read books on C, C++, Java, Perl, and eventually, Python. Only the last two ones I did give them a real practical try. In Perl, I did work during the southern hemisphere summer of 2001/2002 in a small company producing a web interface to assist in ISO certifications. Back then, it was a pretty fancy approach to using web technologies.
Probably on that summer or perhaps a bit later, I got introduced to Python by a friend (the same friend who brought me to work on that summer in the Perl). I then used to write a small application to track and review the performance of salespeople over time to assess the impact of the investment in training.
Once in university, I had to take Introduction to Programming, which that semester was given in C#, and had exposure to Maple and Matlab in some mathematics lectures (Calculus and Linear algebra, respectively). Some years later, I took a class on numerical programming, where the examples were done in C, basically following the classic book on Numerical Recipies in C. However, we didn't get too much practical experience since the class was mostly about reviewing strategies and algorithms in scientific computing. Still, it was the closest I had to a Computer Science class, and I remember really liking that class. I was very impressed with all the little tricks used to improve performance, accuracy, or stability. Much later, I took but never finished a lecture on simulating processes (my memory of that lecture is somewhat vague, but I remember learning how to build random generators) where the exercises were given in Java.
For years I was curious and explored Python, and I used it for any small little thing during my Physics studies (2004-2010), and in various research activities I got involved with. This exposed me to the developing Python scientific stack (numpy, scipy, matplotlib), and I saw its evolution and how it became more mature over time. At some point, I took a Coursera class on building modern web applications in Ruby using the Ruby on Rails framework. During my last years researching physics (2013-2016), I even attempted to develop an application/library to perform some fitting and modeling of a particular type of experimental data in the field I was involved. The idea was to provide an open-source alternative to an excellent but fully closed software. Until then, that had been my most ambitious project, but it didn't go very far... maybe someday I'll continue.
Somehow, I kind of always knew that I would end up in technology/programming sooner than later. Eventually, I left the academic world and got my first job as a software developer. My first task was to implement an optimization routine based on Evolutionary Strategies to find better parameters in a scoring process. Given my physics background (I had taken a lecture during my masters called something like Physical principles of evolutionary processes), I felt very comfortable doing that. Of course I did this in Python! On the job, I took on some internal applications written in Go, where I got to be proficient enough to do the job. Still, I never explored all the concurrency primitives that make Go extremely interesting and valuable.
In the last few years, I've developed an interest in Rust. Now, Rust is another beast. Quite exciting language, and given my lack of formal training, it has been quite an illuminating language to study. Again, I haven't done anything with it, but I think just learning and reading about it has made me a better programmer.
I'm excited to see how this journey continues into the future, hoping that Rust becomes a more relevant part. Excited to see how Python and its ecosystem keep evolving. And wishing to be able sooner than later to contribute to open source projects beyond doing translations (Debian) or cleaning/improving/documenting tests (pandas).