I was having a discussion about great literature the other day, and something that was said struck me as very applicable to software development.
“How did he build an entire world out of what was in his head?”
We were talking about Tolkien, and were both impressed with the breadth of material he created. Sure, he wrote the Hobbit and the Lord of the Rings. But supporting that was the creation of a couple of languages, most notably Elvish, and books of foundation legends.
The same could be said of music and art. How does someone take what they see in their mind, and bring it forth into the world for others to enjoy?
I like to consider myself a writer, and since I have a book published at Amazon, and have even received a small check from its sale, I guess that makes me a published writer. I am also a software developer, and have created applications for personal use, sale, and at the direction of clients. You may think that on the surface, the two have nothing in common. However, I have found that they are very closely related.
Both a great story and a great application begin with an idea. The idea phase is exhilarating and freeing. There are no boundaries, no road blocks and no constraints. Your imagination runs wild over what you could make and what you could do with it.
Once the idea is decided upon, a story and an application take planning. There are some writers, and some coders, that can hop right into the details. I’ve read a book on Stephen King’s writing process, and he’s fortunate enough to be able to watch the story unfold as he writes. For me, I write like I code. I plan it out.
That’s the first step in implementation. Then I start coding the large portions of the application or outlining the different plot devices and characters. It’s in this phase that I see the full scope of what I envisioned, and start to give myself constraints such as time, cost, or word count. Working with constraints inspires more creativity. How can I finish this in a weekend? How can I keep it under 100,000 words? The constraint drives good design.
When writing, the difficult detail for me is creating believable dialogue. I can write fight scenes all day, but crafting discussion between characters is not easy. In code, it’s often all of the small items, like the UI for the user signup screen, the retrieve password code, or making sure all the possible iterations of interaction are covered and tested. It’s where the project is no longer fun every day, and the only way through is to roll up your sleeves and to keep moving forward.
Once my website is live, my application is released, or my story is in front of readers, the feeling is the same. Relief that it is done, pride that my idea came to life, and concern that others will treat it with the same love and care that I did while building it.
Writing great code is an art, and one that is beginning to receive the recognition it deserves alongside literature, music, and art.