Entering the software engineering field with a Java background and now working for a .Net consulting company, I understand both sides of this story.
On the Java side software engineers pride themselves on knowledge of software process, computer science related theory, software patterns, software architecture, and having tools that allow them to build applications with all of this in mind.
Java tools are traditionally geared towards software engineers whereas Microsoft tools are traditionally geared towards software developers. There are a lot of software developers in the Java community but most of them struggle because the tools are not really geared towards them. The primary focus of the modern Java environments has been on integrated Unit Testing, Refactoring, Build Processing, Pattern development, and Collaborative processes.
Since the focus is not on providing easy to use and quick form generators (composition editors), and data access mechanisms… many software developers struggle in the Java world.
So then you come to the .Net side of the community, where the focus has been on providing developers with easy to use tools that will quickly get the job done. In a traditional Microsoft tutorial you will find dragging and dropping of controls, datasources, and event handling routines done through a point and click interface. Microsoft is attracting the larger demographic which happens to be software developers, and even the occasional business professional who desires to wade their feet in development pool for a little while.
Coming from the Java end of the spectrum, I have a very hard time liking Visual Studio because IMHO it lacks out of the box integrated software engineering capabilities. Where I come from my IDE automatically indicates to me whether a class is Abstract, Concrete, or an Interface (no matter what name I give it). It also allows me to quickly view inheritance hierarchies, and find implementation classes. It also has integrated refactoring so when I rename a class, rename a namespace, or move classes around my IDE will fix all of my references for me. I am also used to built-in Unit Testing, and build automation. When people tell me that MS Visual Studio is the best IDE on the market I immediately think to myself that this person has never tried some of the Java tools out there and if they have… they probably do not use software engineering practices and techniques very often. Which really doesn’t play a big role in very small projects, but for larger ones… forget about it… without these tools I find it very difficult to be productive.
So that brings to me address the following quote:
“What I find amusing is that someone would actually try to invert this argument, proposing that bad tools are good because they force you to produce better code. And if they don’t, well-- that’s because you aren’t smart enough to use them correctly, stupid!”
Okay, first of all, you are totally incorrect when you say that the Java kids are proposing bad tools are good. If you honestly believe that Eclipse, and other Java IDEs are bad we need start another blog. Almost every new idea that is currently going into Visual Studio 2005 (or is it 2006… Who knows) comes from the open source community popularized primarily by the Java community. The Java community has great tools, which are very powerful for large team based projects, and because a lot of software developers have yet to realize the power behind these tools, does not make them bad.
Finally you can write good code in a very productive manner in both environments. It’s more about being a professional software engineer/developer than about using any one particular platform or tool. In general however Microsoft lags far behind IBM, and the Java community in terms of providing high quality software engineering tools, not to mention that Microsoft has a long history of destroying many software community processes. Since I am on the soapbox I will through in one last tidbit relating this… Why can’t Microsoft simply adopt the open source community already and integrate rather than rewrite and make these great tools obsolete? Talk about frustrating, I am just wait for my company to adopt Team Services and try to convince me that all of my wonderful unit tests which work great with NUnit right now must be ported over to some MS hack which essentially does the exact same thing as NUnit… adopt NUnit and propose changes as needed already! Okay I’m off.
Anyways, I think this a great topic.
For all of you Microsoft guys out there, here is a article that articulates the field of software engineering from Steve McConnell.
http://www.stevemcconnell.com/SeNotCs.pdf