I was looking through the course guides at the University of Texas and Austin Community College this weekend and I was amazed I didn't find a single class on IntelliSense in either college's Computer Science or Business Information Systems degree programs. What the heck? I am sure Microsoft must have education specialists that work with colleges to help teach students the important details of using IntelliSense in their development activities. We as Microsoft supporters must see to it that colleges around the country and world adopt classes immediately.
Did that first paragraph sound absurd to you? It sure did to me. Yet time and time again all we hear from developer after developer that we need more IntelliSense, we need more tooling. As the great Christoper Walken once said: “What we really need is more cowbell.”
What we don't need is more tooling. What we need are more knowledgeable and productive developers. We need better APIs. We need simpler APIs. We need to focus less on the tools and focus more on the concepts. As the saying goes, “It's not the tools, but the craftsman.”
Here's what I know. I can go to the hardware store and buy the biggest and best set of tools for building a cabinet in my office. The chances of that cabinet being well-constructed are, well, kinda slim. I have never built a cabinet before and I will probably make a lot of mistakes. What I lack is knowledge of the craft of building cabinets. Great tools can only help so much. The only way that I can make a truly great cabinet is to practice cabinet building. The only way to do this is to do it, then do it again, and do it yet again. I bet my third or fourth cabinet would be much better than my first cabinet. One would hope that I get better at making cabinets. There is a chance I just plain suck at building cabinets, but this is my editorial and I say I would get better.
As a developer you need to constantly update and practice your skills. You need to rinse, lather and repeat. And in a lot of ways, focusing on tooling limits your ability to focus on simply improving your craft. Let's talk about some ways to improve your skills:
You Can Type
I hope that as a software developer, you can type without looking at the keyboard. I never took a formal typing class, but after 20 years of writing code, I now know how to type pretty well. If you cannot touch type, a keyboarding class would definitely help you become a better developer.
You Can Remember
The human brain is a marvelous thing and we are all capable of memorizing a vast number of unique things. As a developer, some of your mental storage should focus on memorizing keyboard shortcuts. Dependence on using my mouse is one of the most difficult things I have had to unlearn. Using shortcuts on the keyboard has been a liberating experience. Some tools are just better suited to using the keyboard rather than the mouse. You can realize the promise of tools like ReSharper and CodeRush once you liberate your mind from using a mouse. You may have noticed that I did introduce a tool to our conversation. I am not promoting the removal of all effective tools. At one point or another, hammers replaced rocks. It still takes skilled craftsmen to properly use a hammer.
The Old 80/20
I played Dungeons and Dragons for many years. If you are not familiar with the game, Dungeons and Dragons is simply a basic adventure game where players take on different roles (knights, wizards and clerics). The rules of the game are contained in a set of core books, accompanied by an extensive set of supplemental rulebooks. The real beauty of the game is that you are never required to get outside of the basic rulebooks to enjoy the game. The game follows the 80/20 principle: you only need to learn 20% of the available rules to achieve satisfaction from the game.
This rule applies to software development as well. It is not uncommon to be a successful developer by mastering just the core principles of a language or framework. I have been doing a lot of Ruby on Rails development of late, and I find that by mastering the core “rules” of that framework, I have achieved a decent level of success. It is difficult to master all of the rules, but I know with the principles in mind that the other rules should make sense when I need them.
Practice, Practice, Practice
Mastering anything in life requires practice. In elementary school you spent time practicing your times tables. That practice has suited you well in your later years; you just had to do it. And like times tables, becoming skilled at developing software takes practice.
Today there are a number of practices you can adopt to improve your skills as a developer. One practice is known as a kata. A kata is essentially practicing the same moves over and over again, moving towards mastery. Think wax on/wax off from the movie, Karate Kid. There are a number of different software katas. There are prime number katas and bowling game katas. Heck, there is an entire site dedicated to katas. Check out www.codingkata.org for a list.
Software Is a Team Sport
Each developer masters software in a different way and it's via these differences that growth can be achieved. There are different ways to work on mastery. One is the mentor / apprentice technique. In all cases, teachers and students learn from each other.
Another more disciplined way to master team software development is known as a code retreat. Code retreats were created in 2009 by a group of developers to practice core principles of software development. The basic concept of a code retreat is the development of code to run a game called “The Game of Life.” The game of life is a simple algorithm where “cells” are places on a grid and a set of rules dictate whether a cell lives or dies. Code retreats concentrate on building different versions of code to run a game. For more information on code retreats, check out www.coderetreat.com.
Mastery Is Never Complete
I am done with this editorial but I am not done mastering the craft of building software. I will never fully master software development and I find this invigorating. I love being in a field that has the opportunity for growth that is boundless. It's time for you to remove the boundaries of your tools and refocus on basic skills. Go forth and code, fellow Padawans!