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

Generated with cgit - Back to sebastiano.tronto.net