Back in July of 2017, I attended Gophercon. Gophercon is a con for Gophers, or rather, people who enjoy programming in Go (or Golang). My company switched me over to Go from C# in January of the same year. Turns out, Go is a nifty little language and I quite enjoy it. So, I found myself at Gophercon and I had a blast. I learned some cool stuff, had fun in Denver, and even turned myself into a Gopher using gopherize.me.
Anyway, the point of all this is that on the last day of the conference, one of the speakers was talking about the Go community and how important it is to give back to the community. Blogging was put forth as one way of giving back and I was like, huh, I can do that. It took me five months to get around to it, but here I am. The focus of this blog is for me to share discoveries and neat tidbits I encounter in my programming antics (and maybe some neat gadgets I discover along the way), but I think I should start off with my history and programming background.
My first introduction to programming was at a Boy Scout camp named Camp Kern when I was barely 12 years old. I decided I wanted to earn the Computers merit badge since I love computer games and it just seemed like a cool thing to do.
For one of the requirements, I had the option of creating a simple program and fortunately the merit badge counselor was willing to teach us some QBasic. Not the most sophisticated programming language, but I thought it was the coolest thing ever. I created a simple choose-your-own-adventure type game and then just kept going from there. I went home and read all the QBasic documentation to figure out how to create sound from the PC speakers and how to draw lines to make shapes. I locked my mom out of our computer when I created a password screen that was launched from autoexec.bat. Bonus was it blared an alarm at her when she failed to enter the correct password that I had neglected to give her. I still hadn't really decided on my course in life at this point though.
When I entered high school, I got my hands on a TI-86 graphing calculator (far superior to the more popular TI-83, in my opinion) and mastered its TI-BASIC programming language. I made programs to solve my math homework for me and I even made a primitive text-based RPG where you fight progressively stronger monsters as you move your character further up a grid. You could purchase weapons/armor and there were even a few boss monsters to fight with a story to go along with them. However, I still hadn't had the opportunity to learn a "real" programming language. That opportunity would not come along until I was 16 and a junior.
Quitting marching/concert band at the end of my sophomore year in high school turned out to be life changing for me, as I finally had some open slots in my schedule to take some electives. So, starting my junior year, I took Intro to C++ and pretty much the rest is history. I LOVED C++ and I was GOOD at it. Everything just clicked in my brain. I started making another more complex text-based RPG using C++. It was called Dragonslayer and while it wouldn't warrant a second glance in today's world, back then I was so proud of my creation. I even got several of my classmates hooked on it for a while. That was when I knew what my calling in life was: I was going to be a programmer.
I took AP Computer Science my senior year and finished top of the class. I was so interested in soaking up everything I possibly could. At the end of the school year, our final project was to pair up with another person in the class and make whatever we wanted to make. I paired up with the chess genius who beat me solidly pretty much every single time, except once. We decided to make a, wait for it, chess game. He was interested in creating the AI and game engine, which left a measly text-based interface for me. When I pointed this out to him, he suggested I look at SDL (Simple DirectMedia Layer) to make a graphical interface. I hadn't done anything with bitmaps or any sort of graphics engine up to that point, nevermind even consuming another dll, but I eagerly dived in. We ended up with a fully functioning chess game, using SDL to handle blitting bitmaps and receiving mouse input. Easily had the best project in the class. And that kicked off the next chapter of my programming history.
Now that the world of 2D graphics had opened up to me, I went on a game creating spree. I created pong, breakout, a bomberman style game with tanks, a vertically scrolling schmup, and a prototype for a game in the style of Pocket Tanks. The graphics on these games were horrible and don't even get me started on the awful excuse for "music" that I created, but I learned so much and was just having so much FUN. Communities like the programming board on GameFAQs were invaluable to me as a place to receive help and bounce ideas off other people.
I started going to college for Computer Science and eventually discovered that my younger brother was a brilliant artist. Like, the guy can create pretty much anything. We decided that with our powers combined, we could make something awesome. So we started to make a game called Expanse. It had all different kinds of spaceships with unique abilities that could fly around various arenas with dangerous obstacles. The objective of the game was to blow the other player's ship up, of course. We worked on that game for at least a year before it kinda fizzled out and life got in the way, although we still have a working build that is about 95% complete.
Somewhere around that time is when I started working professionally. I started working for a company headquartered in San Diego called Mitchell International. I was hardly in my second year of college when I got a job there as a QA intern, due to a connection I made with one of the development managers there (I was dating his daughter at the time). They liked me so much that they made me full time in about four months and then decided to try me in development soon after. I had been learning Java, Perl, and, most importantly, C# on the side while starting up some test automation using QuickTest Pro (ugh). I made some utility programs to help the support staff and developers, so they figured why not give me a shot doing bug fixes on a legacy application? I started fixing some bugs on a legacy claims solution that was written in VB6. VB6 is an awful language for the modern world, but I was stoked to be starting my professional career as a software engineer. I had all the issues quickly resolved and proved to be a team player, so they moved me to the brand new next-gen platform team they were putting together. From then on, my work career progressed rather quickly.
At this point in time, there was a certain new device that was making headlines: the iPhone. The app store had just been released and I decided I wanted to make a game for the iPhone. I decided to start with something simpler, so I went with a remake of the old breakout style game I had made previously. There weren't really any mature game engines at this time (Unity3D was still pretty new), so I wrote my own rudimentary game engine in C++ and wrapped the necessary components in Objective-C. It took me about a month to write the game engine, two weeks to write the game, and then like another six months to finish the last 10% so I could release the game, called BreakIt, to the app store. This was my first solo commercial release and it was an excellent learning experience. BreakIt has since been removed from the app store, due to me never upgrading it to work with the newer 64-bit architecture.
Unity3D has always interested me as platform, especially now that it is extremely popular amongst indie game developers. It takes care of all the low level nonsense and you can focus on just writing the game logic. When I decided I wanted to learn Unity, I chose to rewrite the BreakIt game for PC. I recently finished this endeavor and can now relive the BreakIt experience whenever I see fit. Armed with the knowledge of Unity that I received from the BreakIt rewrite exercise, I'm ready to make a much bigger scale game with my brother as artist. We plan on starting something once 2018 hits and we already have a bunch of good ideas.
Anyway, this has just been a brief overview of my background and where I come from. I've dabbled in a ton of different technologies and I know there are so many other opportunies to learn. My personal projects have taught me a lot and broadened my horizons. I've learned SO much from my colleagues and managers and I just LOVE being able to program for a living. I love being able to create something and tinker with it to make it work. I'm hardly ever bored, because as a software engineer, I never do the same thing twice. I was with Mitchell for a five year chunk and then I spent some time at Nokia, Microsoft (after the Nokia buyout), and now Mitek Systems. I've done backend dev, front end dev, Windows app dev, mobile dev, etc. My background has been primarily .NET and the Microsoft world, but as I mentioned previously, at the start of this year I was switched over to Go development. Go has been awesome to use and learn. The community is pretty fantastic as well and the exposure to the open source world has been extremely healthy for me. I just love learning, I love programming, I love technology, and I'm excited to see what the years ahead hold for me.