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  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  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.