How to become a programmer when video courses are not working for you?

Speaking to my friends who would like to become programmers, I noticed a common pattern in their complaints about the difficulties they experience. Despite watching video courses or reading books, many beginners don’t feel much effect when it gets to actually trying to code. It feels too hard or too slow, they feel stuck or unconfident. Below I’ll try to describe alternative approaches and warn about one dangerous trap I encountered at the beginning of my career.

First of all, it is amazing that you watch videos and read books — keep doing this, it is useful anyway! But what’s important to remember about this activity is that only reading and watching never will make you a software engineer. Imagine somebody who wants to become a musician and dedicates most part of their learning time listening to other composers. Or a striving painter who visits all the galleries around but can’t find time to draw something on their own. Or an aspiring learner of a foreign language who avoids conversations.

In order to get any skill, programming including, you need to dedicate most of your learning time to the exercising. The exercising means — solving problems in the programming language of your preference. The coding itself requires necessary components: general problem-solving skills, algorithmic thinking and knowing language syntax. When people only watch videos or read books none of those components is exercised. Instead exercised comprehension and memory, which is obviously useful as well, but not enough.

At the beginning of my path, I had a similar situation — the main focus was on reading ( it was hard to find any video courses back in Ukraine, 2005 ). It was actually hard for me to find a computer, I did not have one at home, so I mainly read from a limited amount of paper books and came up with my own ideas which I would code later at school after lessons or when visiting my friends who had a PC. After I got my computer it became obvious to me that I needed to get my hands dirty somehow and I got that idea “Well it’s time to get some real project!”. I did not know about open source software, I did not know English, I also was only finishing the school and could not expect any long-term job with a mentor. So the selection of practice methods and measuring my success was limited to getting some real free-lance projects. The only way to understand if I already become good enough — was to jump into the real market and let it test myself.

Despite it was a great success for me in the end, the lack of skills kicked me really really hard. On my first project, my client wanted an online store and I committed to doing it within one week and less than 100$ cost. The progress was slow because I needed to open and read PHP language reference, struggle with simple algorithms, learn SQL and communicate with the client. This led to sleepless nights and a huge amount of stress. At the end of the “sprint” which took 10 days, 19 hours each almost without breaks even for food, I was seriously thinking that programming was not for me.

Stress lasting as little as a few hours can impair brain-cell communication in areas associated with learning and memory — Science Daily

You probably could imagine how this crazy schedule hindered the learning capacity of my brain. So the efficiency of such practice was pathetic [1] and I do not recommend you to repeat this at home. If I were beginning my career now I would choose an alternative approach. I would dedicate most of the learning time on exercising in a safe environment.

A safe environment is crucial for obtaining skill efficiently otherwise you simply risk to burn yourself out by being overwhelmed with too many problems and challenges at once. Such environment means — no pressure, stable pace, regularity and feedback. In order to get most of your capacity to learn something you need to be curious, focused, feel playful, challenged, not terrified with a fear of missing a deadline or messing the data by coding straight in development console on production [2]. Fortunately, plenty of places have appeared since 2005 where you could train your skills without putting yourself under unneeded stress. One of them is Codewars.

Codewars is a website with a huge amount of “Coding Katas” i.e problems that you need to solve through coding. The word “kata” is borrowed from martial arts, where it means a precise set of movements simulating a situation in combat and performed for exercising by a warrior. ( Originally, I discovered the idea of Katas from the “Clean Coder” book written by Robert C. Martin ).

The katas are graded by difficulty levels measured in “kyu”. The greater the “kyu” level — the easier the kata. By finishing them successfully a programmer is progressing in their level towards mastery. The problems are available in a great variety of programming languages including JavaScipt, Python, Ruby, Java. There is a handy way to filter them to select those fitting to your current level of confidence. Every kata has a set of acceptance tests besides the description of requirements. A learner must write the code to make the tests pass. Also, it’s possible to write own tests. This is great because it encourages you to start from leading practices as Test Driven Development. After a kata is done a warrior can review solutions submitted by others, rate and discuss them. The service is free.

If you practice on katas - all the core skills will be exercised:

Problem-solving. Katas require to solve a problem first. This is a universal skill that you will use daily in your career regardless of language, framework or industry. Katas also will help you to identify the limitations of your analytical skills — the moment when “Ouch, I am stuck” feeling appears and will help to unveil your approaches to creative problem-solving.

Algorithmic thinking. A programmer should be capable of deconstructing a solution of a problem into a series of commands, conditions, loops, functions, objects, data structures almost on autopilot. The only way to get to this point is through repetitive training which will pay off in the faster speed of turning real-life business rules into the code constructions.

Programming language syntax. It is more efficient to learn it through katas because there is plenty of time to read a language’s reference or a book and compare different approaches.

Ability to express your solution clearly in the code. If you want to get into serious impactful projects you must write maintainable code which starts from simple care about the reader. You need to learn to express your intent clearly so others can understand it and modify when a need arrives. Many beginners tend to write their code in a cryptic and pretty messy way which should never be used in serious projects. You will have a chance to train this skill as well.

All these facets of your mind are exercised when practising Katas. And the most importantly Codewars gives you a safe and calm environment that stimulates your brain’s learning abilities. So pick your language, schedule, from 15 to 90 minutes per day and go write the code, starting from the simplest and gradually progressing to harder. After getting “confident” ( kyu 3 ) with the basics you could join an open source project or kickstart your own to try to make and deploy something more “real”. Later try to search for an organisation that creates a supportive environment for junior developers and have strong mentoring culture.

Codewars is the place where I am practising so you can connect with me and maybe ask for a code review. Yes, it is not a typo — I am actually still practising, despite all that time in the software development industry, and I am pretty sure I’ll keep doing this for new programming languages. It is also useful for dull periods at work when the brain is mainly used for duct-taping together different libraries and frameworks related code.

References

  1. How curiosity changes the brain to enhance learning

Extreme Programming enthusiast; Status quo breaker; Geek; Father - http://geekvasyl.me