Join my mailing list!

I'll send out occasional emails with new Articles, Projects, and Updates.

My Path to Programming

Written Wed Dec 09 2020, Updated Sat Jul 10 2021
Recounting my journey of learning to code from the beginning.

I sat alone on a summer evening in my wide-open cave of a room in a small floor-level rocking chair flipping through old forum posts on my 1st generation jailbroken iPad. It was likely thirty minutes until dinner meaning it was nearing an opportunity for me to share all the interesting but ultimately pointless tweaks and hacks I'd found online and through Cydia, the iOS jailbroken marketplace. I would mess with things like changing the system theme, getting retro game emulators, or even the most useless of all, changing things like the transparency of app icons. My family recognized the pointless endeavors of changing such minute details that no one really cares about, but to me, it felt awesome that I could play with the system in these ways and make it do anything I could find on Cydia, so long as it didn't crash of course.

During this time, Minecraft mania was also kicking into full-swing, and as my cringy old YouTube past reveals, I was one of the other millions of kids hooked on it.

Back then, Minecraft PE had no way to import custom maps on iOS. On Android, there was block launcher, and the users had much more control over the device's internal files, but you just couldn't do that on iOS. Through jailbreaking the device, there was a program called iFile that would like users access all of the device's files. This included downlaoding minecraft content and moving it ot the game's folders. With this, I was able to get maps, texture packs. and dive deep into other interesting things in the game's files. This really piqued my interest. I eagerly doug through every app I could find and just played with all the config files I could make sense of. I would change icons or rewrite text files, or just gaze in awe of the mysifying information of binary data that I didn't know how to begin to work with. One day, a friend of mine got me to play a Pokemon clone called Mino Monsters. You basically caught monsters, and could then train and battle them with friends. The app had a paid component where you could expidite training, but t never fealt worthwhile. My friend challanged me to battle him, but I was whoefully unprepaired and din't want to spend loads of time grinding against level 3 peasents. I specifically remember going through all the files I could find in the game's folder until I found ones with text I recognized. I changed the value of XP that my monsters had, and suddenly, I was gaining levels liek crazy. This was one of the most awesome feelings,. I showed up to the battle with levels the game wasn't even suposed to let you reach and blew him totally out of the water.

Awekening

One day, I was browsing the Minecraft forums, when I saw a post about an MCPE modification that added simple modding and scripting functionality to the game. It was called ModPE and it was just a simple tweak that could be downloaded with Cydia. Once installed, you could copy/paste the sourcecode for a mod. Forum users would post mods that could add things like World Edit, a Magic Carpet, and sometimes even new demensions or items. I didn't really understand how the mods worked, but I was certainly fascinated with the code. Changing certain values in the code and then testing them again would often net interesting results, or sometimes break the whole thing altogether. Although I wasn't really programming, I still felt like some kind of wizzard of code taking this game to the fringes of what was possible. These experiences lead me to persue a bit of actual programming. Back in the day, the official multiplayer for the game was limited to LAN, however there were some interesting developments. Someone created an app that would allow you to essentailly tunnel your connect to other users' networks and play LAN, and this was fun for awhile, but the server scene actually sprung up. Someone created a service called PocketMine Realms, which, through some dark magic with iOS certificates added a full page of servers to the game. This community was very underground niche when compared with the majority of people who played this game, so most of the folks on these servers also spent a decent ammount of work getting there. One night while perusing the Minecraft Forums, I saw an ad for a server hosting company offering a free PocketMine server (capped at a max of two players). I remember signing up for that so fast. That platform was my first experience with servers, and I learned all about using a terminal and control panel and manging the config files. PocketMine also had a plugin API, which I spent a lot of time playing with.

Android

At the end of that year, my iPad broke completely, and I decided to get a cheap Kindle Fire, and just like with iOS, spent a ton of time online trying to figure out how to mod it. Fortunately, Android had a much more open platform back in the day, and instantly, I could get all kinds of mods and things for the device. The one I purchased (KFSOWI) remained pretty much unhackable for a very long time, however until I discovered a community for modding it that required a special "developer cable". Here, I was exposed to all manner of android whitchcraft. Rooting, custom roms, SuperSU, and lots of other interesting things. Android also had access to a few very interesting programs. There was Block Launcher, an app specifically for adding custom content to Minecraft. This had all kinds of juicy features, it even allowed you to debug a ModPE script right in the app. I learned through the warnings I'd get the the language I'd been programming in was Javascript.

The apprentice

A few months later, and I decided I should get an actual computer. I remember spending tons of time researching about all the different specs and parts, and how they would affect gaming. I chose a budget Acer laptop (Acer E1 572g-6648 (I have no idea why, but model numbers like that stick in my head forever)) with the highest specs for my budget. Not to be too dramatic here, but this purchase was a total snowball for my life. Initially, my parents tried to put restrictions in it where I had to get permission before installing anything, however, everything i wanted to do completely outpaced anything they knew about using computers and the restriction was promptly droped. In a late night game of Team Fortress 2, I met an equally interesting and foul mouthed fellow named Jake. I was absolutely garbage at the game and I asked dumb questions in chat. He, however, was quite helpful and taught me how to play better. In one conversation with him, he told me he was a programmer, and instantly, I asked him to teach me about it and help get me started. He gave me programming books and taught me basic Java and C# through TeamViewer. For a long time, he was a good teacher, friend and and the perfect rubber ducky (for non-programmers, in programming culture, simply explaining your problems can be enough to lead you to a solution. Programmers will explain things aloud to another person or to an actual rubber ducky. See Here). I initially started learning Java to make Minecraft PC mods, however, I never got very far with this, especially considereding this is a relativelya advanced topic. As I progressed and learned more newer things, I became less interested in this. I can't remember many details of this, but I fondly remember hacking long into the night with the Eclipse editor, loads of YouTube tutorials, and a vauge idea of what I was doing.

My first real program

One of the most interesting projects I remember working on from those days was a program I called TrigFox. My eigth grade math class was learning all about triangles, specically the pythagorean theorm and basic trigonometric functions. Frustrated with pages of homework I would have to work through, I realized that solving these problems was a very simple, logical process. I decided to build out a simple command line java program to do it for me. This worked quite well, but I wanted something I could really show off to the class, and I knew I needed a GUI. Going from less than 50 lines of simople scanner and printline statements to a full-blown GUI was definitely a big challange, but I was all over it. Thenewboston's Tutorial series on the Java SWT library and Eclipse's window builder sent me on my path. I recall it being an uphill battle, and I had no idea how anything beneath the function calls and changing atributes actually worked. I was constantly haunted by the dreaded NullPointerExceptions and my code was probably disgusting, but I was creating exactly what I had envisioned. Eventually, I completed the project to a point where I was happy (though there were many UI issues like menus not disappearing when other menus that overlapped them were opened). I eagerly emailed my teacher a jar of the project and I was elated when I got to present my creation to the class, given that it could do every problem we threw at it. She even encouraged me to go beyond the class's lesson and improve the program by simplifying the radical rather than just giving a decimal. Later on, when I started learning about Android development, I decided to make an app version of this program. It was ultimately one of the proudest experiences of my younger self and encouraged me to keep improving and use what I'd learned to solve problems in new ways.

Space Hydraz

I was eager for that summer to come around. Summers for me were felt more like a sobatical than anything. I had all the time in the world to learn everything I wanted. I had gotten to a decent level of proficency with Java, and wanted to take things further. I researched game development, and decided to follow a series on YouTube about making your first game by a creator called RealTutsGML. The series took me through making a basic retro space shooter game, and this was by far the most intense but also educational and rewarding challanges I'd faced yet. I learned all about game loops, loading assets and moving them around on the screen, time based physics, and all kinds of other fundemental game concepts. It all just fell into place and made sense. 2D games are essentially just rectangles moving around a screen acording to some rules with images attached. His tutorial series was great, and about around episode 13 of 21, I had decided that I wanted to diverge from it and try to finish it myself. My game was going to be called Space Hydraz. Enemies would fall from the sky, and killing one would spawn two more. This would continue until the player could no longer keep up with the intensity. Things were going great, but the challange of how to manage multiple enemies at once became very complicated. I tried to write an enemy manger object that would handle creating, drawing, and updating all of my enemies, but everything I did just gave me more errors. After hours of teitering on the brink of tears, I remember getting so fed up with constant NullPointerExceptions and slinking into bed at an unholy hour. The next morning while groggilly brushing my teeth, I went through the fundemntals of OOP in my head, how instanciation, constructors, and interfaces worked, and suddenly I rapidly snapped out of my mental fog as so much hit me at once. Inheritance, encapsulation, parameters, static functions, it all just clicked! I dashed to my laptop, opend up Eclipse, and began tapping away. Within minutes, I had solved my problem, and instead of one single enemy, hundreds were raining from the sky, and I was blasting them out of the air. I sprung up with elation, and realized that this is what I wanted to do for the rest of my life. Solving this problem was a true euphoria. Summer band camp also happened to be going on while I was working on this, and every day, I couldn't wait to get home and work on the next feature of my game. I added tons of additions like powerups, cool music, flying in any direction, and even an occasional boss fight with a giant, three-headed, acid spitting monster. Eventually, I wanted to make this a mobile game as well, and ported it from Java's AWT library to the LibGDX game library, where I learned tons about working with libraries and using other people's code for the first time. Some of my greatest memories came from working on this project, and it truly felt like I had just begun to really hone my craft, though the road ahead was still long.

Another stab at web dev

After marching season had ended, there wasn't much for the front ensamble to do during our band class, which left me with a lot of free time on my hands. Web development was still not super interesting to me and Javascript frameworks were still just beginning to pick up steam. Web development was kind of fun, but without dynamic content, the crazy power of modern CSS, or the advanced and exceptionally intutive features of ES6, making websites just felt like a glorified Microsoft Word document. However, I had been watching a tutorial series about databases & MySQL. In it, the teacher talked about their uses in websites, particularly with PHP. This got me very excited, as I wanted to build somethng with dynamic content. I started watching PHP tutorials and jumped straight into working with databases. After seeing how to authenticate and make a few queries, I decided to add a comments page to my old, crappy website. This was just a little page that anyone could type a comment into. I shared it with all my friends, a computer class at school, and aformentioned Jake, and we all had fun messing with it. Jake being an experienced programmer, put in a few comments that exploited the heck out of everything on there including XSS that turned everything into marquee tags and a query to mess with all the records. I learned just a bit more, and with this very limited knowledge of PHP and MySQL C.R.U.D, I decided jump straight in and create an entire forum for my website. This included user authentication, profiles, making posts, comments, likes, and other essential features. To mock the website 4chan, I called mine 2^2 (two squared) Chan, and ripped off the style. This was an awesome experience and even though the content of the site was garbage and the code was unsustainable, I still learned magnitudes. I decided to take a lot of what I learned and make a little video series about it on YouTube. This project can probably still be seen on The Wayback Machine.

Programming in School

I started programming quite young, so there weren't a ton of opportunities to expand my learning in early education. Most of what was offered was more about general engineering or mechanical/electrical engineering. There were, however, a few that I have some things to talk about.

Click Club

The first was a web design club in eigth grade called the Click Club. The school's art teacher, Mr. Lewis, taught the basics of HTML & CSS, and the students got to design the school's website. When I heard about the club, I took it upon myself to learn as much as I could beforehand, expecting to get the most out of it this way. I rapidly binged TheNewBoston's tutorial series on HTML and spent some time playing with it the week prior to the first meeting. The club membership rapidly went from around thirty to maybe around 12 consistent members, and a ton of the kids just weren't interested in, or didn't want to put the work into coding. I don't recall learning much new in these club meetings, however, one petty conversation in that club lead to greatest rivalry turned friendship. This one mega-nerd kid was talking about Macs vs PCs, or maybe it was Android vs iOS, and I, of course, couldn't help but inject and start a dumb blabbering war about how Apple is a rotten company that makes nothing but garbage products. (At least, that's what I believed then, anyway.) In every club meeting, Aidan and I would always try to be the first to answer questions or add "helpful" advice to Mr. Lewis's presentations, and then talk with him about our porjects and more advanced technologies. One day, Aidan decided he'd make the Click Club forums, and I, not to be oudone, rather rudely, decided to hack it. It was built with a PHPBB template with very little SQL security, so I quickly regurgitated what I'd learned the previous few nights about SQL Injection and made myself an admin and terrorized the forums. This was a very memorable experience, and a decent introduction to programming for newcommers.

Programming classes

Once I got to Highschool, there were a few more opportunities to explore.