In literature, The Competent (Wo)man is a character who exhibits a very wide range of abilities and knowledge. The idea is similar to a Polymath or a Renaissance (Wo)man, and captured beautifully in this quote by Robert A. Heinlein:

A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects. Robert A. Heinlein, Time Enough for Love

One of my ambitions in life is to become a Competent Programmer. Today, I came across a variation on Heinlein’s quote that beautifully captures this idea:

A programmer should be able to find a bug, market an application, refactor a spike, lead a team, architect an application, hack a kernel, schedule a project, build a database, route a network, give a reference, implement user stories, analyze user stories, work in a team, work alone, use patterns, innovate, write documentation, have a real life, create a cool website, email efficiently, resign gracefully, admit ignorance, and keep on learning. Specialization is for recruiters. Peter Merel, Specialization is for Insects

I’ve never understood developers who describe themselves as a “PHP Programmer” or a “C++ Programmer”. Libraries and programming languages are tools, and calling yourself a “C++ Programmer” is a bit like if you were a Carpenter and called yourself a “Hammer++ Swinger”—it suggests a very limited tool belt. It also suggests that you’re missing the bigger picture. You don’t hire a carpenter to swing a hammer. You hire a carpenter to build a house. Similarly, you don’t hire a programmer to build PHP apps or write C++. You hire programmers to solve problems.

Some of those problems may require you to use PHP or C++, some of the problems need many languages at once, and many of the most important problems have nothing to do with the programming language at all, such as data modeling, system design, planning, testing, communication, and hiring. This is why I wrote a book that teaches programmers not only to write code, but also come up with business ideas, design products, figure out sales and marketing, define a company culture, and build a team. Of course, it’s still a good idea to become an expert at one or two skills, just not at the cost of all others. So instead of becoming a one-dimensional expert, strive to build both deep and broad knowledge, or to become what the Valve New Employee Handbook calls a “T-shaped person”:

We value "T-shaped" people. That is, people who are both generalists (highly skilled at a broad set of valuable things—the top of the T) and also experts (among the best in their field within a narrow discipline—the vertical leg of the T). Valve New Employee Handbook

Instead of a “Hammer Swinger”, strive to be a “House Builder”. Instead of a “C++ Programmer”, strive to be a “Programmer who has used C++ on project XXX”. Instead of a “C++ Programmer”, strive to be a Competent Programmer.

(Discuss this post on reddit)