samedi 3 janvier 2015

Tools should help our creativity

Some days ago, I was watching a video about a designer / illustrator called Aaron Draplin. In the video, he presents his creative process starting with sketching before turning on Illutstrator to explore as many combination of his initial idea as possible. His goal in this video his to design a company logo for all support or media you might imagine, like a web site, TShirts or visit cards in 30 minutes.

The way he uses Illustrator in this video really amazed me. He literally does a graphical brainstorming, testing all idea without censoring himself. All these attempts seem legit as they help him to get closer to the result he wants. To do so, we can feel that he masters all his tools so that they do not impede his creativity. On the contrary, they are actually serving it.

I think this it's something we have to endlessly look for as software programmers. Our tools, that are personal computers, servers, editor or IDE and software management software, should be as efficient as Illustrator the way Aaron uses it. We have to put care on choosing and mastering or tools so that they do not block us. That is not easy: at the beginning, I did not know Vim editor for example. And when I discovered it and began to learn how to use it, I was far for being as productive as I wanted with it. But I learnt and I trained myself so that today, I cannot live with it! When I use an IDE that I do not know, the first thing I do is trying to memorize its keyboard shortcuts. When I started with Visual Studio, I kept beside me a Firefox open on shortcutworld.org.

Moreover, I think it's good to be able to explore different ways to get our tasks done. It's good to be able to test different implementation or even software architecture without breaking the features we're committed to deliver. We can be happy, because we can have all the tools (almost) for free to do so. We have TDD practice and unit testing frameworks to help us to flex our architecture and be confident that we do not break anything along the way. We have git (and others DVCS) that allows us to vary implementation safely in different branch without having an impact on our teammate. We have dynamic languages that allows us to test our ideas faster their compiled cousins.

So there we are. Admit that software programming is a creative act, and thus consider that you will exercise your ideas several times before finding the right implementation. To have this freedom, we need to focus on our tools. To choose the more appropriates ones in our context and to master them so that they won't impede our creativity, so that they won't break our flow.

I wish that someday, my writing process as a programmer will be as versatile as Aaron's creative process.