Everyone has skills.
According to the dictionary, here’s the definition of Skill: The ability to use one’s knowledge effectively and readily in execution or performance.
In other words: ability to do something. Some will say: ability to do something well.
In a tweet a while ago, Jim Grenning defined the 3 skills of refactoring:
- Recognize bad code
- Envision a better design
- Incrementally transform bad into better, keep test passing
Ok, that’s four, but regardless, that’s a great definition. And he managed to put all that into one tweet!
Obviously, all those are skills, since they define the ability to do something.
But read them again: Not just abilities. They are higher abilities of great programmers. It doesn’t apply to most of us:
- Not every programmer can recognize bad code. Although every programmer can write bad code.
- Envision a better design? A different design maybe, but to envision a better one, you need to have skill #1, and then understand how it can be improved.
- To do the improvements incrementally requires not just the discipline, which not many of us have. It requires to envision the steps (skill #2), when most of us (sometimes) see the next step.
The good news? While not every programmer does this today, everyone can get there.
To me, skill is not just the ability. It’s the journey to achieve the higher level.
Anyone can improve their skills. The road is long, hard and full of learning, but everyone can get there. Most programmers don’t, by the way.
Decide to take the learning path. For example:
- Look at you code critically. Will you understand it in a year’s time?
- Once you’ve got the code working the first time, throw it away. Rewrite it better.
- And write tests. Lots. It’s a skill too, you’ll get better.
Skillz. Jim Grenning has them.
You can too.