The way to hone your skills and become a more productive 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?

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…


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.”


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 make a 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.

Four steps to get 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 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 a 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; 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, 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, 15 mins.

Become an 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:

practice one chapter from MDN JavaScript reference, 15 mins; contribute to Strapi or Gatsby project, 30 mins;

Wednesday workout:

practice one chapter from MDN JavaScript reference, 20 mins; practice one module from Node.JS documentation, 20 mins;

Friday workout:

practice one module from Node.JS documentation, 15 mins; contribute to Strapi or Gatsby project, 30 mins;

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 a 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 classNameical 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 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 code of other developers, 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…


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!

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