Coding Challenges

Author: Ho Yin Cheng

/

Created: December 2, 2017

Coding Challenges are fun ways to practice programming and can help you explore new concepts. Since I’m trying to retrain myself to be employable as a software engineer, I figure that picking up a coding challenge would be a good way to prepare myself mentally for Fizz Buzz style tests in interviews. It would also make the process of going through my own computer science syllabus far less monotonous. So, the obvious question that follows is, which one should I attempt?

Choosing a Coding Challenge

There are quite a few that I was already aware of and many more popped up during my research into this topic. Quick list of examples broken down into types:

And there’s a ton more. Out of all the ones I knew of, a few stood out that caught my attention. From those, these are the ones I ultimately decided to use as my motivators for practicing programming. And yes, I am doing multiples at once because why not? Many overlap and you shouldn’t limit yourself!

Ludem Dare

Currently ongoing! Ludem Dare is a game jam that gives you a theme and a set amount of time to create a game from scratch. Right now Ludem Dare 40 is running from Dec. 1st to Dec. 4th with the theme: “The more you have, the worse it is.”

It’s a bit late for me to get in on this, but I may try this anyway since it’s over the weekend. I can also challenge myself at my own leisure with themes and rules from the older competitions. Old Ludem Dares are also a great way to get gamedev ideas! Which leads me into the next challenge.

#100DaysOfCode

I learned about this one from the latest episode (140) of the TalkPython[‘Podcast’]. In the episode, PyBites was interviewed about how they did the challenge with Python. What drew me to this particular challenge were:

The biggest problem the PyBites duo ran into was getting ideas for the 100 days. I’ve thought about it and combined with their suggestions, I think I’ve got a good way around this:

  1. Utilize other challenges like Ludem Dare.
  2. Write programs/scripts I want to make.
  3. Focus on things I want/need to learn (programming concepts for example).
  4. Use ideas from Hacker News/Reddit that interest me.
  5. Summarize my progress through Books/MOOCs I’m taking.

Lastly, I won’t be sticking to a single language for this challenge. After all, I will also be doing Ludem Dares every now and then and don’t plan on sticking to a single game library/framework/engine. I want to test out a lot of technologies that interest me. This should give me enough flexibility to keep the ideas flowing. That said, I will try to keep the majority of the daily challenges in the languages I plan to use professionally.

Devember

I learned about this one from reddit just before writing this article. It runs for just the month of December, and the rules overlap with the challenges I’ve already settled on:

  1. Duration: Whole December. Every day. At least 1 hour a day.
  2. Activity: Programming for at least 1 hour. Updating a public devlog about the code done. Updating a public repository with the code done.
  3. The Contract: Reiterates #1 and #2 and adds greater focus to the challenge. It also provides an actual contract to sign yourself which I’ve done below:

I, Ho Yin Cheng, will participate to the next Devember. My Devember will be to make a game. I promise I will program for my Devember for at least an hour, every day of the next December. I will also write a daily public devlog and will make the produced code publicly available on the internet. No matter what, I will keep my promise.

I hereby dub my Devember, gamedevember. I’ll be using the theme from Ludem Dare 40 as the goal for the game I plan on making. I won’t be working on the game every day as I will also be doing the #100DaysOfCode challenge. I will be jumping languages and libraries/frameworks/engines as I haven’t made up my mind on what to use. I will follow-up with what I settled on and blog about my progress.


I’m already a day late as the two cats I’ve been fostering started taking over my computer last night, so I’ll double it up this weekend to catch up.

One Game a Month

The last of the challenges I’ll be embarking on. I’ll be taking on this challenge in a much more relaxed manner as the only rule is this:

There are no rules. This is a personal challenge. Have fun and be nice.

Also, the theme for a given month may not overlap with Ludem Dare. For example, this month’s theme of Jam certainly does not unless… hmm… I may have something but I’m not sure if I’ll be able to get it done in time to submit to Ludem Dare.

My goal in taking on this challenge is twofold:

  1. Scratch my gamedev itch, so I stop thinking about going indie so much.
  2. Give myself a break from the more serious “study” challenges that I’m using to prep myself for interviews.

Simple and not entirely serious. If I can’t finish a game, I’ll at least post my progress every month.

Self Discipline and Motivation

Figuring out what I want to do is only the first step. A hard first step given that I’m often hit by analysis paralysis, but now that I’ve made my determination, I need to find a way to keep myself on-track and focused. Knowing myself, I’ll start with these strategies and refine them as I go along. If I can make doing these challenges a routine habit, then I’ll know I’ve made a real change in my life.

Getting Things Done?

I’ve seen this recommended a lot but this methodology never worked for me. I have an odd paradox of procrastinating and yet being a workaholic. I get things done but never the things that I want to do as personal goals. There are rare bouts of productivity but never a sustained run. So why?

I have a page in my journal with this as the very first link: Procrastination Is Not Laziness This article rang so true to me that it hurt.

“You see, procrastinators tend to be people who have, for whatever reason, developed to perceive an unusually strong association between their performance and their value as a person. This makes failure or criticism disproportionately painful, which leads naturally to hesitancy when it comes to the prospect of doing anything that reflects their ability — which is pretty much everything.”

Give me a boss, clear metrics, and a deadline. I’ll get the job done.

Give me a vague personal goal, no endpoint, and just myself to rely on. I’ll stall hard.

There’s a page in my journal analyzing myself and talking to myself over the contents of that article. I need to reread it every now and then to “reset” myself. It helps but eventually, I’ll fall back down into the self-confidence rabbit hole. So everything I’ll be trying this is built to prevent this downward spiral.

How?

  1. Checklists & Streaks - TODO lists never work well for me because they grow unwieldy and I end up losing focus. For me they work better as reminders in the form of note taking. Checklists, on the other hand, are repeatable and keep me accountable. I’ve also found that combined with streak tracking, these work far better for me.
  2. Starter TODO Task - I’ll still use TODO lists, but only for the aforementioned reminder/note taking. All of my TODO lists devolve into that anyway so why not take advantage of it. Out of all the reminders I write down, I will designate one of them as a starter task that will be the very first thing on my checklist. Starter tasks should simulate the psychology of what makes me productive at work and be so easy that the threshold to start is near zero:
    • boss == checklist
    • metric = have a very clear goal
    • deadline == easily accomplished in a few minutes
  3. Time Tracking / Pomodoro Technique - I already track my time, but I find that it’s not quite enough. I tend to do spurts which is very bad for my RSI. To manage my health and to keep myself from burning out too early in the day, I plan on testing out the Pomodoro Technique.
  4. Workflow - I have none yet. However, I plan on building one out that I can follow along like a checklist for different types of coding - gamedev, webdev, mobile dev, etc.

Checklist

Every day I plan on doing the following:

Simple, right? Well not really. I need something to code and write about. I also want to achieve my goal of getting a job as a software engineer. To accomplish this, I’ll be supplementing my daily checklist with these tasks:

Goals

If all goes well, I hope to accomplish the following:

Wish me luck!


Copyright © 2011-2020 Ho Yin Cheng