All Posts

A Skills Routine For Programmers

Dev This is not me, but it very well could be

Just do the work

In my early 20s I trained as a Thai Boxer, before that as a Western Boxer. Today, I still train but mostly to stay in shape and for the love of the game. One skill I’ve transferred over into software development is building a routine of work that improves my fundamentals on a daily basis.

The daily routine for a boxer goes as follows:

  1. Running (3-5km)
  2. Skipping
  3. Shadowboxing
  4. Pad Work with a trainer
  5. Bag Work
  6. Light Sparring

These are usually 2-hour sessions twice a day in Thailand 6-days a week with a break on Sunday. Most of this time isn’t spent doing fancy combinations or techniques like spinning elbows and flying knees. It is spent sharpening the fundamentals of Muay Thai. It is boring, sweaty and often monotonous. If you’re a foreigner training in Thailand, you immediately notice the mechanical approach Thais take when training. Solemn-faced, Mechanical but passionate.

After a couple years of training, it feels second nature. You learn to appreciate the small improvements in your technique and the successes in sparring. This is called the ‘Boxer’s Work’

boxerskip Don’t they look happy?

In software development, what actually needs to be done and how you need to do it convuluted. No Senior Engineer really shows you what the job is like or the small tip and tricks needed to be successful in the field. Its a trial by fire out here. There is one known truth in programming and applicable to most things; if you have strong fundamentals and diligent work ethic you can be successful. This is what we are trying to achieve by creating a routine and approaching our days this way.

I’ve developed my own approach to a ‘Developer’s Work’ in the same spirit as a Thai’s and retrospect I couldn’t have been more Thankful for this routine.

It goes as follows:

  1. Typing Test
  2. Leetcode
  3. Bug Fixes
  4. Testing
  5. Writing

1. Typing Test

Typing is an essential skill for Programmer’s. It is the primary way we interface with our machines if you’re a slow or inefficient typist, it can hinder your workflow. Typing well isn’t a prerequisite for programming, you could argue that its necessary. I assume in our heart of hearts we know that if we’re to excel in programming you have to be a touch typist.

The Thai’s have a rule to fighting and traning. If you don’t run your 5km in the morning you don’t get to train and conversely you don’t get to fight. The reasoning is that if you don’t run, you’re not conditioned. If you’re conditioned you will lose can possibly lose the fight to the fight to a well-conditioned athlete who is less technically skilled. So why risk it? Be conditioned, and be more technical.

I keep my typing skills sharp by taking several typing tests in the morning befor I start my day. Long before I even open my email client, I’m wamred up. This is done through several applictions:

  1. TypingTest.com

Warm up with a 2 - 3 minute sessions of ‘random text’

These are short sessions that will get writing complete sentences and thoughts.

  1. Speedcoder.net

Followed by sentences, you need to work your special character muscles. We don’t want to lose and break our flow state when get into the real meat of the workout.

Typing code is much difference than typing alphanumeric characters. This is due to the placing of special characters on traditional character layouts where special keys are primarily typed with the right hand.

I like to do 4-5 of these starting with C based languages before moving onto Python or Ruby.

2. Leetcode

Much of the community is polarized on the use of Leetcode style questions in the use of testing prospective employees. For better or for worse this the reality. Personally, I don’t mind it as I find it is a core skill to be a programmer. If a programmer couldn’t weild algorithms with efficient time space space complexity with the proper data structures, you would have programmer that could only perform CRUD operations in their framework of choice.

Starting the day with Leetcode questions is a great way to warm up. If you’re an experienced programmer, search for ‘easy’ questions that work with graphs, hashes and binary search trees.

Aim for 2-3 questions depending on your experience and cap it off at a maximum of 45 minutes.

3. Bug Fixes

This is the other side of the coin in relation to Leetcode questions. Bug fixes tend not to be heavy on creating an algorithm but it warms up other nerd muscles because it involves going through a process. A typical process goes as follows:

  1. Replicate the bug
  2. Understand the problem
  3. Fix the bug!
  4. Break your solution

I suggest pick a small tedious and nagging ticket in Jira or whatever your team uses. This should take a maximum of 1.5 hours.

The reason I like to practice will small bugs because it gets you into the mindset of peering through different parts of the application. First, you see whats broken and then you try to understand why its broken and this is an important step in programming. ‘Why?‘. This is where you get to warm the concepts of abstraction that are so prevelant to computet work.

4. Testing

Much like Bug Fixes, testing completes the other side of the abstraction coin. I’m one of those developers that believes that no software suite has 100% coverage. If we did, our only bugs would be logical ones, which are easy to fix. In that case we would be able to go home after lunch.

5. Writing

Outside of communicating with your colleagues, writing is the #1 soft skill that I’ve been recommended to develop by mentors, HN, Lobste.rs etc. Much of our work is writing. We construct emails, we write documentation we write memos to convey our opinions. In large companies, its often the best technical writer that gets the cake. This is true for Amazon, we’ve all heard the age old tale of Jeff Bezos making it mandatory to write 2 page document conveying the concepts of a presentation before you give it. There is no better way to digest and internalize information than to write into your owns words. The same has been said for hand writing notes, I believe it is the same for concepts and techincal writing. The more you use this muscle, the better you’ll be in your career.

My advice to be spend a an hour of your day writing, whether it would it be a blog post, documentation or an email. Carefully proofread and make 1 or 2 revisions before you publish it.

Conclusion

This routine should take about 2 hours of your day, some of which can be used during work day. For example writing, testing, bug fixes is part of a professional programmers workday. Typing and leetcode can be done on your own time.

I will adhere to this routine until I retire from programming. It has built a solid foundation for me to build the my fundamentals. Mind you, this is not a recipe for success as a developer, but more of workout routine to keep you sharp while you grow into this field.