How I Learned to Code

Posted on Dec 31, 2021

Dan Luu has this great post about how he learned to program. I liked this quote from that post:

I like this idea because I’ve found that the paths that people take to get into programming are much more varied than stereotypes give credit for, and I think it’s useful to see that there are many possible paths into programming.

There are indeed a bunch of ways that people can get into coding. At least for me, I have not seen guys with overlapping career paths. Most guys that I worked with don’t do the stereotyped career path1 either. But since I don’t know their career paths in details (couldn’t possibly have since I’m not them), this post will be about my path and how I think each phase contributed to my current status.

Before University

When I was a little kid, my mom had a laptop. Since she’s usually busy at work, me and my sister got to use the laptop whenever we felt like it. At that point I feel computer and the internet is a much broader world than the actual world so I kinda used it a lot. I mostly use the laptops and the crappy internet when I’m feeling alone and bored with the actual world. Online chat rooms were such a life saver at those times, even though the conversations would be kind of silly since I was only a kid. Nevertheless, it made me realize that computers can do the unthinkable things, and it can come in handy in situations. I kind of got hooked to computers ever since.

When GTA 4 came out, I was very into modding it ever since I found out that it’s as easy as just changing the numbers in some random txt files and restart then BOOM! My car in game can go super fast or super durable, depending on which number you changed. Back then I thought all modding is just as simple as that and I tried opening random stuff with text editors to know that most game/applications doesn’t work like that. I guess you can call that programming.

Also, I had a translator2 that’s capable of writing and executing BASIC programs. I remembered I code up a program that draws 1 circle at the top left of the screen. Even though it’s interesting to see a semi-computer work to my will through codes, I don’t know what else it can do for me and I just stopped there. I think that’s the earliest chunk of code I’ve ever written.

University

This is where I actually started learning to code up stuff as a computer science major. For the first 2 years I did learn how to code single algorithms with 1 file, compiling them and execute them against a online judge system most of the times. To be perfectly candid3, I wasn’t interested at all. I thought it was pretty frustrating since I wasn’t gifted enough to finish all assignments on time. I wasn’t sure if this is going to work out for me. Luckily, I got through the first 2 years with mediocre scores in programming related classes.

My degree required a presented project at a yearly presentation event. Theoretically, if you finish it during your junior year, you have one chance to fail at it and you can still graduate on time by running it back during your senior year. I got recruited by my friends to do a augmented reality project. I handled the coding work, and I count that as my first program that I’ve ever delivered. It was a Unity project with a bunch of C# code for UIs and visual effects. The project was accepted (it counts toward my graduation), but didn’t win any awards across the event.

After that, I took on a virtual reality project by myself. As a student in a virtual reality class. The end-semester presentation allows groups of different numbers. I chose to do a thing for myself since code-wise, I have just put together a augmented reality application using Unity, after a little research it’s apparent that it can accomplish VR stuff as well. This time I made a time bomb game. The time bomb will spawn in random directions, the player is supposed to gaze at them to defuse them. The bombs wil explode in decreasing time. The player’s score is their amount of defused bombs. There’s a lot more code to be done this time than the last one, so I actively tried to split my code by usages, hoping that my structure can make sense to me whenever I need to debug my stuff4. I believe this is the first time that I didn’t jump right into code. I actually tried to think and plan technical stuff for the future. Also, I started using auto-complete more vigorously because it often helped me discover some unknown C# methods. In the end, I passed the class with a A- score.

Somewhere later in my senior year, there were very little credits that I need. As a ordinary college student at this point, there were very little required things to do, you got all the time in the world. I figured that I should do something just for myself, a little coding project of my own. Turns out it’s a better option (life-wise) than just shooting my time away on the basketball courts5. At the time, one of my friends would always take taxi rides when he’s coming back to the campus from other cities. An idea then occurred to me that, what if there’s an app that helps you with calling reputable taxi drivers for your next fare ? So, to begin, I put together a Taxi driver credit lookup iOS app where you can lookup credits/comments by license plate. It had the basic CRUD functionality ready, but the UI is very rough (more than 60% of all UIs were just plain white) since I didn’t have any artistic touches in me. Anyways, the app works as well as the idea, but I did not get it on the app store since I didn’t bothered to pay for a developer account and I figured most of the user inputs I get will be negative ones since that’s the only time you’ll need a platform to vent, and I don’t think a negative platform can have any kind of commercial success. So I kept the project to myself. But nevertheless, it allowed me to try out AWS and mobile app.

Another experience worth mentioning was my senior year relational databases class. I did a classic php message board web application. The technical aspects weren’t much to write about, but that’s when I realized how easy it was to have something working on all devices by web (As long as that device has a browser, which I think every phone/gadget would have native support nowadays). I felt web applications wouldn’t go out of business at least until I’m 40 (at which point I’d like to have saved enough and retired) and if I can somehow get a grasp of it I can probably make a sustainable income. After all, it is one thing that I can over perform most of my peers and I don’t feel too many pressure doing.

Looking back, my university experience has taught me some text book basics about computer science, allowed me to try stuff out while also planting the seed in my heart to pursuit a career in web development.

Developer Career

After I graduated, I applied for a bunch of web developer jobs. I took an offer at a company that “mass produces” websites. I had a handful of choices, and I chose them over the others because during the interview, the interviewer expressed to me that this position will have very down-to-earth, hands-on experiences, the hired developer will be building websites from scratch. Coming right out of school, I knew this was exactly what I’m looking for, and no other offers can touch this one on that aspect. Plus, if they’re mass producing websites, I think I got to see different kinds of sites working in real life, which could turn out good for me. So I accepted, I didn’t really cared about the salary, since for me, I’m just trying to get into the world of web development, I need a way in more than I need to make money. At the point of my life, I can afford to live the bare minimum for a little bit. After a while, I learned a bunch of things that are needed for a modern website, included HTML template rendering/API design/Caching/Databases/SEO and also programming best practices on coding/using git. I felt this decision certainly has jump-started my career for the better.

After that first gig I had, I went to bigger and bigger companies that I learned about stuff that only bigger companies can provide. Such as git flow in a team of dozen devs, troubleshooting problems that comes with higher traffic (in comparison to my previous sites), and more importantly, the mindset/approach when troubleshooting these problems.

Conclusion

Here it is, a brief on how I learned to code thus far. I figured most coders would not take the first job that I took just due to its pay being low when you compare it to other entry-level jobs (some doesn’t even require a related degree). Whereas I had a related degree in computer science, I could’ve looked for jobs based on that fact and look for jobs with higher compensation. Ultimately I took a bet that I’ll accumulate enough technical skill faster than others and earn my paycheck somewhere down the road. To be honest the chances are at best 50/50, could’ve developed some bad habits or got locked into some outdated ecosystems and failed to catch up with time, which if I went that way I doubt that I can be half as successful as I am today.

It was later on in my career that I acknowledged one thing I thought was normal for entry level jobs. That is, not every company give developers full liberty on choosing their frameworks/tech stacks and just ride with them. In my case, I get to (also, I must) decide every technical aspect of whatever project I’m working on, while I also had to build it from scratch. All I had was verbal help and some arbitrary instructions from my colleagues, it wasn’t that they’re too occupied to help me implement stuff, I insisted on implementing stuff myself, since that’s the only concrete way to confirm my overall learning progress. So all I had was verbal help and I dictate what I implement and I took sole responsibility. Apparently that wasn’t the case for much else, from what I’ve heard, most entry level jobs had very precise instructions and there’s no much thinking involved, I guess they value velocity more than personal growth. But personal growth can help their company just as much, it’s just that it’ll certainly take more time. No black and white here, it’s all just preference. Plus, my compensation was not that good, so the company can afford some time overhead compared to others.

Life is short, careers are shorter, these are what worked for me, they might not work for you and I’m in no place to offer career advices to complete strangers like you. But whatever, we should just live from our souls and see where life takes us. The point of this post is considered covered, which is to share how my programming career was formed.


  1. A typical stereotyped career for programmers/engineers in Taiwan, based on my observations, is assumed by the majority to be like this:

    1. Finish college in a national university, majoring in something related to engineering.
    2. Get Master’s degree on some kind of engineering in top universities.
    3. Go to a IC design house to design chips and hardware stuff.
    4. Buy new houses, get nice cars, live happily ever after.
    [Back]
  2. It’s a gadget/hand-held device that has several apps bulit-in, mostly translating ones.

    This one looks a lot like the one I had.

    BESTA CD-952

    I’m very surprised that the company (BESTA) is still alive and selling these, I guess smartphones and internet didn’t overtake their market completely. I can’t remember the exact machine I had, but I do believe that it’s one of my parents' best investment considering how much stuff it helped me accomplished. (Picture courtesy of BESTA) [Back]

  3. Line stolen from Charles Boyle and Rosa Diaz in Brooklyn 99. It’s a great show and I love it. [Back]

  4. In retrospect, it’s funny how I can implement things with this notion back then, but in my first job and second job I’ve always lacked planning for the reasonably long term. [Back]

  5. Looking back, I think I’ve played basketball easily more than 20 hours every week. It’s crazy that I’ve done more basketball hours than class hours. One thing that all those hours have taught me is that I probably couldn’t compete at the next level. (All I had was range with consistent shooting and acceptable perimeter defense, nothing else was going for me). I sometimes wish that I could realize it earlier, but I also felt it’s unavoidable that it has to take this long (up until the senior year) for this revelation to reach me. [Back]