2025-06-26
1. About Me
I am a programmer. It's hard for me to be more specific than that, since I have roughtly the same amount of experience in quite a few fields, like parsers and interpreters, graphical and command-line tools, game dev and website development. This is, most likely, just because I often make small -- weekend -- projects, and have only a couple larger ones. Plus, I have only been coding for 5 years or so and as a beginner there just isn't that architectural intuition, which allows bigger code bases to be written before they devolve into spaghetti.
Now, to be more specific, I have made parsers for: HTML, TOML (which is also my most tested project), and my own interpreted programming language in Java, which, I will cover in more detail in another blog. I have also finished the parser for my "future" compiled programming language in C. Although, this specialization seems to be very rare in the job market. But it has been very addicting to me... Since the problems are familiar, but also unique, there are easy wins, but also deep issues to lose sleep over. And the problem space is also so pure (until you need foreign functions).
If anything, I probably have the most experience with making random tools. I am pretty sure, that as of the time of writing, I have used Java for my programs the longest, but I should have most programs written in Odin. Simply because things that used to take me a week or a month, like WallpaperTODO2, ClipEditor or img_to_ascii now take me a weekend. For my graphical interfaces, I used to almost exclusively use Swing, but I have also tried JavaFX, Compose, web views and I have also dabbled in just the raw Windows' CreateWindowA API in my C++ phase. Although, these days I just roll my own basic GUIs with Raylib, since it comes packaged with Odin, and I have also been recently enjoying SDL.
Game development was where I, and I assume many others, have started, I used to make small games and code doodles on the web with the extraordinarily simple p5js library. This is where I made, Prediction Game -- where you scroll mouse over ships to make them sink. This game is actually pretty unique in that, it is difficult not for the player, but instead for the CPU, which needs to blur all the pixels... Also Deck Game (don't let the water through), Round Game (you're a gravitational object avoiding asteroids) and a bunch of other small ones. After p5, I just went straight to OpenGL (I never want to make games in a tool that is slow at base), I made an, actually, relatively fun game in Java with LWJGL and remade it in C with GLFW & OpenGL. Also, the funny thing about C Asteroids is that the vector class of that game was the moment I fell in love with C. You just make a function and call it. And that's it. There is no Vector interface or rays that extend vectors... If you try to do that, the compiler just goes ahead and slaps you. It enforces simplicity -- until you get addicted to macros... Which, well, I am now making foreach, Array
2. Languages I Have Used
I am pretty sure, that my most used language is still Java and my biggest project is, somehow, still a Minecraft mod that I mostly finished maybe 4 years ago, but did not really go anywhere... And well Java is still one of my favorites, although, I feel, I may be the only person to enjoy it for how comfy it is... As stated earlier, I have also written a few graphical and command-line tools, as well as games in Java.
For a while now, my favorite language has been Odin. At least, as of writing, it's a very rare language, but, if you can imagine all the best parts of Go and C, well Odin is not far off. The syntax is as simple as it can reasonably be, the build system is: odin run .. Libraries are directories and the compiler is packaged with Raylib, SDL, OpenGL, Vulkan and many other "annoying to include C++ libraries". Anyone can just read the source code to most everything in the language (I came to Odin from C++, Rust and JavaScript...). I could go on about what makes this such a lovely language to me, but for the sake of brevity, Odin is also my second my used language, easily.
I've used Kotlin to make an MMORPG (well, the "Massively" and the "Multiplayer" and the "Online" parts were only plans for the future, but you get the idea) Minecraft server with my friends. And, actually, for that purpose, Kotlin is not that bad, because Java does not have first-class support for array programming and also does not have operator overloading, which is something I appreciated really quite a lot, while writing
a particle rendering system. And what's even nicer, is that you can tack methods onto other classes, so I did not have to make my own Vector class, instead, I could just use Spigot's Vector and Location and JOML's Vector3D classes. Otherwise, for that project, I remember, that I wanted to die after using their sum types. For every other type of project, I just feel bad using it... I find Compose, to be relatively difficult to grok (obviously, due to my lack of experience with it). I dislike that casting is so strict, i.e.: the type system is so strict. The !! is very distracting to me, when I'm trying to quickly prototype some algorithm. I guess, Kotlin is to Java in the same way C++ is to C to me... (I use C)
I also have some experience in C++. I had a relatively brief period of it being my favorite language. That was when I only knew JavaScript, Java and C++. At the time of writing this blog, I do not even believe, that it is better than C, however I see how someone would choose C++ to get templates instead of void* and operator overloading for vector math.
Now then, C. C is still easily my favorite language (in theory). If I may make the reference, This is How it FEELS to Use C: I make something, I am proud of it. I run it. The compiler gives me a backhanded slap and calls me stupid or the CPU just pouts and ignores me. Then I learn how computers work... OR. I remember something that I learned before and ego doubles, due to my little cryptic macro. The thing I do dislike about it, is the unstandardized project structure and dynamic link libraries. And also, in practice, I find that Odin just kind of adds the things, that I am missing. And Odin, Go and Java do not allow me to make macros, which makes me forget just how fun it is to make them...
I have done some... less-than-commendable things with Go (although, I did report one of my "add-ons", because it had an easy fix). And I am also currently writing a backend for a fast online drawing board with Go. But I have used it. I like it quite a lot. Networking just works™. I don't feel like it just wastes performance. It is very similar to Odin (my favorite language), so I feel relatively comfortable in it.
I have used Rust for small tools or foreign libraries, but I don't enjoy writing Rust, which, I'm sure, is just due to my lack of experience in it, because my main problem with it is, that the language does not allow the things I expect to be able to do. Especially with multithreading, "Like, oh my god, it's fine!" saw a record-breaking performance the rankings of things I have said a lot.
I used to use Unity when I was learning to code and I recently used C# for a mobile app, until I tried to run it on my phone (which at the end) (sad that I then deleted it). Otherwise, I like the extra freedom when compared to Java, and I especially, love the very recent dotnet run. But between Java, Go and C, I just haven't had a reason to use it.
I am also, relatively comfortable in many scripting languages, so, since I've been using Linux for the last year, I have written many shell scripts, I used to use PowerShell and CMD. Although, on Windows, I genuinely, just see no reason to ever use PowerShell or CMD over Python, Go, Perl, even C (just any programming language) for scripting...
I have also, recently, used R for some plotting over data. I enjoyed the language itself a whole lot, but, I never managed to draw anything on screen (I didn't use rstudio) and I also never got ggplot2 to draw anything onto an image, which sucks a lot. Apart from that, I love the array indexing, like: my_table2d[[the_row]] or my_vector[myvector %not_in% c("a", "b", "c")], and the nice standard library: responses <- read.csv("data.csv"); png("diagram.png", width=600, height=400, bg="white"); ...; dev.off() and also, the surprisingly massive amount of mutable things...
And I, obviously, know a bit of Python and a hell of a lot of JavaScript, because, who doesn't? Except, for the 1 in 10 Americans, who think that HTML is a sexually transmitted disease, I guess.
3. Tools I have used
I have been using Linux for about a year or so. On my laptop from 2011, I installed CachyOS (a derivative of Arch Linux, that was, supposedly, faster) and more recently on my main machine I simply just use Arch. I have used Debian, but, I just prefer pacman... I am sure it is a perfect system for Emacs users, though... And I have also installed NixOS, but I quickly understood that that was not for me... But, by now, I am relatively comfortable with Bash scripting, systemd, ssh, nginx, virtual machines, and, I guess, reading documentation...
Before Linux, I spent my time trying to make Linux out of Windows 10. But I never quite managed to replace the window manager and the file system (to stop using that godforsaken C:/). I technically never stopped writing my f file explorer. And, at some point, I had even started work on my own command line. Apart from that, I found that GlazeWM with Zebar (and some AHK) mostly works as a tiling window manager -- but it is still clunky. And besides that I could never get existing terminals to feel good, because the paths in Windows are just awful! 49% of my configuration files are in ~/.config, while the other 50% are in C:/Users/me/AppData/OneOfTheThree/.... Neovim was also janky inside terminals.
Another tool I often use is git. I have had a few open-source contributors to my projects. Because of my laptop, I have learned to avoid Github's web UI and just use the command line to interface with it. I, like everyone, sometimes need to merge files that only I work on... It is pretty obvious to me how to git bisect and why I should squash commits.
As for code editors. My current one and my favorite one is Neovim. Vim motions are genuinely amazing and I do not see how I could ever, willingly, switch from modal editing. I also, use IntelliJ for Java and Kotlin, because, the LSP is just so good. I used to use Visual Studio Code as my general editor, Visual Studio & Code::Blocks for C++ & I have tried a bunch of lesser-known editors, like the Focus editor.
Since I did not mention these in the languages section, I am still comfortable with LaTeX, I wrote my high school math "roundup" with LaTeX. I love Typst and use it for every document I can. I might as well mention, that I know Microsoft Word, Markdown and HTML(I consider HTML to be a document format, I am sorry).