“This time, hopefully, everything works”, I murmured as I committed myself to learning how to program, the unknown and almost hopeless road, again.
It was an early morning of May 2013, right after I finished my second year coursework in a Math PhD Program. A whole summer with large chunks of free time was there waiting for me to explore. Confused about what to achieve in the math program, I decided to give myself some extra option, something I would be excited about and willing to wake up early for. For me, it had always been “programming”. I just resonated with this geeky thing deep in my heart, whenever I heard the word. However, I dared not overlook the existence of past numerous failing trials for it, ever since I graduated from high school in 2007. Every time I would pick up a book with title likeFundamentals of Data Structures or Introduction to Algorithms, only to find out just a week later that everything was so lifeless and then I completely gave up.
I never lacked any math basics for those data structure or algorithm stuff, but I was always told to start off this coding thing with a solid theoretical base, because of my math major background. Well, while data structures and algorithms are indeed very important, this notion of learning order is simply not true, as I soon would discover.
Anyway, back to that moment of last May, nobody was there to guide me. And my coding experience was only limited to a very simple undergraduate course in C Language basics that taught me how to use arrays and loops. I did not know anything about “object-oriented programming” and had no idea of how people could ever develop dynamic websites or interactive apps. Nevertheless, I was lucky this time, because I bumped into an online course taught by two professors from Rice University, An Introduction to Interactive Programming in Python, which promised to teach me how to build simple games right away. When I registered for the course, the session was already over but it did not bother me to catch up with the archive materials at my own pace. I spent two weeks obsessing myself with each module and finished building all the assigned eight mini-projects, from a simple countdown timer to the classic Blackjack, Pong, and Asteroids games. What I enjoyed most was the exposed well-designed step-by-step instructions before I started to code each mini-project. They made me wonder how I myself would break down the project into executable steps if there was no such roadmap provided to me.
When I completed this Python course from Coursera, I came to know the joy of coding with a graphical user interface from the interactive event-driven programming perspective. And I truly felt proud of myself on possessing a portfolio of mini-projects with just two weeks. Besides, this course walked me over many fundamental computer science concepts in action, such as how to choose from a variety of built-in data structures like list, dictionary or set, and how to design a custom “class” for spaceship in the Asteroidsgame. When it was no longer just lifeless theory, I became hyper-excited.
Then it was mid-May 2013. So what’s next? My Python experience conveyed to me the intuition that if I could ever dive deep into any programming field, I must learn by doing and have fun. Since I had always been playing around with mobile apps on iPhone and iPad out of great pleasure, it could not be more natural and logical that I should transfer my Python skills into Objective-C on iOS platform. Therefore, I immediately invested myself with a MacBook Pro, registered for a paid Apple Developer account, and hoped everything would just work out as what I envisioned to be.
I chose a very popular online iPhone Application Programming course offered by some famous institution as my tutorial and set my goal to finish it within one month. However, the teaching style of this course was not fitting me at all. I was just bombed with the complete listing of all properties and methods for a bunch of “classes” in every lecture and then a quick short dry demo. And the assignments were far from interesting. I stuck with it for three weeks, cracked the first four assignments, and decided to abort before getting too bored and losing all my momentum for coding. And I aborted.
Fortunately, within the same week, I found another iOS tutorial themed website raywenderlich.com and it offered me a sequence of four projects (iOS Apprentice) to get boosted on iOS learning. And it happened to be exactly what I needed: “learn by doing fun projects”! Even though just PDF-based, those tutorials illustrated every major iOS concept with nice graphs and each step with an Xcode screenshot, and were packed with occasional humors, just like the Python course. I was brought back to life instantly and started coding again day and night. I consumed the full series of 900-page tutorials within 10 days, implemented all the projects like Checklists,MyLocations and StoreSearch. Some of the concepts like delegate and blocks remained puzzles to me for quite a while. But it didn’t matter. I knew I was on the right track. And nothing matters more than having fun everyday when it comes to learning.
To avoid being a copy-and-paste machine for coding, I initiated my own side project right when I embarked on learning the second project Checklists. I stretched quite a bit beyond my then coding skills and devoted myself into making a PrayerList app with an interface that looks like comments below a friend’s post on Facebook, except that this time it would be text or image updates below a certain prayer. My motivation was very simple: because my friends and I in the Chinese church would use such an app to write down prayers and related ensuing updates. Looking back, that was probably one of the best decisions I ever made, apparently in an unconscious way. It was uncomfortable, at first, to step out of my comfort zone where I could just consume well-crafted tutorials and replicate the same codes from the tutorial projects. However, it soon occurred to me obviously that it was the only way to truly learn something, by actively creating instead of just consuming.
I threw myself into this PrayerList app for the next two months, refining every bit of details I could think of. Along the way, I became familiar with how to ask the right questions by Google Search and also accustomed to reading tons of posts on StackOverflow when a mysterious bug hit me and crashed my program. Almost all my mind was occupied by coding and weighing over different designing decisions so as to craft a better product. When the summer ended, I learnt enough to be dangerous and the app was mostly done, just like what I originally planned, with a gorgeous user interface.
However, it was never shipped. Partly because Apple released iOS7 in the beginning of that Fall and as I upgraded my project, there were quite a few incompatibilities to be resolved. The fundamental underlying reason was that the Fall semester started and I had to get back to my PhD program track to fulfill major academic requirements. Don’t get me wrong. I love math, all the time, then and now. And it was purely out of passion that I chose the subject math when I entered college. Graduate school, nevertheless, turned out to be quite a different ball game for me, as I pretty soon realized. The nature of a research Math PhD program invited me to adjust myself into a career path of the “publish or perish” mode. Yes, it was easy for me to compromise with and inattentively slip into that path when I had nothing else to do. But things were no longer the same after the journey of happy coding day and night in a Dunkin Donuts for a whole summer. “To quit or not to quit” seemed not to be a question for me any more. The answer was obvious. I decided to quit.
In the meanwhile, though, there was another huge issue I needed to deal with, namely, my F-1 visa status as an international student. If I did quit, then I had to leave United States in 30 days. I felt tortured by the dilemma. One of my friends in church suggested me to find a job first. Well, sound advice, but how was I ever able to land developer job with work sponsorship included, by merely my 3 to 4 months of amateur learning experience? I battled with the possible choices and consequences for almost a whole semester of three months and eventually made up my mind to stick with programming even if I had to leave this nation. After all, I love my home country China deeply and am always inspired by tons of tech-industry entrepreneur stories, like Jack Ma and his Alibaba empire of revolutionizing the lifestyle of how half a billion Chinese people shop online. This might be my opportunity to just go home and forge my own way as an entrepreneur I have always dreamed of becoming, no matter what the outcome would be.
Out of my wildest surprise, when I finally informed my graduate director of the program-quitting decision in late December 2013, he reacted with kindness and offered me very useful suggestions. Apart from trying to make sure that I had thought through various research math fields, he assured me that I would actually obtain a master degree in math. I never knew that it was possible for me to end up with such a fruitful situation. I was enormously relieved. Wow.
Back in mid-September 2013, while I was anxious about my future career and whether and when to leave my program and also this nation, I met a stranger on a MegaBus. Initially, we were both traveling with the same GreyHound first without knowing each other but then the bus just failed us with a cancelled schedule from Pittsburgh to New York City. Out of desperation, I booked a MegaBus ticket of the early morning. It happened to be that he also booked a MegaBus journey with the same route. When the MegaBus stopped at food place, we recognized each other in a Subway restaurant and had the sandwich lunch together. Upon saying the hello and hi stuff, I raised my first question, “Are you a Computer Scientist?”. I said so because he wore a T-Shirt with the phrase “HackNY”. I had no idea what that was but the “Hack” word just caught up my attention!
His name is Dave Fontenot. He then explained about his background and introduced to me a few app developers near Pittsburgh, the city I lived in. He said he just dropped out of school. I said “Wow, I wish I could just do that right away, too!”. It was only a short 10-minute chat and after that we befriended each other on Facebook. Then in the next three months, my Facebook news feed was full of his activity everywhere. I got to know a bit about this almost newly invented hackathon thing since that time on.
Therefore, when I had the cheerful news in late December from my graduate director, I immediately knew that it was probably time for me to have a first-hand experience in the hackathon field. However, it was three months since my intensive summer coding. How was I going to pick up everything and then make even more progress? And ironically all those codes of PrayerListseemed a little unfamiliar to me after this long non-coding period. Coincidentally, one of my friends, an assistant pastor in Beijing, pitched to me the idea of building a mobile Chinese Christian podcast player app. I agreed with every bit of his vision and would like to make this happen so that many people including us two could benefit from such an app. I spent the coming half-month winter holiday coding out a beautiful podcast player app and consequently I learnt a lot more about database storage and also slight integration with a web server. And most importantly, I defined the scope very well this time for the app and shipped it to App Store the moment I reached the version 1.0 standards I set for myself. And right after that, I also immersed myself in TreeHouse experience for five more days and finished learning all of its fun and high-quality iOS video tutorials.
So there I was, building apps again. It was truly a winter of thrill and restoration. And I just could not wait more for my first hackathon! In January, although I was late in registration, Dave Fontenot granted me a ticket to MHacks. Before the event, I checked out the Facebook event page and shot out about twenty messages to other hackers for team making. Somehow deep inside me, I wanted to code together with a bunch of developers because that sounded to me the only way to have fun in such a non-sleeping coding event. That was, again, an act of stepping out of my comfort zone, to reach out to strangers, and to seek potential collaboration. Several teams politely rejected me because I told them it was going to be my first hackathon. I tried my best to understand their concerns and I did not lose heart. Eventually, I made a team of three and I was ready to go!
Yes, the epic MHacks. A dozen of top-tier tech companies like Apple were invited for workshops and API demos (I had no idea what API was before MHacks). It was amazing to see so many developers coding together, each team with some cool idea. I was stunned. But I was also a bit cautious. I wanted to make sure that my team would be able to define a well-suited scope for the idea we had, before we were too ambitious to get nothing finished. What followed then was sleep deprivation, pizzas, coffee, delicious dinners and coding fun! Within 36 hours, my team delivered an app we called EverShare, that enables peer to nearby multi-peer Evernote notes sharing instantly all at once without the need to input recipients’ email addresses. Imagine if you are a speaker at a tech conference and you want to share your slides with the audiences in the room, then with this app, one button tapping does all the work and everybody gets the slide link right away.
Throughout the developing process, my team had very close interactions with the Evernote engineers. They helped us enormously on how to use their API. On the third day, after an intense two-hour demo fair, we were awarded Best Evernote Hack. It was absolutely unbelievable. My team members and I were super excited when the Evernote guy announced the news on the stage. That prize meant a great deal to all of us three guys. We were almost into tears because we clearly remembered that about four hours before the demo fair, we encountered a nasty bug in the app and did not figure it out until the last ten minutes!
Well, that was my first hackathon and that was MHacks. I was so motivated by that experience and there was no way I could stop playing the hackathon game. One week later, I showed up at Hack@Brown, a hacking event organized by Brown University. I formed the team on the bus and on the site. It turned out that my team was the most diversified in all of the teams, consisting of an awesome high schooler, a Rhode Island School of Design student, a Brown CS student, a Boston University CS student, and me, a PhD dropout, and a co-founder of Shelby.tv (an NYC startup). We developed Connect, an iOS app that facilitates effective networking with the people around you, by displaying a list of all users over the same Wi-Fi network, including their LinkedIn profiles as well as their customized one-sentence slogans. My team won no prize that time, but I truly enjoyed the whole process of learning, building, hacking, collaborating and growing, which I think, is what hackathons should be all about.
Next stop was Purdue BoilerMake hackathon. One of the teammates I got to know through MHacks, Yi Qin, invited me to go hacking at Purdue University. However, both of us were too late for registration. And there seemed to be no way we could get any tickets through the black market (just kidding…). The BoilerMake organizing committee, instead, came up with a very creative way. They held a PreHack event one week before the BoilerMake hackathon and promised the last several tickets to three winning teams. Because I was so captured by the fun of this hackathon game, I was willing to take a 7-hour bus ride to West Lafayette, Indiana, without hesitation. I showed up at the PreHack event and one of the organizers, Grant, was amazed by my presence. I stayed there for about three days, and Yi Qin hosted me with great hospitality, and I was very grateful for the fresh friendship.
On the 24-hour PreHack day, Yi Qin and I, we created EasyCards, an iOS app that empowers users to design, store and share business cards all on the mobile with a series of super cool animation effects that mimic how people connect and exchange business cards in real-life: the card would just fly off the sender’s phone and then land down on the nearby receiver’s phone seamlessly. This hack came out to be surprising everybody at the place. We won the champion out of twelve teams and successfully grabbed away the last several tickets to BoilerMake.
As a teaching assistant in math, I had to return to Pittsburgh to perform my weekday duties after the PreHack. But when it was about the next weekend, I stood on the bus back to Purdue again for the official hackathon. There were about 500 to 600 hackers for BoilerMake. And this time I had a team of four and built an augmented reality game, Little Feet. This game was about saving Rohan the Penguin away from the erupting volcanos. We incorporated face detection functionalities to emphasize the interaction of game play with the surrounding people outside of the iPhone/iPad. Throughout the building process, we kept an active communication with Apple engineers from the inception of the idea to the successful implementation of this game. Apart from the fact that we made it into Top 7 Hack, these Apple engineers also enjoyed what we did and awarded us Best iOS App. Late that night, literally, I had a hard time falling asleep…
In March, there weren’t too many hackathons. so I rested for a while after four consecutive hacking events in January and February. Later near the end of March, I went to HackPrinceton. And LAHacks at UCLA in mid-April. Not to exaggerate, I was then able to proudly declare that I had been hacking across the nation, from the East, to the Middle and to the West. If I have a time machine and could go back to tell my old self all these would happen, I doubt he would believe it.
Most hackathons I attended had hundreds of avid hackers and dozens of sponsoring companies. It was hard not to learn anything throughout this process. To maximize the utility of hackathon as an education, right after each event, I was very hungry and eager to check out all the hacks posted onto ChallengePost or HackerLeague (two websites that provide the infrastructure for hackers to submit their works with brief photo or video demos) and crafted a list of some interesting and handy skills I needed to catch up with. I recognized my limitations very well as a self-starter and therefore determined that it was essential for me to expand my horizon by learning from awesome peer hackers. I probably had reviewed more than a thousand hacks from all the major mega hackathons for the past two years. Some of the hacks were purely mind-refreshing, for example, GooglePlexfrom the latest PennApps hackathon, a Siri hack that extends Siri’s capability to learn new commands, such as playing a song in Spotify.
Above all, what I benefit most from hackathons is the priceless team collaboration experience. At Hack@Brown, I picked up the knowledge of version control (with “git” command) and applied the skills right away to the project we were working on. Through GitHub (and some careful breakdown design of the project), six hackers were able to work on the same app at the same time and then just combine all the work when it was about time to merge at some point. Before MHacks, I was fine with coding alone, but the coming hackathons enlightened me on the possibility of working on a large-scale project in a DIT (Do-It-Together) fashion, rather than the traditional overrated DIY (Do-It-Yourself) mode. More importantly, when I met with similar-interest and like-minded people, I also reaped a ton of friendships. Just as what C.S.Lewis said, “Friendship is born at that moment when one person says to another: “What! You too? I thought I was the only one…”.
During the whole hackathon season, I almost forgot about the fact that I was actually in need of a Software Engineer job since I would soon be graduated with a master degree in math. I guess, I was just too immersed in the hacking fun and excitement at some point. Then surprisingly at Purdue BoilerMake hackathon, without any anticipation, I had a dinner together with some Apple engineer and discussed about potential full-time opportunities. After that, I passed several rounds of technical interviews and made it to the onsite round at Apple Campus in Cupertino. Despite the fact that eventually I was not granted an offer from Apple, I was inspired enormously by this incident and got prompted onto a journey of learning the computer science fundamentals of data structures and algorithms. Yes, you are not hearing me wrong. Big companies like Apple, Google or Facebook expect candidates to have a good sense of the modern computer science basics.
Honestly, in the beginning, I was very reluctant to go through that process, for the not-so-exciting purpose of just passing the technical interviews to obtain some decent job. After experiencing my first-hand incompetency in technical interviews from companies like Google and Snapchat, I woke up from my self-constructed illusional comfort zone and stepped up to face all the challenges out there. For three weeks, I scratched through the online technical interview practice website LeetCode and cracked all the 150 problems ranging from stack, queue, trees and graphs, to dynamic programming, recursive and backtracking algorithms. Just like how I learnt to code, this technical interview problem solving was also out of my control at first (after all I did not invent these stuff!) but after a while, I began to gain confidence and mastery over it. I only read the essentials of those thick-brick-type books on data structures and algorithms and instead focused right away on real-problem solving on LeetCode for the relevant areas I just covered. In this way, I avoided being too theoretical to tackle coding problems while at the same time learnt much faster and more in depth by intensive practice. It took me tons of hours but eventually all the hard work paid off (and will definitely pay off more in the near future!). Even though at this moment of my life, I am still temporarily unsettled in terms of career (whether to work for an awesome company or choose to build my own startup), I feel blessed everyday because of the hard work I throw in daily and the visible progress I observe weekly.
Looking back, I find the past year to be a very fulfilling and life-changing one. It is still very hard for me to believe that everything just happened in such a coherent and fruitful way. Thank God. Truly, I see His glory and kindness to me! And I am also very grateful for all the friends that inspired and helped me along the road. ☺
Shortly after my graduation, I moved from Pittsburgh to San Francisco. And now I am ready for my next journey. Whatever that will be, the indomitable hacking spirit I developed during my “zero to hacker” journey will accompany and benefit me for the rest of my life.