Programming workout

The way to become a better programmer through repetitive exercises

As a developer, I have always been interested to become better. Taking courses, reading books and articles, listening to podcasts and watching live coding, screencasts and conferences all these activities were part of my life. But my level hasn’t been changing too much.

Working on some tasks, I felt as if I was hitting the wall, missing something, doing them wrong.

I missed one crucial aspect — a practice.

What skill to practice?

Skill — the ability to do something well.
From the OS X dictionary.

Skills are divided on hard and soft categories. Soft skills will determine your potential to grow. Hard skills determine your ability to perform a task.

Hard skills

Hard skills are specific, teachable abilities that can be defined and measured, such as typing, writing, math, reading and the ability to use software programs. By contrast, soft skills are less tangible and harder to quantify, such as etiquette, getting along with others, listening and engaging in small talk…
investopedia.com

Examples of hard skills:

Algorithms, data structures, programming languages, frameworks, tools, programming techniques, system and database design, patterns, refactoring, troubleshootimg and debugging, problem-solving, ability to understand a business domain, math, logic, writing, typing.

Soft skills

Soft skills are character traits and interpersonal skills that characterize a person’s relationships with other people. In the workplace, soft skills are considered a complement to hard skills, which refer to a person’s knowledge and occupational skills. Sociologists may use the term soft skills to describe a person’s “EQ” or “Emotional Intelligence Quotient,” as opposed to “IQ” or “Intelligence Quotient.”
investopedia.com

Examples of soft skills:

Ability to learn, ability to explain and teach, positive approach, willing to take challenges, adaptability, patience, empathy, creativity, communication, self-motivation, self-management, open-mindness, leadership, responsibility, accountability, teamwork, decisiveness, ability to work under pressure and timeline, flexibility, negotiation and conflict resolutions, perseverance, discipline.

Concentrate on skills that makes difference

There is an immersive amount of skills that can affect how good you are as a programmer.

You may concentrate on skills that make you feel passion. Your passion will drive you to level up your skills. Stronger skills will give you a feeling of passion for what you are doing. Passion for skills. Skills for passion.

Another option is to learn what is popular nowadays.

Four steps to become better

First, a clear vision. The vision of yourself in the future, who you dream to become. Make this vision as detailed as possible.

Second, In order to become your vision, you need to identify goals. It is important to decide in what time range you want to achieve your goals. One year is a good distance, two years suit for junior developers and newcomers in new technology.

Third, Now you need to understand how to achieve your goals.

Four, you have half of success. Another half of success is hard work. Hard work means focus, persistence, repetition.

Build a workout

Barbara Oakley with her course “Learning how to learn” explains that repetition, recalling, rest, chunking are the keys to learning well. It means that good practice should be short in time, concentrated on one bite, repetitive, persistent and subject under studying should be practiced in different context.

Below are three workout examples. Each contains four steps and based on the fundamental principles of learning.

General productivity

“Become a productive developer, with a lot of knowledge and strong problem-solving skill” — is a good example of vision.

What really matters when we talk about the productivity of a programmer? Googling for a solution, hacking code that doesn’t work, doing mundane things manually, using framework or language in a non-productive way. These activities may stop you to be a productive developer on a day to day basis.

Goal #1 Know patterns, algorithms, tools, bash

How to achieve: learn one pattern, algorithm or tool command at a time and practice it;

Goal #2 Problem solver

How to achieve: solve problems from exercise books and sites on the right way.

Goal #3 Exceptional debugging skills;

How to achieve: apply debugging techniques at StackOverflow questions related to bugs.

Goal #4 Type fast and clean, produce code faster with Vim editor

How to achieve: practice touch typing with typingclub.com; learn the editor tricks and features;


Monday workout:

  • touch type practice, 15 mins;
  • practice a design pattern from the Design Patterns book on a fictional project for 30 mins; rotate patterns, do not continue your previous work, always start from scratch;
  • solve a problem from exercism.io, 15 mins.

Wednesday workout:

  • practice next Vim feature, 15 mins;
  • practice one algorithm or data structure from Hackerrank for 15 mins;
  • fix one bug on StackOverflow, 30 mins.

Friday workout:

  • touch type practice 15 mins;
  • practice bash utils for 15 mins;
  • practice any tool you interested in ack, git, etc for 15 mins;
  • solve a problem from exercism.io, 15 mins.

Become a exceptional Node.JS developer

“Study Node.JS from top to bottom, know every quirk of JavaScript, know ecosystem and being involved in the community” — is a vision for an exceptional Node.JS developer.

Being an expert in any field is a matter of learning and practice.

Goal #1 Know all about JavaScript

How to achieve: practice through JavaScript reference; read good books you don’t know JS series (can read for free on GitHub), JavaScript: The Good Parts, Secrets of the JavaScript Ninja.

Goal #2 Have an exceptional knowledge of Node.JS

How to achieve: practice every module from Node.JS docs

Goal #3 Be involved in Node.JS ecosystem

How to achieve: contribute to beloved Node.JS project


Monday-Friday related activities:

  • read next great book about JavaScript or Node.JS in spare time, 30–60 mins a day is recommended.

Monday workout:

Wednesday workout:

Friday workout:

Ruby refactorist

“A Ruby developer who able to save a project that comes in a bad shape, fix a code that teammates avoid touching, by all means by making complex things simpler” — this is a narrow perk but a really special one, many colleagues will appreciate it.

Goal #1 Be able to refactor legacy ruby codebase

How to achieve: practice Behavior Driven Development (BDD), refactor legacy code base on open source project

Goal #2 Be able to reduce codebase complexity

How to achieve: with Ruby science book learn to spot code smells and illuminate them; practice refactoring methods from Refactoring book

Goal #3 Master of improving project design

How to achieve: master Domain Driven Design, Hexoganal architecture, practice classical design pattern from Design Patterns book.


Workout for Monday, Wednesday, and Friday:

  • refactor one codebase with writing BDD and improving code, multiple times, at least 3 times, per 10 mins; then delete your refactor work and tests and start again, 30 mins total;
  • practice one code smell by taking one source project of your choice, find this code smell and get rid of it, do it for 15 mins; practice on a set of 2–3 projects, rotate code smells that you fixing;
  • practice a pattern from the Design Patterns book, by implementing the pattern on a fictional project for 15 mins, rotate patterns; do not continue the previous work, always start from scratch;
  • practice new architecture with a fictional app for 30 mins; do not continue the previous work, always start from scratch.

As a bonus to your practicing, you may make a PR with the final version of refactoring to a project under refactoring repository. Make PRs from an at least 3rd version of refactoring.

No rules

“Test driven development evangelist”, “golang dev + devops”, “multi-paradigm developer”, “programming languages polyglot”.

Set personal vision who you want to be.

Derive great goals, know how to do it, and make it happen.

Ways of practicing

To make your own workout use the list of practices. By combining different approaches you will grow even faster.

Practice with coding challenges

Code challenges allow you to train your problem-solving muscle by working on single small problems and increase it in complexity as you train.

Example coding challenges resources:

Code Katas

A kata is an exercise in karate where you repeat a form many, many times, making little improvements in each. The intent behind code kata is similar. Each is a short exercise (perhaps 30 minutes to an hour long).
by Dave Thomas, source

A curated list of code katas

Contribute to open source

The best way to learn how to write your own songs is to play other people’s songs.

By reading and understanding other developers code, you absorb many ideas and outcomes of different solutions. It’s so much fun to take part in a project used by other people.

Explore projects on github.

Helping others

No matter what experience you have you can help others. You have a different background, a different set of related soft and hard skills. Starting from the first week, the first month, the first year you already know more than others may know.

By applying the knowledge that you own to help other people, you make your knowledge more solid. Sometimes problems of others allow you to see what you know from a different perspective.

The best way to help is to join communities, chats and mailing lists. If you don’t have an account on StackOverflow make it and start answering fellow programmers questions.

Read and practice documentation and man pages

A man page (short for manual page) is a form of software documentation usually found on a Unix or Unix-like operating system…
wikipedia

Open a man page for a tool, utility or program that you are interested in and practice it, feature by feature, command by command, flag by flag. Apply what you learned to everyday tasks. This way you increase your productivity.

Practice each chapter of documentation for your favorite language, framework. This way you expand your knowledge.

Call to action

Have a vision, set goals, know how to achieve it and do it.

3 hours a week will make a huge difference.

Create your workout, practice and become better!


Thank you for reading this article. 😘

Share your thoughts in the comments below.

If you like this article share it with your friends and colleagues ✉️ and clap for it 👏 as long as you like. Your claps will help others find the article.


The inspiration of making my personal workout became from this video, made in 2012, by Michal Taszycki at Wroclaverb conference.

Programming workout, by Michal Taszycki at Wroclaverb conference.