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.