One of the strangest situations that programmers encounter is being a Local Maximum. That is, to be the best programmer that is reasonably accessible to those around you. When you're an undergraduate in college, that might mean that you're the only one in the room who's figured out how to use
System.out.println without causing
javac to vomit, if you're working in a software company it may mean that you're the real deal (or that the company has bad communication between groups), and if you're an independent developer it may mean that you don't actually have any coworkers.
It helps to think about Local Maximum as they contrast with Free Electrons. A Local Maximum might be a Free Electron--an amazingly productive engineer--but much of the time they are just a bit better than the people around them. Of course, that means that in a low quality shop, the Local Maximum might be a terrible engineer, despite being the best engineer available.
This chart should help clarify:
While there can only be one Local Maximum per group of programmers, the mantle falls most often on independent and contract programmers, who are frequently in situations where the programming group has a headcount of one. It's unsettling to be one, because along with it comes the tacit understanding that nothing your group produces can exceed your capabilities: you are the hard limit on the quality of what your group can create. You're either Sysphus or Atlas, but either way you're fucking with a heavy globular object.
When you find yourself in the position of being a Local Maximum, you have three choices:
- Be a Narcissistic Prick, whose soul divorces you and takes the kids.
- Be a Wise Man on the mountain, who occasionally descends to solve problems.
- Be a Teacher to those around you.
Whether you learn towards the Wise Man or the Teacher certainly depends on your personality, but it also depends on your beliefs about knowledge and learning. This is a deceptively important question, because one of the peculiarities of being a Local Maximum is that you must continue learning without an authoritative source to guide you. Before becoming a contract programmer, independent programmer or joining a small shop, it's important to consider whether you want to enter the role of being a Local Maximum. Are you willing to take responsibility for your own growth, and for absolutely everything else, as well?
At times, there is a certain malaise with knowing you don't have anywhere to turn. At times, a quiet pride.