I’m very explicit about this to everyone I talk about programming to (I work on large-scale projects, mind):
This job is like being a plumber living in the basement of a ten-square-mile building. Not only do you not understand how all the pipes connect, you will never understand where all the pipes connect, and that’s okay. This is not a job for people who have to understand all the minutia in order to feel comfortable making a change, nor for people who expect to get a change right the first time they try it every time they make a change. You have to be comfortable screwing up, and more importantly, comfortable admitting you’ve screwed up so you can undo the mistake and try again. Just try to learn from your mistakes each time.
Do all work planning for the possibility that someone else did something incredibly stupid, and will do something incredibly stupid later. Expect zero common sense. When you run a new line from point A to B, make sure it can handle not merely fresh water and sewage (both, at all times), but also gas and plumbing pieces being run through it, and take what steps are necessary to deal with this.
Simplicity is the most important part of this job, because every bit of complexity you add makes every subsequent thing harder to do without adding even more complexity. Complexity snowballs. Imagine being under there, looking up at a tangled mess of pipes, and needing to run a new line; now imagine a single pipe with branches going out and up. One of these is easy to modify, the other is difficult, and the difficult one is going to require a more complex solution, making the next change harder still. Don’t be afraid to make things less complex; some of the most valuable work you’ll do is simplifying things.
But don’t expect simplification to be appreciated by anyone; indeed, prepare for the need to say nothing about having done so. Your most valuable contributions may require you to be completely silent because they weren’t in somebody else’s priority queue, and you don’t to annoy anybody by letting them know you’re ignoring their priorities. The job is very political, and populated almost entirely by people who have no sense of politics, or who think politics shouldn’t matter. Pick your battles carefully—and everything you work on is some kind of battle, and if you don’t know who the sides are, you’re in dangerous territory.
I’m very explicit about this to everyone I talk about programming to (I work on large-scale projects, mind):
This job is like being a plumber living in the basement of a ten-square-mile building. Not only do you not understand how all the pipes connect, you will never understand where all the pipes connect, and that’s okay. This is not a job for people who have to understand all the minutia in order to feel comfortable making a change, nor for people who expect to get a change right the first time they try it every time they make a change. You have to be comfortable screwing up, and more importantly, comfortable admitting you’ve screwed up so you can undo the mistake and try again. Just try to learn from your mistakes each time.
Do all work planning for the possibility that someone else did something incredibly stupid, and will do something incredibly stupid later. Expect zero common sense. When you run a new line from point A to B, make sure it can handle not merely fresh water and sewage (both, at all times), but also gas and plumbing pieces being run through it, and take what steps are necessary to deal with this.
Simplicity is the most important part of this job, because every bit of complexity you add makes every subsequent thing harder to do without adding even more complexity. Complexity snowballs. Imagine being under there, looking up at a tangled mess of pipes, and needing to run a new line; now imagine a single pipe with branches going out and up. One of these is easy to modify, the other is difficult, and the difficult one is going to require a more complex solution, making the next change harder still. Don’t be afraid to make things less complex; some of the most valuable work you’ll do is simplifying things.
But don’t expect simplification to be appreciated by anyone; indeed, prepare for the need to say nothing about having done so. Your most valuable contributions may require you to be completely silent because they weren’t in somebody else’s priority queue, and you don’t to annoy anybody by letting them know you’re ignoring their priorities. The job is very political, and populated almost entirely by people who have no sense of politics, or who think politics shouldn’t matter. Pick your battles carefully—and everything you work on is some kind of battle, and if you don’t know who the sides are, you’re in dangerous territory.