What I think about when I think about writing about writing code

Writing is hard. Writing about writing code is very hard.

I am not a good writer. This is hard.

The act of writing code is hard to explain. I feel my way through it, often like an adventurer navigating a cave without a torch. Groping around looking for any sort of sound or sensation to offer a clue. Relying mostly on intuition on experience and intuition I may eventually finding some iridescent moss to lighting a way. But is it the way? Won’t know until I've traveled down it a bit. I gather some of the moss into a crude torch and use it to light up ever deeper parts of the cave. Shedding new light in the darkness. Sometimes we find this leads to the way out other times the moss fades and we are lost again only to backtrack, gather more moss and dig deeper again. There are dead ends, false hopes and plenty of backtracking. Finally I can smell fresh air and bee-line for the surface.

This pattern of exploration may very well lead to an exit but it doesn’t lead to a very thorough understanding. Sure we I got out. But I couldn’t very well tell you how. And even if I could it wouldn’t very well make sense.

What the hell was I doing there anyways?To be perfectly honest What was I doing in that cave anyway? No torches or plan? Did I even bother to think this it through at all? What business do I have exploring caves anyways? I don’t know what I’m doing... And what business is it of mine to be exploring caves in the dark anyhow? Obviously, I have no idea what I'm doing.

We recently added an intern to our team at work and one of my first comments to her (and to myself) was that thinking about writing code is way harder than actually writing it. Stopping to consider what you are going to do requires patience, communication, clarity of thought, and a deep understanding of the problem you are trying to solve as well as the existing code base within which you are to solve it working.

It's actually a lot like writing code. Just with people and on a whiteboard. Talking instead of doing. Talking about the doing before it begins.

My problem often stems from a sense of adventure. It’s a lack struggle of patience. I like to write code! I like to spend time exploring it, breaking it, seeing what happens when I go down this path or the other. I find exploration far easier and exhilarating than planning. Planning requires research, and discussion, and compromise. It’s hard!

Hard things are hard.

It would be wise to spend more time practicing hardship. I have run ultras in the past with the idea that it would help me practice hardship. It certainly helped me see that through hard and consistent practice I could do Really, it just proved that I was am stubborn enough to bull rush my way to grind through a 10 hour race. A single minded goal Making it to the finish line isn’t hard complicated. You just keep going until you get there. If it hurts you keep going. If you are hungry you keep going. There are many questions in an ultra and only ever one answer.

This is not the case with writing code.

There are many answers. With varying degrees of correctness. These degrees can change based on the context within which you ask the question. You can be right and still be wrong and vice versa. There is great philosophical debate in this work.

There are known processes that can lead to a solution. Methods of organizing what you know. Ways to map the a solution. I left the more traditional visual arts of design and illustration for engineering and math in the hopes of finding a more absolutist approach to answers. If the code works you are right! Of course I was mistaken wrong. The more you know the more you know you do not know.

In every discipline of thought I find you cannot rely on your own great ideas or "genius". There is only process and adherence to it. There are many answers and process will illuminate them all. The trick becomes understanding which process to implement and which illuminated answer to accept.

A well prepared explorer lives to see another day. Whereas an impromptu dungeon delve often leads to death.

Preparation is key.Really I should just prepare better more thoroughly. It’s easy to get lost without a map. It’s foolish to go alone.

It’s a lot easier to explain what you did, right or wrong, when you knew where you going the whole time. had a plan the whole time.

I have a point, I swear...

It’s a lot easier to explain where things went wrong when you can com

I’m going to finish diagramming scribe. Or maybe just play Skyrim. Or watch TV. Or just go to bed. Sleep is important too. Plans are good. They avoid It help to avoid these rambling tirades…

The problem with impatience is code that works isn’t good enough. It should be maintainable. Transferrable. Readable.

Remember: Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.