One of my ongoing questions is whether I need to be more of a system administrator or more of a developer. The differences between them make for an interesting thought exercise - not the differences in activity, but the difference in the mental demands that the job makes. Right now, I picture them as part of the same spectrum, but at different points on it. Similar to the dilemma of teaching, with its tension between reference material and narrative, there’s a tension between creative activity and refining activity.
The fundamental posture of system administration is conservative: we have a system that’s working, and priority one is to make sure that it keeps working. We of course want to improve it, but that’s what we have test networks and deployment procedures for, and sometimes keeping everything moving so smoothly that it’s invisible to end users takes up more than 40 hours a week. We think about wires that might break, hard drives that might fail, email that might disappear into the yawning maw of /dev/null, ACLs that might expose data to the wrong people, and in general about a million things that could go wrong.
This is not to say that developers don’t think about that - but the fundamental posture of developers is creative. While maintenance programming is a real thing and a noble pursuit if it’s what you’re called to, more often we crave the luxury of starting from scratch. Necessarily, that means that our programs will spend a lot of time in a state of “not working yet,” and that’s okay. We are a lot more likely to deliberately break something on our way to a solution that we’re satisfied with. While we spend time debugging and engineering robustness, which require thinking about how things could fail, it’s much more pleasant for your average developer to think about the awesome things this program will do when it’s working right.
I feel called to both of these courses: the shared activity of finding a way to make a system work is very, very satisfying to me. It is a puzzle-solving activity - what can I fiddle with to get this to come together elegantly? How does this system actually work? What do I need this system to do? These are questions that it’s interesting to investigate and answer.
My biggest disappointment with my college is related to this - my college is interested in teaching sysadmins, and not at all interested in cultivating hackers and developers. I’m very sad about that because there’s an important part of me that school doesn’t care about. Fortunately, the huge corpus of hacker lore on the Internet is one big playground for someone who’s inclined to self-education. Stack Overflow, for example, has been very good to me, and the Internet in general is my textbook. So I take comfort in knowing that no matter which path I give more of my time to, the ability to efficiently soak up the professional lore from the Internet will stay useful.