A good tool is one that makes you feel like when you use it, it’s an extension of your body. When I got into cycling, I was told that a good bike is one that makes you feel like it’s fused to your body. When you’re riding, you’re so deeply connected with the activity and the object that they seem to become one. You feel like your bicycle is just another body part that you are capable of manipulating with the slightest effort of your mind.
When we write software that’s targeted at humans, we should pick tools that are an extension of our minds. This is one of the reasons why I love Ruby so much. The creator of Ruby Yukihiro Matsumoto has an excellent quote on this topic:
“Often people, especially computer engineers, focus on the machines. They think, “By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something.” They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.”
Well said Matz.
When you’re using tools that allow ideas to flow more quickly, easily, and with more joy - you’re going to build cooler stuff. This is not an argument for Ruby - that’s just one of my preferences. Everyone has tools that they find mesh with their mind better than others. For some of us, this means writing low-level operating system code in C using nothing but emacs and a terminal. Other developers may prefer to have a full-blown IDE that can handle all of their development task paths. Whatever river you choose to swim in, just make sure you’re swimming with the current.
Allow the ideas to pour out of you. Use tools that enable you to capture these ideas quickly, test them thoroughly, and publish them to the world with ease. Let your mind and fingertips dance as together as you breath your creation into existence. This is where you will continue to find joy in the craft of software.