We work in an industry where learning and innovation are key to success. That leads us to ask what we can do to learn faster and to come up with creative uses of the latest technology. How do we foster ideas that will turn into innovative software? To answer this question, we must understand that innovative ideas rarely come in a flash of genius. They generally come as the next logical step in a series of good ideas.
In his brilliant book How We Got To Now, Steven Johnson examines how the most important innovations of the last century came to be. It is fascinating and instructive to look at how things like refrigeration and the light bulb came to be. Johnson's biggest contribution is exploring how these ideas materialized. He says: "Ideas are fundamentally networks of other ideas. We take the tools, concepts, and scientific understanding of our time and then remix them into something new. But if you don't have the right building blocks, you can't make the break through, however brilliant you might be." As Developers, how do we apply this to learning and innovation? If new ideas are evolutions of existing ideas, then the best way to be able to learn or create new concepts is to have a wide network of ideas in our own mind. We need to be able to assimilate ideas from outside of our normal echo chamber. As developers, there are two important ways we can do this. We can explore a broad range of technologies. And we can interact with other developers who are solving similar problems.
Learning From Other Programming Environments
It is important that developers have deep understanding of their tools set. They should be a master of their primary languages, frameworks, and editor/IDE. Developers should also be learning tools outside of their core tool set. In their fantastic book The Pragmatic Programmer, Hunt and Thomas suggest that programmers learn one new programming language every year. One of the main reasons for this suggestion is that learning other languages gives you better perspective on the languages you already know. Exploring languages and tools outside of your core tool set cross-pollinates ideas. This cross-pollination leads to new and better ideas. One of the reasons that the Elixir language has been so successful is that its author, Jose Valim, had a deep knowledge of Ruby and Erlang. He took the best ideas from these seemingly disparate ecosystems and created a new and powerful platform that was the best of both worlds.
There are other examples as well. Many of the best ideas from ASP.Net MVC came from other MVC frameworks. This was possible because the authors of ASP.Net MVC were familiar with other MVC frameworks. But it also highlights a benefit for all developers. If a .Net developer had taken time to learn Ruby on Rails, he would have been able to make the transition from ASP.Net Web Forms to ASP.Net MVC more easily. This isn't only true of MVC. Generally speaking, all of the best new features in languages and frameworks are simple evolutions of concepts in other languages or frameworks. This helps to explain why there are so few genuinely new language features.
This illustrates that the network of ideas doesn't just allow us to come up with new ideas, it allows us to understand ideas as they move from other platforms into our core platform. Another example would have been a C# developer who had spent time learning a functional language. When Linq was introduced, it would have been easy to assimilate it into his daily work. We see this continue to happen in the Microsoft space with the next version of ASP.Net. It will incorporate ideas from other platforms as well. Developers who are familiar with those platforms will be able to learn these new features of ASP.Net faster.
Learning From Other Programmers
Another important way to foster ideas is to interact with other developers. Our interactions cross-pollinate our ideas with theirs. In the book The Innovators, Walter Issacson clearly illustrates how throughout the digital age, most of the best ideas have come from teams of people working together. Individuals who made major innovations almost always interacted with other thought leaders. They learned from others. They built on the work of others. And were pushed by others to take their ideas further.
Modern developers also benefit from working in community. Working on a skilled team is one of the best ways to improve your development skills. Additionally, attending user group meetings exposes us to what other developers are doing, and what tools and techniques they are using to accomplish their work. Social media also affords us the chance to glean ideas from developers all over the world. One of the reasons that I love attending conferences is they are a great place to cultivate ideas. I can go and learn from the speakers in well thought out presentations. But what can be just as important are the serendipitous conversations that happen in the halls or during meals.
By learning from other programming environments and by learning from other programmers, we can build a board network of ideas. This allows us to quickly learn new technologies. Most importantly, it enables us to come up with innovative ideas of our own.