For a few years I was both a Java and a .NET expert – I was even got certified in Java and got something like 98% on my test. I made most of my consulting money off Java and its complexities – especially around the early versions of EJB and any IBM software; unfortunately I’ve had to let the Java expertise slide a fair bit to get really good with .NET. Learning LINQ, WPF, and all the amazing new stuff in .NET 4 including the BCL improvements, language improvements, dynamic programming, and Parallel programming with .NET 4, takes a lot of time, and with a social life that I don’t want to die completely, and three wonderful children and my beautiful/wonderful wife something had to give.
Back around 2005’s I decided to start really focusing on .NET because Microsoft really seems to care about making developers as productive as possible – every new release makes programming even easier and faster. This makes sense, because they care deeply about having developers build great products that run on their platforms.
While Java lets me run “anywhere”, the Java platform folks just don’t seem to care about my productivity anywhere near as much as the folks over at Microsoft. (Nor does Java have anything near as cool as WPF for building amazing applications.) It will be interesting to see how Java evolves now that Oracle owns Java (what the hell was IBM thinking?!) and James Gosling has left the company. Interestingly, Microsoft often lags behind Java in adding new features, and it seems to me that the Microsoft folks learn a lot from Java’s exploration of new ideas. However Microsoft also adds lots of new stuff such as LINQ, WPF, and now the DLR.
I’ve also glanced at Ruby and Python a few times and lots of people seem to love them and I’m sure they’ are very cool languages, but I just don’t have time to become very proficient, and they don’t seem like enterprise/commercial software languages (certainly I have never seen a consulting job with Python). An amazing graphics designer I know tells me that ActiveState’s Komodo is an amazing IDE, but I just don’t have the time anymore to pick up a new IDE, new language and a new platform.
So when a friend was telling me today that he’s trying to learn all these different technologies it gave me pause for thought. For me personally, I’m not happy being a jack-of-all-trades; I want to be a master of at least platform, because that means I build applications quickly and elegantly that help solve a business or personal problem. And being a master in just one platform still requires being a master of OOAD, design patterns, unit testing, debugging techniques and general problem solving, deployment techniques, database design, etc. And off course these additional skills are usually easily transferable or “leveragable” if a paradigm shift to a different platform is required or desired.
So I responded to my friend that the language he chooses to become really proficient in largely depends on his goals. It seems to me that if you want to build a cool new open source technology that you tinker with in your spare time then Ruby or Python using Komodo are your best choice. If you want to be a web developer then be a great web developer and master Photoshop while you’re at it. If you want to build serious commercial applications then learn .NET. (My friend is proud-to-be-cheap, so I directed him here: http://www.microsoft.com/Express/.) And if you want to build applications that can even run on your toaster, learn Java, but be prepared to write a lot of code.
This was referenced by the morning Code Project e-mail: http://iamgabeaudick.tumblr.com/post/576987756/which-language