diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2026-03-27 09:08:40 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2026-03-27 09:08:40 +0100 |
| commit | 5a101458562ac6fe2fe2be887fb5ac6395793895 (patch) | |
| tree | 3906a3ebd77524a85c92eb4f740b81e06d081fcf /src | |
| parent | 533e86886c9e4f9f583790924dd7e973770eae41 (diff) | |
| download | sebastiano.tronto.net-5a101458562ac6fe2fe2be887fb5ac6395793895.tar.gz sebastiano.tronto.net-5a101458562ac6fe2fe2be887fb5ac6395793895.zip | |
New blog post
Diffstat (limited to 'src')
| -rw-r--r-- | src/blog/2026-03-27-programming-20-years/20-years-of-programming.md | 189 | ||||
| -rw-r--r-- | src/blog/2026-03-27-programming-20-years/ioi.jpg | bin | 0 -> 190323 bytes | |||
| -rw-r--r-- | src/blog/2026-03-27-programming-20-years/java-book.jpg | bin | 0 -> 173876 bytes |
3 files changed, 189 insertions, 0 deletions
diff --git a/src/blog/2026-03-27-programming-20-years/20-years-of-programming.md b/src/blog/2026-03-27-programming-20-years/20-years-of-programming.md new file mode 100644 index 0000000..8e5b1a2 --- /dev/null +++ b/src/blog/2026-03-27-programming-20-years/20-years-of-programming.md | |||
| @@ -0,0 +1,189 @@ | |||
| 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. | ||
diff --git a/src/blog/2026-03-27-programming-20-years/ioi.jpg b/src/blog/2026-03-27-programming-20-years/ioi.jpg new file mode 100644 index 0000000..1b60a19 --- /dev/null +++ b/src/blog/2026-03-27-programming-20-years/ioi.jpg | |||
| Binary files differ | |||
diff --git a/src/blog/2026-03-27-programming-20-years/java-book.jpg b/src/blog/2026-03-27-programming-20-years/java-book.jpg new file mode 100644 index 0000000..a352387 --- /dev/null +++ b/src/blog/2026-03-27-programming-20-years/java-book.jpg | |||
| Binary files differ | |||
