< My Programming Journey

Written: 2023-10-02
Updated: 2023-12-29

My programming journey started about 10 years ago when I was 13. I wanted to become a hacker, like the ones you see in movies. So I started making pop-up message boxes in Visual Basic and created useful tools with Excel formulas. Then I started making scripts in Windows Batch, often with malicious intent >:)

Since writing this, I found two of the scripts in my GitHub gists. [ScriptMaker.bat] [Overhaul.bat].

I started messing around with Kali Linux, and at one point I even made our school network shut down briefly, using tools like Metasploit, Aircrack-ng, and much more, of which I just copied commands from YouTube. This is also how I was introduced to the names of more programming languages, like Bash, Ruby, and Python, although it'd take longer before I did any "serious" programming.

I also tried to make websites using only HTML and CSS; this is where I realized that design definitely wasn't my strong side, but it introduced me to yet another area of programming.

A couple of years later, I think sometime in 2016 or 2017, I was at a LAN party in my hometown. The administrators had arranged for NC3 (National Cyber Crime Center) to participate and teach us about privacy and online safety. At one point, a buddy and I were talking with one of the "officers," where I jokingly asked about the consequences of DDoS'ing my friend... the officer did not find that funny. But we talked some more about penetration testing, and he told me that Python would be a good introduction to programming; this is where it all began.

I started programming in Python, creating small scripts, and then also experimenting with pygame and more. I began doing some software development, crafting GUI applications using Tkinter, until I stumbled upon PyQt. It looked much better than the old, plain buttons in Tkinter (which were the default at that time). During this period, I also delved into streaming on Twitch. One thing I quickly noticed was that the widely used Danish payment system "MobilePay" didn't have an easy way to integrate with Streamlabs to display donations on the stream. There was one existing solution, but it required payment, and I wasn't a fan of that.

Fast forward a few months, and I released MobilePayAlerts [itch.io] [YouTube]. It's a free tool to make MobilePay transactions show on the stream as regular donations. I rewrote the project three times, going from Tkinter to WxWidgets, from WxWidgets to PyQt, and then from PyQt to PySimpleGUIQt. I quickly realized that it was not only useful for many Danish streamers but also received attention in Danish Facebook streaming groups, along with support emails and private messages. As of writing this, the project has 5400+ downloads. I even uploaded the project on GitHub by using the upload file button on the website. This was my first real introduction to another type of version management that wasn't Dropbox or OneDrive.

My next area of interest was game development. I explored many game engines, but the ones I found easiest to use were GameMaker and LÖVE / LOVE2D. I never created anything really big with either one, but I did release some extensions for GameMaker, which can be found on my GM Marketplace profile. I also released "lazypong" on Google Play, made with LOVE2D. It was basically pong but with two computer opponents, no speed increase, and they would never lose. The paddles and ball would slowly change color, and there would be some nice royalty-free music. Since publishing the "game," it has been removed, either because I deleted it or due to some Android SDK changes; I'm not quite sure, but it's probably for the best anyway. The app ended up getting one rating with 5 stars... which happened to be by my dad. This is also how I realized that developing apps for Android fucking sucks, and this remains my current opinion.

I started experimenting with various programming languages, jumping from one to the next, recreating the same project in each language. If you need a Twitch chatbot and want to read the chat from the command-line, I've created applications for this in Ruby and Rust. I'm pretty sure I made similar ones in Lua and Python as well, but most likely deleted those several years ago :')

While studying for The Higher Technical Examination program in gymnasium, we briefly dabbled with Arduino. My first C program (which wasn't a Hello World application) was made in this class, marking my introduction to C.

Exploring various game engines, I came across raylib, a great and straightforward game engine for game development in C. The creator of this project, Raysan, has also developed a simple GUI library called raygui, that provides many useful UI widgets. Even though we were primarily working with Python at this point, we had to create a project in the programming subject. I decided to create mine in C with raylib. It was a graphical budgeting application, available on GitHub. This is where I began to understand pointers, memory management, and gained insights into how a computer actually works.

During my studies, I participated in Google Summer of Code, an annual event for students 18 or below to contribute to open-source projects. You could win a t-shirt, hoodie, or even a trip to California or something like that, for outstanding contributions. This experience made me realize that I still had much to learn in programming. I learned to submit pull requests and started using Git with Sublime Merge, but it wasn't enough. Understanding and analyzing large codebases were new challenges for me. Most of my contributions during the event involved documentation and small tasks such as grammar. I ended up receiving a purple t-shirt.

In the subject "informatics," we also learned about JavaScript and PHP. I had tinkered with JavaScript by this point, but now I had to use it seriously. One of our final projects had to span multiple subjects, excluding "optional" subjects like programming and astronomy. I wanted to code but also had a passion for astronomy. So, I chose informatics and mathematics for my project, creating an astronomy simulation that required a lot of math. I used JavaScript with the p5js library for drawing. [simulation] [source code]

After a period of not doing much, I found myself creating numerous new projects and finishing none (a trend that continues to this day). As I jumped from one programming language to another and explored new technologies, I stumbled upon V / Vlang. It seemed promising—it was compact, compiled quickly, and they were even developing a small cross-platform UI library. I started contributing to their built-in graphics library, enhancing drawing capabilities and adding shapes. I also actively participated in the community Discord, offering assistance whenever possible. Before long, I received an invitation to join the V organization and officially became part of the V development team. At this point, I was well aware of the controversial history of V. However, that was more than two years ago; how bad could it be now? Fast forward a bit, and I left the project on the same day as another V developer. The departure was due to moderation issues and frequent missed deadlines. Searching for messages that contain "this week" or "this month" by the founder in their Discord will reveal what I mean. At one point, I counted more than 30 missed deadlines by the founder.

Since then, I've created a review site using Go, with a focus on privacy, speed, and lightweight design. Development has been largely inactive during the last three months as of writing this.

# Present

So, what am I currently working on? Well, as always, I'm juggling too many projects at once, and completing only a few. Currently, I'm in the process of creating a programming language called "Cito," which is one of two programming languages I plan to develop.

EDIT: I take it back :)

# Conclusion

It's quite amusing; I discussed my journey with one of my friends, who summed up my experience perfectly with a single quote: "Jack of all trades, master of none." If I could go back, how would I approach programming?

There are plenty of project mentions I have left out in this post because it would simply be too much. I've created several Brainf*ck interpreters, participated in the Wheel Reinvention Jam (2022) without finishing anything, worked on several games, none of which are nearing completion, and several websites that haven't seen the light of day.