Always Learning

Matthew Lin
10 min readSep 20, 2015

--

I haven’t posted an online blog before but I thought it would be fun. Ever since the age of 4, I have stated that my dream career would be to make video games. A lifelong love for games started on the SNES playing games like Kirby Super Star with my cousins. I can fondly recall countless hours on that game console, saving Dreamland from Meta Knight and King Dedede and loving that big pink character and its voracious appetite. The SNES shifted to the Nintendo 64, where I enjoyed games like Pokemon Stadium and Donkey Kong 64. My love for video games peaked around the ages of 6 to 11 during the Gamecube Era with wonderful classics such as Wind Waker, Melee, Animal Crossing, and Super Mario Sunshine. This passion for gaming was not limited to Nintendo consoles; I enjoyed playing Xbox and Xbox 360 games such as Halo, Gears of War, Call of Duty, and Oblivion. Handheld games such as the GBA and DS as well as online MMORPG games such as Maplestory were also incredibly fun and I got sucked in to playing them. Unfortunately, after Twilight Princess, Brawl, and the Wii Era, I started to get too busy with school, and the time could spend on playing video games grew progressively more and more limited.

Nevertheless, the dream persisted throughout middle school and high school. I did my research and found that Computer Science would be the ideal major for preparation into the video game industry. I read several biographies about influential pioneers in the software industry such as Bill Gates and Steve Jobs and aspired to be the next “whiz kid”, and as college applications approached, I aimed high, hoping to go to a top-tier Computer Science school.

I did ponder other career choices such as medicine or business, but I realized that my fear of blood and my dislike of biology and life sciences would prevent me from being an effective doctor and that undergraduate business programs would just set the stage for an MBA, which did not necessarily require a business undergraduate degree to apply to. Thus, Computer Science and Engineering stuck and selected an EECS/CSE major for every college that I applied to. I was fortunate enough to get into UCLA as a CSE major, and I was happy that I was closer to achieving my goals of making video games.

Once at UCLA though, I began to reconsider what fields of Computer Science I would really be interested in. I started to look into topics such as Artificial Intelligence, Computer Security, and Robotics as potential fields that I would like to learn more about. The video game designer dream began to fall by the wayside and look like a distant reverie. From freshman year through sophomore year, I did not really get into mobile game development, and I lacked the experience in C#/JS to make a really cool game in Unity or on the Web, and it appeared that I would never seek to achieve my goal of releasing an original video game to the public.

This is all changed during Spring Quarter of my sophomore year. My PC that I was using during my freshman year and sophomore year eventually started having performance issues and I was getting frustrated. I seeked out the advice of several friends (most notably Ashvin and Shree) and both recommended switching to a Mac. I initially was hesitant of “joining the dark side of Apple”, but I thought of the possibilities and decided that it would be good to have a working knowledge of iOS and Mac OSX for any future software development. I saved up money from my on-campus job at Simul8 and purchased a Macbook Pro 15" for $2,200 at the UCLA store. Needless to say, it was probably one of the best investments I ever made.

I first started learning iOS during the summer of 2015. I was a QA Automation intern at Taboola and really enjoyed the fantastic experience I had there, and I wanted to further explore the avenues of software by taking the online iTunes Stanford 193P course to learn Swift. While my internship experience was phenomenal, learning Swift through online tutorials did not quite go to plan. The pace was very fast and I had trouble maintaining focus on the material because of my short attention span. Throughout the summer, my desire to really learn iOS wavered as I “watched” the iTunes course while making terrible covers of Walk the Moon, Charlie Puth, Maroon 5, and basically any pop song I heard on the radio. Needless to say, I wasn’t learning, and I just had an empty feeling of disappointment in myself and my lack of focus.

My personality type requires adversity in order for me to really be compelled to do something. My competitive streak manifested itself after watching a documentary of a young up-and-coming tennis star named Michael Mmoh. One thing that particularly struck me was not his tennis ability, which is light-years above mine, but rather the iOS app he created called “Oversnow” in 2010, when he was 12 years old. After watching the documentary, I thought to myself, “What the hell am I doing with my life? This kid built an AMAZING game at a much younger age than me while I’m sitting on my ass doing nothing!” That night spurred me into motion to brainstorm game ideas, one of which eventually became my app called “Keepy-Uppy”.

Keepy-Uppy is not a completely original idea; I played Neopets when I was around 10 or 11 years old and one game I fondly remembered was Zurroball. The idea involved keeping a ball in the air as long as possible inside a space ship, and each ball option had a different bounciness, size, and shape. All of a sudden, the lightbulb in my head turned on. “Why don’t I build something like that? It isn’t a completely original idea, but it would be a very fun game to achieve my goal of releasing a video game”. I proceeded to build a basic framework, but since I lacked sufficient knowledge of Swift at the time, I gave up the project for about two months and focused on my internship goals.

After my internship with Taboola ended, I had a free month to work on my idea for Keepy-Uppy. I started to watch the Stanford 193P lectures once again, but I was still frustrated at the pace at which they were going and felt that I wasn’t learning anything about Swift. I gave up around Lecture #7 or #8 after learning about Segues, MVC, and the different types of Controllers; there was way too much material to learn and I wasn’t making any progress towards my goal.

One of my problems is that my learning style tends to be very nitpicky and anal about specific details; I try to meticulously take notes and analyze every little aspect of a concept. This can be good from a theoretical point of view, but I learned from prior experiences at hackathons and from my cousin who is a software engineer that sometimes the best way to learn is to just hack shit together. So I decided to go out of my comfort zone and googled specific game tutorials. Two in particular were particularly influential in Keepy-Uppy’s development: Swiftris and fullstackio’s implementation of Flappy Bird. I recreated the Swiftris project character by character, meticulously typing every single line of the code in order to grasp Swift’s syntax. I analyzed the Flappy Bird clone’s code line by line and tried to see how I could apply this to my game. I started vociferously asking questions on Stack Overflow and HH iOS, pestering my friends who were experienced in iOS on things as trivial as combining two nodes together. Quite frankly, I was becoming anal, neurotic, and increasingly obsessive over my game.

I officially started coding Keepy-Uppy on September 3, 2015. I had finished the Swiftris tutorial a few days earlier, and I knew that time was running out before school started. I saw a three week hard deadline before school started, and I made a goal to myself: “Finish this game and try to release it to the App Store before school starts”. I knew for sure that I would not have time to design this game once school started, and if I gave up now, I would succumb to old habits and give up in the future. Thus, the long and arduous journey of designing my first game to keep my childhood vision alive began.

I worked day by day, making small goals for myself that were within reach and manageable for my abilities. The first part of creating my game involved creating the User Interface (UI) and the Scenes on Storyboard. One of the biggest contrasts that I noticed between Web Development and iOS development was the ease at which I could design user interfaces. Frontend web development consists of a delicate mix of HTML, CSS, and Javascript to create a beautiful website. I learned a lot from my Simul8 advisor Johnny about design, but it still didn’t come very naturally to me. In contrast, Xcode (Mac’s iOS Integrated Development Environment) used an extremely intuitive system of storyboards that made it remarkably simple to create a nice User Interface.

I should step back a bit; I thought Xcode used an extremely intuitive UI design feature AFTER banging my head against the screen for the first few days getting used to the Interface Builder and autolayout. Having had bad experiences trying to create a UI to match Paul Hegarty’s calculator from Stanford 193P, my UI nightmares became realities as my Scenes grew jumbled from poorly set constraints and I grew increasingly irritated at my inability to create a simple title page. This required patience, and thanks to the help of my friend Chris, I was eventually able to get my autolayout skills to a somewhat decent level, and I was able to create the first three scenes (Title Page, Choose Ball, Choose Background).

If I thought UI was bad, I didn’t realize how good I had it until I had to actually design gameplay. “How the hell do you do this?”, I must have asked myself about 1,000 times over the course of development. I was getting pissed, Stack Overflow users were getting pissed, my mom was getting pissed because I was spending 12 hours or more a day working on the game to little avail. Literally NOTHING seemed to be working! Eventually, I decided I could not keep working this way because one of the things I hate about development are blocks to progress. I looked at more tutorials and learned about SpriteKit, the physics engine that my game would use. I began to copy and paste certain functions from other projects, trying to reverse engineer the logic for certain aspects of gameplay. I was literally hacking shit together, the way a resourceful software engineer would do it. I started to gradually make more progress, but my ultimate gameplay challenge still rattled me: “How would I come up with this ball bouncing algorithm?”

This constituted about the first week of work. In the interim period, I attended MHacks 6 at Ann Arbor, Michigan, which turned out to the most eventful and productive weekend of my hacking days. I had a great team of three consisting of my friends Nelson and Katie where we created an SMS version of SIRI. While it was great to meet many sponsors, get tons of free swag, and make a cool project, the ultimate highlight of that weekend was meeting all the great Apple Engineers and hearing the insight they had about software development. They were also incredibly helpful; they helped fix up certain aspects of my game such as the boundaries, and they gave me a hint regarding the Anchor Point of the nodes to help me develop my ball bouncing algorithm. Long story short, after leaving MHacks 6, I had much of the gameplay engine figured out, and I was truly grateful for the Apple Engineers for staying up with me until 5 A.M. on Sunday to help me debug every minor detail of my game.

After arriving in L.A. on September 14th (after happily watching Novak Djokovic capture his 10th major!), I continued work on my game. By now, I had most of the major UI and gameplay features finished. What needed to be finished was the ability to reset the game as well as creating a rules page. During my internship at Taboola, I was fortunate enough to befriend a fellow intern named Darin, who also had strong aspirations for iOS development. I asked Darin for help regarding the condition in which I wanted to reset the game, and he kindly made a contribution to my Git respository that fixed the problem. The issue involved using Navigation Controllers, which I had no experience in, so I greatly appreciated the help Darin gave me there.

The Rules Page came along quickly after that, but a new concern emerged. I realized that I did not verify if I had permission to use any of my images, and I knew my soundtracks had copyrighted materials that I had to replace (the original title song was the BBC Wimbledon Theme Song and the gameplay song was “Sweet Georgia Brown” by Brother Bones a.k.a. the Harlem Globetrotters song). This process of replacing the images and sounds took a full day, but that was fortunately the last thing I needed to complete my project. The next day (September 18th, 2015), I submitted my game to the App Store with the help of my friend Will.

As I write this, I am currently waiting for approval from Apple to see if my game does get released. Even if the game does not get released, I am closer to achieving my childhood dream than I have ever been in my whole life. I had never worked this hard before on a personal software project, and this taught me many things about myself. First off, I actually could achieve something of this scale on my own if I truly put my mind to it. It helped that I really enjoyed seeing my game progress day by day. Second, I was able to divide up work into realistic chunks and maintain a time frame by which I could expect certain features to be completed. I learned this through my internship, and I was able to really apply this to my game effectively. Third and probably most important, I learned that life involves a lot of bumps along the way, whether it is a SIGABRT error you have trouble debugging, an algorithm you have no clue how to come up with, or copyright issues that you don’t want to get sued over. What happens at the end of the day is indeed important, but it isn’t everything. The JOURNEY to get there is just as important because you learn many things along the way, and that’s really what life is about. Learning. Always learning. No matter what you do, as long as you learn something new about yourself, about others, or about the field you are interested in, then you really are applying yourself and living a fulfilled life.

--

--