- Part 1
- Introduction
- Deliberate Practice In Music
- Part 2
- Deliberate Practice In Software Development
So how do we deliberately practice in order to improve our programming skills?
I use the same principles that I use to improve my bass playing to improve the software I produce.
Overlooked Opportunities
I find that many developers focus too much on learning language and frameworks features. While a full understanding of the tools you are using is essential, if you simply stop there, you are missing so many opportunities for improvement. Implementation is only one phase in the software lifecycle, you should not neglect the other phases and within implementation itself there are so many dimensions that it is unlikely you will run out of things to improve even if you feel you know the implementation platform back to front.
On-the-job Learning
Within my normal work there are many opportunities to practice. To keep it fresh I will focus on different improvement goals each session. In one session I may focus on composability, in another readability in another testability. In one session I will identify and exact reusable components from existing code in another test whether a particular approach or design pattern will keep the design simple or if an alternative would be better.

Feedback
Test first design is ideal for maximizing immediate feedback. Pair programming gives lots of potential for feedback if you take advantage of it. Code reviews are a great way of getting feedback, however so often programmers see it as an annoyance. Tightening the feedback loop by getting early feedback from testers or users can be helpful.
Learning by Teaching
Teaching others is helpful in improving your understanding of the material. Whether helping a teammate with a problem or teaching a workshop on a topic or presenting at a meetup, the need to break down what needs to be done into small easily understood steps can help your own understanding and help organize your existing knowledge.
Learning from the Pain Points
I used the need to document an existing internal API to help drive improvement to the API. For each section in the API I would ask how can I change the API so as to make this section of the documentation unnecessary. I ended up simplifying the API a great deal making it much easier to use.
Learning using Practice Problems
You can use code katas or code koans to help practice your programming skills and there are many sites that offer problems for you to practice (see below).
More Information
Articles
Videos
Problems to Practice
- Project Euler - Solve mathematical problems using programming skills
- LeetCode - Solve coding challenges, competitions and mock interview
- HackerRank - Offers a variety of different types of programming challenges
- TopCoder - Solve algorithmic challenges within a time limit
- Code Wars - Community submitted challenges and discussions
- Code Chef - Community site with challenges, competitions and tutorials
- CoderByte - Coding challenges and tutorials
- Exercism - Coding challenges with assistance from mentors.
- Sphere Online Judge - Coding challenges, competitions and discussions
- Hacker Earth - programming challenges and interview preparation
Programming Games
- Codingame - program simple games then play them
- RoboCode - program tank AIs and pit them against others
- CodeCombat - write code to solve puzzles
No comments:
Post a Comment