sebastiano.tronto.net

Source files and build scripts for my personal website
git clone https://git.tronto.net/sebastiano.tronto.net
Download | Log | Files | Refs | README

20-years-of-programming.md (9703B)


      1 # 20 years of programming
      2 
      3 The first time I wrote some gibberish on a computer, compiled it and run
      4 it was over 20 years ago. In this post I want to tell you the story of
      5 how it all started, and how it continued.
      6 
      7 ## It started with BASIC
      8 
      9 It was the end of 2005, I was 11 years old. A friend of mine shared with
     10 me this strange program that let you *create other programs*.
     11 
     12 This program was called
     13 [DarkBASIC](https://en.wikipedia.org/wiki/The_Game_Creators#DarkBASIC).
     14 It was an IDE with its own language and game development framework. This
     15 framework made it quite easy to load pictures, sound and even 3D models,
     16 but we did not go much further than making a couple of short text
     17 adventure games, and other less useful programs.
     18 
     19 Although I guess one of these "less useful" programs was somewhat
     20 interesting, since it ultimately made me learn a proper programming
     21 language. I forgot what exactly this program did, but at some point
     22 you could input a password. Later in the execution, if you typed this
     23 password wrong, it would delete the `C:\Windows` folder from your PC. And
     24 sure enough, I tried it and got the password wrong on the very first try.
     25 
     26 Ah, those were days. My only complaint about DarkBASIC is that it bundled
     27 a lot of stuff when it built your code into an executable, so that even
     28 the most minimal program would result in a *huge* 1.5Mb binary. Just
     29 large enough not to fit in a floppy disk. So it was kinda hard to share
     30 programs with my friends.
     31 
     32 Anyways, my parents were not happy with my amazing Windows-erasing
     33 program, as we had to pay someone to fix the family PC. But my mom
     34 offered me a deal: if I promised never to make harmful software again,
     35 she would buy me a book to learn a real programming language. In case you
     36 did not know, in 2005 you learnt programming languages by reading books.
     37 
     38 ## The Java phase
     39 
     40 ![A picture of my first programming book. April 2006.](./java-book.jpg)
     41 
     42 According to the [TIOBE index](https://www.tiobe.com/tiobe-index/),
     43 Java was the most popular programming language in 2006, and so it
     44 was chosen as my first *real* programming language.
     45 
     46 The book explained how to write, compile and run code the proper way: no
     47 fancy IDE, just notepad and command-line tools. It took me days, if not
     48 weeks to figure out how to add `javac` and `java` to the Windows `$PATH`,
     49 but in the end I made it and I could finally run my Hello World. A couple
     50 of years later I would switch to Linux, where all of this is trivial;
     51 to this day I still wonder why some programmers *choose* to use Windows.
     52 
     53 This pocket book, and another one that I bought soon afterwards, explained
     54 many topics, including object-oriented programming and how to make GUI
     55 applications. I don't think I got OOP at the time - it was meant to solve
     56 problems I had never encountered. Now that I have been a professional
     57 software developer for a few years, I don't think I get it either -
     58 it still does not solve any problem I have encountered; if anything,
     59 it creates a few more.
     60 
     61 I managed to recover some of the
     62 programs I wrote between 2006 and 2010 in [a git
     63 repository](https://git.tronto.net/ancient-projects/file/README.md.html).
     64 The most successful one is JBriscola, a single-player game of
     65 [briscola](https://en.wikipedia.org/wiki/Briscola) with a decent AI. It is
     66 actually quite fun to play, and a few of my friends played it regularly
     67 back then.  It's so cool that they still run on a modern Java runtime -
     68 good job, Java! Great backwards compatibility.
     69 
     70 At some point in 2009 or so I bought a third, more advanced Java book.
     71 My goal at the time was learning how to make more complex GUI applications
     72 - something I don't find particularly enjoyable nowadays, but at the
     73 time I was having a lot of fun with it. But I never read past
     74 the first half of this book, because my focus shifted to [programming
     75 challenges](https://en.wikipedia.org/wiki/Competitive_programming).
     76 
     77 ## Competitive programming
     78 
     79 I don't remember exactly how it happened, but in 2010, in my second
     80 year of high school, I qualified for the regional phase of the national
     81 competitive programming circuit. In school we were learning Pascal (for a
     82 grand total of 10 hours a year), but I thought that with Java knowledge
     83 it would have been better to pick up C or C++, the other two languages
     84 allowed in the contest. And so I did: I learnt just enough C to get by,
     85 and somehow I qualified for the *Olimpiadi Italiane di Informatica* -
     86 the national final.
     87 
     88 Not only did I qualify, but I also did pretty well in it: I ended
     89 up in the top-half of the ranking. Considering my young age (the
     90 competition was open to students of all 5 years of high school,
     91 and I had just started my 3rd year) I was invited to take part in the
     92 [IOI](https://en.wikipedia.org/wiki/International_Olympiad_in_Informatics)
     93 preparation stages. A new world opened up for me.
     94 
     95 In these preparation stages, to which I was invited for three
     96 consecutive years, I learnt a lot about data structures, algorithms and
     97 computational complexity. I used C++, although it was very much "C with
     98 [STL](https://en.wikipedia.org/wiki/Standard_Template_Library)" - I dont
     99 think I wrote a class or even a struct at the time. But I did not care
    100 much: C++ was just a tool for a specific task, like Java and DarkBASIC
    101 were. The task was writing text adventures first, GUI programs later
    102 and it was now solving puzzles.
    103 
    104 In 2012 I qualified for the IOI as a B-team member - the hosting country,
    105 which was Italy that year, was allowed to bring a second team who could
    106 compete without appearing in the official rankings. In the end that was
    107 a good call, as all the members of the A-team did better than me - my
    108 [results](https://stats.ioinformatics.org/people/2818) were not amazing.
    109 
    110 ![A picture of me at IOI 2012](./ioi.jpg)
    111 
    112 I enjoyed this part of my programming journey a lot. You may think that
    113 this cemented my passion for coding and turned me into a programmer. But
    114 somehow, it did the opposite.
    115 
    116 ## The Math break
    117 
    118 Solving programming puzzles made me enjoy problem-solving, logic reasoning
    119 and formal proofs more than coding. I was also enjoying Math contests
    120 during high school, and these two things made me realize I wanted to dive
    121 deeper into the theory, rather than just writing code. So I decided to
    122 sign up for a Mathematics program at University.
    123 
    124 During my first year (2013-2014) I kept coding a little bit: I was
    125 solving problems on [projecteuler.net](https://projecteuler.net/),
    126 I learnt some [J](https://www.jsoftware.com/) (an ASCII-based
    127 [APL](https://en.wikipedia.org/wiki/APL_(programming_language))
    128 clone), I started porting JBriscola to
    129 [Scala](https://en.wikipedia.org/wiki/Scala_(programming_language)) -
    130 I wonder if I still have that code somewhere.  I even looked into Rust
    131 and Go, two languages that had just been announced.  But I lacked the
    132 motivation for starting a new project, and soon I would drop all these
    133 new languages - except J, I still use it as a fancy desktop calculator
    134 from time to time.
    135 
    136 For a while I tried to follow also my passion for computer science by
    137 taking elective courses in OOP, Algorithms, and Functional Programming.
    138 But it was not easy to find a study program that combined the two
    139 subjects in way I liked. I ended up signing up for a pure Math master:
    140 the [ALGANT](https://algant.eu/) program.
    141 
    142 Between 2015 and 2018 I did not write much code outside of the
    143 little that was needed for my studies. As a noteworthy exception,
    144 I did take part in the North-West Europe regional phase of the [ACM
    145 ICPC](https://icpc.global/), a programming contest for university
    146 students. But even then, I put very little effort into practicing for it -
    147 I just had other priorities at the time.
    148 
    149 ## Back at it
    150 
    151 After graduating, I doubled down on Math and decided to get
    152 a PhD.  But at the beginning of my PhD, in 2019, I wrote
    153 some code for work: my supervisor and a colleague of mine had
    154 devised an algorithm to compute the degrees of certain [field
    155 extensions](https://en.wikipedia.org/wiki/Field_extension),
    156 and I [implemented
    157 it](https://git.tronto.net/kummer-degrees/file/README.md.html).
    158 
    159 I don't know if this is what got me back into coding for fun, or if it
    160 was just a matter of time, but by the end of 2019 I was already thinking
    161 about writing a Rubik's cube solver. 6 years and two rewrites later,
    162 I am still working on this project, which became a great sandbox for
    163 learning new topics and a good source of inspiration for blog posts.
    164 
    165 Still during my PhD,
    166 [COVID](https://en.wikipedia.org/wiki/COVID-19_pandemic) hit.  Forced to
    167 spend long hours alone in my one-room apartment, I had more time to code
    168 and tinker with Linux and OpenBSD. A couple of years later I started
    169 this blog. As I was now approaching the end of my PhD, I had to decide
    170 if I wanted to continue in academia or do something else.
    171 
    172 And I chose to do something else: I chose to become a software developer.
    173 
    174 ## Now it's (not just) my job
    175 
    176 When I applied for jobs as a software engineer, I thought there was a
    177 chance I could get fed up with programming and quit it as a hobby. After
    178 all, I liked Math, but when I was a PhD student I did not do much of it
    179 in my weekend or my free time.
    180 
    181 But coding was different. I can't seem to get tired of it nowadays. If
    182 during the week I write C# for a living, in the weekend I work on my C
    183 projects or hack on shell scripts.  If at day I work with Python, at night
    184 I solve puzzles in C++ or play around with [Hare](https://harelang.org/).
    185 When I had a few idle months between projects, I learnt some Rust,
    186 some QT and [ported my C program to WebAssembly](../2025-06-06-webdev).
    187 I listen to programming talks and podcasts while I cook and do the dishes.
    188 
    189 No, I did not get tired of programming. Maybe I never will.