I am a software developer. I've selected an interesting profession that is quite unlike any other that I know of. One aspect of my profession that I am really fond of is the constant stream of new and cool "stuff." At the same time, one of the greatest challenges is the constant stream of new and complicated "stuff." But I do not mind that. Quite the contrary: Being forced to constantly learn and investigate upcoming technologies, because it is "part of the job," gives me a great excuse to do what I really like to do. At the end of the day, there isn't much of a difference between my work and my hobby, even after many years in this profession. In fact, I think I am getting more and more fascinated by the even greater possibilities promised by some of the new technologies that are on the horizon.
As a presenter and author, people often ask me how I can make enough time to keep up with new technology. In a way that is an interesting question, because even though a lot of people know me as a presenter, author, and publisher of CoDe Magazine, I really spend the vast majority of my time writing source code. In other words, my main job is not preparing for the next article or presentation. Instead, I need to get my projects out the door when the deadline looms, just like most of the CoDe Magazine readers out there (although my role as the Chief Software Architect of EPS Software Corp. may put me a bit closer to the bleeding edge than the average developer).
Despite the pressures of a milestone-driven developer's life, I would like to turn the table a bit and ask all of you a question. "How can a software developer not make time to keep up with technology?" It seems to me that this task is very much at the core of our profession. It seems to me that a developer who claims to be too busy to learn new technologies and techniques is like a gardener who claims to be too busy to water the flowers. It's a bit like saying, "I am too busy to work."
Of course, it helps if you have a passion for the work you are doing. Making yourself read and learn on an ongoing basis is difficult if you do not enjoy it. Personally, I can not imagine not having a software developer magazine or book about software techniques on my nightstand. As the publisher of CoDe Magazine, you may expect me to tell you that all of your learning needs will be covered if you read our magazine, but that is not the case. Personally, I read several of our so-called "competitor's magazines" cover to cover each month, and there are many that are well worth the time. Certainly I think that CoDe Magazine should be one of your favorite resources, but that doesn't make other magazines, books, and Web sites any less valuable.
Of course, the big question is what resources should you spend your time and money on? The obvious answer would be to pick a few of the .NET magazines and .NET books, and while I agree that those should be part of the mix, I am also a big advocate of extending one's horizon. Reading about .NET will teach you how to use new .NET technologies and it will even teach you new techniques, but it will happen in a very evolutionary way. Reading about .NET will teach you the foundation you must have to be a .NET developer, and it will help you to maintain a level of knowledge that is required to keep your job. However, if you want to outperform the guy in the next cubicle, and if you want to be next in line for that raise or promotion, then I believe you may have to go a bit further.
Personally, I spend most of my time developing in C# and VB .NET. However, I still read about C++ and Java development on a regular basis. I believe reading about these other languages gives me a much more solid understanding of software engineering, and that benefits me as a C# and VB .NET developer. I also like to read about Linux. Sure, I am a Windows developer, but that does not mean that people who have chosen Linux do not know how to develop software. Reading about ideas from the Linux-world allows me to bring techniques to my company's development process that would never occur to me if I only read about .NET. And clearly, some of this cross-pollination has also worked great for other developers who brought things like NUnit testing to the .NET world based on existing Linux ideas. Reading about Oracle development not only ensures that our enterprise software integrates well with Oracle, but it also helps me to build a better and more generic data access layer for SQL Server implementations.
And the learning doesn't stop there. As I am writing this column, I am at the Game Developers Conference 2004 in San Jose. I have a number of reasons to be here (one of which is CoDe Magazine), even though I am not a game developer. For one, I find that absorbing the ideas of 10,000 game developers can not hurt my efforts in the field I work in. Sure, it might not be worth attending this conference just because there might be a few valuable tidbits, but I have to say that some of the techniques I learned from game studios in the past have enabled me to build much better runtime and post-deployment debug tools for our enterprise applications.
Just yesterday I sat in an excellent presentation about "global illumination," which deals with the problem of calculating light and shadow in a three-dimensional virtual world. What is interesting about global illumination is that it is a problem that you can not solve through computation. The sheer number of light rays bouncing around even in a small room is so mind-boggling that even all the world's super computers combined could not calculate all the light influences of a simple scene. Yet, there are programs that can calculate light and shadows in single-image renderings, and even in real-time animated environments. How do they do it? Well, one could argue that they are cheating like crazy, but the bottom line is that by applying creative and not necessarily obvious techniques, the end result of a rendered image or frame can be so close to the "real" result that even the close-looking observer can hardly tell the difference.
Why do I care about this? Well, the presentation was very entertaining and informative from a computer graphics standpoint, but more importantly it also deals with a problem that is rather familiar: Handling vast amounts of data and algorithms applied to that data. Walking out of that presentation, I had gained fond memories of beautifully rendered images, but more importantly (at least from my point of view), I also gained some new ideas about data mining and analysis. If only one of those ideas ends up being applicable to the applications I build, then the trip to San Jose was well worth it.
I encourage you to read and research as much about .NET as you can, but I also encourage you to keep an open mind and actively educate yourself about other technologies. It certainly has worked very well for me, and I also believe that this attitude will help us to make CoDe Magazine one of the best resources available for .NET developers. Whether we are successful in that, I will let you be the judge...
Markus Egger