Thoughts on Programming Langguages

26 minute read Published: 2026-04-16

What are the programming languages I have used and what do I think about them?

Table of Contents

Java

How I learned Programming

When I first learned programming I messed with a simple visual basic text adventure. It only ever made it two interactions deep but basic was simple and easily accessible on a windows computer I had at home.

Mod 1 - Redstone Torch Fix

After that I got super into Minecraft and that is where a majority of my programming experience pre my current job came from. I initially worked with java code for a simple Minecraft mod that just prevented the in game redstone torches from burning out. Back then (in 1.0 or 1.1 I don’t really remember which) redstone torches had the current functionality of burning out if they were cycled too quickly but the code did not work correctly on super low end hardware and would randomly burn out even though the timing was correct. I was working on a simple in game clock using t-flip flop circuits to count and kept having my counters brick when the torch burned out. Back then you could simply open the Minecraft.jar and pull out a file and make a change before sticking it back in so that is how my first mod ended up working.

Mod 2 - Mystic Additions

My second mod I worked on was an attempt at a magic flavored tech mod. At the time I was super into mods like industrial craft and build craft and wanted to make something in the same vein. That is how Mystic Additions was created, you can still see the source code for this mod on my github! I learned through youtube tutorials, posts on the Minecraft forums and a bit from some IRC channels. I initially coded the app on this really low end netbook that we were given in highschool. I am pretty sure it was some kind of acer aspire 1 if anyone else has had the misfortune to use lol 🤣 I managed to convince the IT team at school that I could be trusted with not running windows on it so I got the blazing fast speed of ubuntu. It was so much better then windows and also gave me admin access so I was able to get java installed and setup MCP to make a very low end mod coding environment. Initially I used the gnome text editor and just ran the compiler from the terminal, but eventually I got sublime text installed and that was much better.

Let me tell you, learning to code with just a text editor, no code completion and sometimes helpful, sometimes not helpful at all compiler messages was an experience. Remember the mod had to both compile on the terrible atom processor but then I also had to test it by running minecraft on the thing. I synced the files between the netbook and my home computer so that I could work on code at school and then I mostly worked on visuals at home as not only did minecraft barely run on the netbook but also there was no way I was doing image editing on the 10“ screen. I am pretty sure that at one point the main popular modding library changed from modloader to forge and I ended up doing a full rewrite to port the mod to the new api. Forge was a very robust api and felt very much like an actual production api in many ways. Using Forge forced me to learn how to conform or work around a large api maintained by people with strong opinions.

The main thing I learned with this mod came from the Minecraft 1.3? update where they changed the client-server model. Previously when running single player and not connected to a server, all sections of Minecraft could talk to each other, if you were making a gui you could just pull directly from the data layer of the game. With the update however they changed single player to run a pseudo server in the background and all client side code could no long directly access the server data layer. This forced you to learn how packets worked and how to maintain stateful data in sync between client and server. The upside was that once your mod was working it was very easy to allow it to work in multiplayer as well as singleplayer. I even ended up setting up a server with some friends and playing through the mod. Oh I just realized I never really explained the premise of mystic additions, the goal was to add a full magic/tech mod that required no generation whatsoever. That way a user could just drop the mod into an existing world and get started immediately. There was also the benefit of not having to mess around with configs to get new block ids working and generating which was a huge issue at the time when making a mod pack.

If you would like to check out the repo, the link is Here

Mod 3 - Better Hoppers

My next mod was a challenge to myself. I had not really gotten item movement working in the previous mod and so challenged myself to rewrite the Minecraft hopper code to be more performant. This was a somewhat fun, somewhat frustrating project. The majority of the basic hopper latency at the time came from the ability to drop items into the hopper, so rewriting that for a event based instead of polling system made it much faster. I also worked on changing the logic of moving items themselves. In the end my hoppers that ran at 64x the speed of regular hoppers were still more efficient in terms of overall tick latency.
Link Here

Mod 4 - Advanced Utilities

Now we get onto my biggest mod, that I put the most effort into. The premise was a fully featured tech mod that could run standalone or as part of a large mod pack. Initially I setup lots of ores to generate that would cover 90% of all mods at the time along with generation settings in the config file. This coverage and ability to changing rates allowed my mod to replace the world generation of all other tech mods you wanted to use. I also setup all my resources correctly so that they properly translated to other mods. My copper for example worked as copper for all other mods and anything I made with copper could use any other copper. The cross-compatibility made it fun to make a mod pack with. I learned a lot making this mod, it started off simple with a flexible, extensible tool system. The tools allowed for modular parts when creating them and used their own logic for durability and harvesting, which gave a lot of control wile making the mod. I took the modeling skills I had learned making the admittedly crude machine models for mystic additions and put my full focus on having every block render a custom model. The custom models lent some professionalism to the mod I thought and it was a major part of the workflow, every new machine first started with its model before any other code got written. The mod ended up including code from better hoppers when it came time to make the tubes. The tubes were hoppers that did not pick up items, but would work in all six directions instead of the normal down,left,right,forward,back of a regular hopper.

The next major learning opportunity came with all the real time gui rendering the mod did. The mod included a version of a power armor system. Each piece of the system equipped, both armor and weapons, changed the on screen gui. Not only that but the gui had to keep in sync with the actual server-side data layer. There was a lot of work put into network communication for this part to work and I had a lot of fun working on the GUI. Along with the gui I also learned a lot about the Forge fluid system at the time, and actually helped Ellpeck with the fluids for Actually Additions if you have played with that mod.

The last major part of the mod and the most recent before I ended up abandoning it when Minecraft changed the rendering model, was the creation of the configurable recipes and consumption settings. These settings in the config file for recipes allowed the user to completely adjust the recipes for not only the regular crafting table but also allowed for any number of custom or adjusted recipes in the mod added machines as well. I was inspired by craft-tweaker at the time and wanted to offer compatibility with that, which I did, but also I wanted to offer the ability to have that level of configuration without needing another mod to facilitate it. This custom configuration was the last update I made for the mod and I was pretty proud of the parsing system I made for it!

Link Here

Current Thoughts

Now it has been many years since I worked with Java. I would eventually maybe go back to some of my minecraft mods, even if only for nostalgia. Java was where I really learned to code and its influence shapes how I prefer to code today. Learning with a strictly typed language has made it much harder for me to appreciate the more loosely typed languages. I do find myself running into lots of issues with javascript for example because I assume the type is what I intended instead of whatever javascript gave me. The boilerplate requirements of java really have never bothered me and leant structure to how I thought about the code, learning with it has made dealing with boilerplate in other languages easy to work with and unlikely to bother me. I also think learning with minecraft modding, which at the time could have only been done with java, really helped me with my current work. The need to work within an api written by other people and with sometimes hard to decipher or missing documentation is actually, in my experience, very close to real world work of corporate software lol 🤣

I do recommend using java to learn coding. Being strictly typed it does teach you a lot of fundamentals of the craft, however you do lose out on learning memory management because of the garbage collector. This is less of an issue now then it was back when I started or even before that. The most popular languages in use now are javascript, python, and c# none of which have lower level memory management.

Javascript

Javascript is probably the programming language that I have written the most of at work. I had used it way in the past with jQuery back when that was big lol, but now I am mostly using it as a scripting language in google workspace. As a scripting language for workspace it works pretty well, google’s api for manipulating the various parts of workspace are fairly robust and allow you to do lots of things a spreadsheet really shouldn’t do 🤣 The main use I get out of it is as using the spreadsheet for the front-end of an automation app. This works so well because our ERP vendor uses google data warehouse and therefore we can use BigQuery SQL queries to extract data from the tables directly into sheets. Once the data is in sheets and set to auto refresh, the script of the sheet can take over. Two kinds of apps run using the sheets, user facing ones and fully automated ones.

The main issues I have with javsacript come from its variables. The wishy washy-ness of the variables being able to just be a variable and then the automatic upshifting / downshifting of types can really screw up what you are trying to do.

User facing

A lot of the user facing javascript I have written are just script automations for regular spreadsheet work. Replacing sheets formula with javascript. This results in a more robust output, with easier control on the creation end and an easier interface for the user as input requirements can basically be anything. The majority of these sheets were created to replenish store inventories from the main warehouse.
The ERP system required a very strict format of csv to import that was very difficult to create manually. I ended up making a sheet that displayed all the sales and inventory data needed to make decisions and then took in numbers entered in the input columns and then generated the correct formatting for importing into the system. Recently this system has been upgraded to auto suggest quantities to send out.

Other user facing sheets are ones that interface with various apis. For example if the ui for a portion of the ERP is bad or non existent then I would create a simpler interface for the person to use.

The most recent user facing project I have taken on is the automatic generation of calendar templates in sheets. Don’t ask me why the calendars are done in sheets when ADT has built in scheduling that everyone could see as that is how they clock in for work. Anyways the calendar had to have a very specific visual format, it also needed to display shift information in the form of rows underneath the day in the calendar with one row for each shift for the day. I also needed to be able to insert holiday day names at the very bottom of the day display. All of this information is very complicated and not in a format that is conductive to programming lol.

The main issue was ingesting the shift information, as it is stored in manually made calendars in sheets that I was attempting to automate the creation of instead of anything more sensible like a list. Luckily for me the majority of the work for actually formatting the months and days correctly was handled by what I think is the best part of javascript: the date system. The date system in javascript is so easy to use and you can easily tell that people who had to write all kinds of date hackery for ui made it great because of their experiences lol. For example if I have the date 01/01/2026 and I wanted to get the date 10 days later I just say:

var date2 = new Date(date1).setDate(date1.getDate()+10)

Fully Automated

For fully automated javascript scripting there have been a number of uses. The ERP system does not have scheduling capability so everything that needs to run on a schedule needs to be created. The first example of this was the automation of inventory counts. The ERP only creates inventory counts when something goes wrong while a user is using the system, these trigger based counts do spot fix the exact issue that was run into but because the entire system was built on the assumption that nothing ever goes wrong it was no where near enough as it did nothing to prevent running into the issue and only fixed it afterwards.
Since I had so much success in the replenishment sheets I was asked to see if we could automate the inventory counts based on various data points gathered from the system. The main ones being ranking products based on how many times it was likely they were touched, for example: Sales, Movements between locations, receiving transferred inventory etc.

The other major automation project that included some great html string hackery was when I was asked to migrate our reporting for store managers to a better system. By default the ERP vendor told us to make our reports using looker studio. I do not know if you have ever used looker studio which is completely different from looker but looker studio is the free version google made after buying the good looker and made it worse so it works about as well as you would expect.

I took the challenge and started writing the SQL queries that would power the reporting. After getting all the queries into one google sheet I then started the real javascript, I built an html template page that had the layout and styling I wanted and then tokenized it into string constants. With that done all I needed to do to build the emailed report was make one really really really long string in javascript. The emailToSend string first got the headers added and then as each portion of the report came up I either added the required string constant containing a portion of the required html or a value derived from the stored SQL query results. This is a terrible way to do server generated html but it works for this purpose lol. I had used this approach before when I worked on my own static site generator in C# and therefore I started with an idea of how to attempt it.
HTML was chosen as its super easy to format out in an email with inline styling, especially as emails are pretty limited in the data they can contain. My favorite part of the reports has to be the line and bar graphs it generates using just data, html and css. The end result is super hacky but I would love to go over it in detail in another post sometime.

Python

Python has been so useful at work and at home. I was never fond of how bash/terminal/batch scripting worked so having a language that is so quick to get running and working has been really nice. I first started using python as just a way to quickly script something, the lack of any build setup and the ability to just run through the terminal instead of a browser console if I was using javascript made me start using it. The portability of python scripts also is why I end up using it for deploying directly to non mobile devices. If python is installed in windows for example I can just move over a zip with the script and a batch file to run it and the app is now installed. The huge number of libraries is also great and get projects working very quickly. I am a huge fan of the pandas library and kind of default to python if a spreadsheet needs reading / fixing. Its much faster then trying to use apps script in a google sheet.

The main issues I have with python stem from two things. First is the variable system, as seen above with my praise of java’s variables you probably already know that I don’t like python’s variables. Having both non explicit variable types but also hard requirements for some things really drives me up the wall. Having to run str() on everything that gets printed is my main issue lol. The other thing I really really really dislike with python is the significant whitespace. Please just let me use curly braces {} and be done with it. Having to have the correct tab spacing on each line both causes issues with smaller screens and work wrap for quick parsing but also is easy to mess up. I much prefer whitespace to never be significant.

Scripting

When I first started scripting with python, it was for runescape lol. I was playing oldschool runescape and at the time calculators for the total price of buying the whole stock of a shop did not exist. (In the game as you buy items from a shop the price increases according to an algorithm and the specific shop’s adjustment value) I wanted to know the optimal number of items to buy per shop so I wrote up a quick python script that used the formula on the wiki and was able to get my answers quickly! No dev environment, no build setup, no compiling, just write the script and run it and boom your problem is solved!

When it comes to work, the first real use case for python that I had was during the transition from our old inventory software and the current one. Something had gone wrong with the import of sales data from the old system to the new one because of a data formatting issue and we were not going to get any help from the old system to format it correctly. The main issue with just fixing it in excel or sheets was the .csv file was over 1 million lines long. Excel just hung when trying to open and sheets refused to import it either. I quickly threw together a script that used pandas to load in all the values in a column just to see if python could ingest that data. It did end up working which was great! After taking in the other columns and setting up filtering to find the malformed data and then fix it I was also able to break up the imports into year separate files so that anyone was able to open them and check them over.

This style of scripting, ie data manipulation with csvs is the majority of the scripting I do at work. I recently through together a script using pyplot to render the banner / icon for this site and that was pretty fun.

Printing

The majority of the python in active use every week at my job are python scripts I wrote to generate barcode tag pdfs for printing. Our inventory software has significant limitations when it comes to printing barcode tags and the company does not sell a lot of items that come pre-barcoded with a upc so we have to tag the items ourselves. This necessitates being able to make our own pds and then print them with zebra barcode printers. I started the pdf project when it became untenable to print out the randomly requested tags that the stores needed in the warehouse. Each week every store would submit a list of product codes and quantities for a specific type of tag that would then get printed out and sent with the replenishment shipment. The issue was the inventory software could only print one product at a time so going through a list of more then a couple products would take an extensive amount of time.

I started with python because I wanted an easily deployable solution. I did not have any development environments setup besides using vs code for javascript google apps script and also did not want to deal with the hassle of compiling for different platforms as I was working on an apple silicon mac (my work provided laptop) and the target systems are x86_64 windows computers. Python nicely sidesteps this issue by just installing python on the target with the right libraries and then running the script with a batch file the user can double click. I also implemented google oauth so that instead of having to download and move csv files from google drive the script would just directly read the sheets that the users were already interacting with. That worked out pretty well and the data loaded perfectly into pandas dataframes which I already had a lot of experience iterating through from the scripting work I described above.

When it came time to choose a library for the pdf creation I went with fpdf2 after trying a bunch. Fpdf2 was simple to setup, you just create a page object with parameters describing the rotation, measurement format and then the page size so for example it would be:

pdf = FPDF('P', 'in', [2.43,1])

This would create the pdf object with an orientation of Portrait, measurement of inches, and a page size of 2.43“ x 1“ After that all that was needed was to add a page to the object as needed and then write out either text or images to the page. Writing to the page was as simple as telling it the x,y that you wanted to write at and then tell it to write the text. The image support was also super helpful as the barcodes needed to include the qr code containing the product code. Once all the pdfs are created the user can then print out the tags and get them sent.

Kotlin

Android app for Work

My kotlin experience starts and ends with making apps for work. The front end for warehouse management for our ERP is both not well thought out, runs badly in some critical circumstances and required a license for every device. As a result using the software in the real work was both a headache and pretty expensive. I started off working on simple proof of concept apps that would replace one function of the WMS at a time. Eventually that became untenable for actually using so I migrated the disparate parts into one whole app.

The inventory app IA as I’ll abbreviate for the rest of this section integrates the full store employee facing warehouse management functions and all but one of the warehouse staff WMS functions. Moving items, doing inventory counts, receiving and sending items, all are included.

My main takeaway from using kotlin for the IA is that it is very very much java. The boilerplate is all there and somewhat even more so. Take making a network request to a REST api. You need to define in full both all the returned values and what variable type they map to, many times requiring you to make custom data object types, but you also must define ahead of time whether or not every variable is nullable or not. Does the api now sometimes send null for one variable you are requesting instead of an empty string? Too bad the call crashes out of the try catch.

That has been my biggest issue with using kotlin really, the rigidity of the language has not worked well with our ERP software because of how often its api changes. I know that is not a problem of the language, but the inability to be flexible where I am working with an inconsistent API has been rough. The end result of the new app was the yearly inventory going well for the first time in three years so I was able to solve an actual business problem. In terms of android studio and making android apps the tooling and libraries are much better then when I last tried to make an android app before kotlin was out.

Kotlin is more easily written then java, and has less boilerplate even if it still has a good amount. I would recommend using it for android app development and I could see learning with it. As a strongly typed language it would be good to learn even if you do not learn memory management due to the garbage collector.

GoLang

First time using

I have never used golang before but a recent project at work pretty much necessitates its use. I was able to talk my boss away from using php or python lol. So far my first impressions are that it is very java/kotlin. The best description I could come up with is someone loved java but wanted the power of c++ so they made golang. The first real programming I did with golang was creating an importer. It ingests csvs and then converts the data before writing to a docker based postgresql server. It was pretty easy to get up and running like how c/c++ are, there was not a ton of the java boilerplate to get a command line app up and working. The whole process was get the includes needed, write the code and then run it. My main take away so far is that golang is easy to write and super super fast. I was able to ingest 1.7M lines of csv into multiple sql tables in less then a minute.

I am interested in learning more about golang as I move forward with this work project. There will be more entries about this project and golang going forward I guarantee, as I can see many times in the future where I will want to rant about the project especially as the scope inevitably balloons past its initial scope.

C

Teaching myself

I started learning C last year. It was initially something to do when it was super slow at work and because C is always cast as the ‘Hardcore’ language. I began with a simple ncurses interface. Making one that rendered correctly and was interactable was pretty fun. I learned a lot about loops and allocating variables.

After learning through that project I attempted the first day of one of the end of year code a day challenges purely with C and the standard library. This actually went well and was a fun stream to do. I ended up getting sick afterwards and couldn’t do more challenges but the one I did involved a lot of looping and dynamic variable allocation which is interesting to do with C.

I would recommend trying out C if you haven’t yet. If you have a desktop OS ie linux, windows, mac, you have everything you need to easily get started with C. I only used vs code and a compiler but I am sure there are setups to have code completion and the like.

Wrap update

The End!

Thanks for reaching the end of this long post! I appreciate anyone who read most of it lol. I started this post as a way of compiling my experiences with programming that started to tangent out of the first post on this blog. The intention was to prevent this entire post from also being part of that one. Now that I have another post together I would like to get more into getting posts out regularly. I have been thinking about maybe writing one on OSRS (oldschoool runescape) as I am nearing another 99. I have also been thinking about writing about MTG (magic the gathering) as I am going to be going to my first RCQ tournament soon with a Modern deck. Anyway check back for more posts sometime! There is an RSS feed if you want to subscribe that will probably be the easiest way to get notified of new posts.