As some people know, I am not a Microsoft fanboy. I am a Java developer mostly, with lots of database development. However, I have an open mind when it comes to tools to use in the workplace. My feeling is that you should use the best tool for the job. This means that you should not force Java down someone’s throat if it does not make sense to use it. So, my plan is to list some of the tools I think are best suited to certain situations.
On windows, there aren’t a lot of different situations to deal with. For a custom application like photo editing, or even a new word processor, you are probably looking at C# or Visual C++. The API integration is fairly clean, and using MS technology gets you as close as possible to the OS. Java is unpleasant here because the Swing and AWT toolkits are painful to use.
For MS Office integration (yes, it is a separate world there), you want to use Visual Basic. Yes, I said VB and it can be any flavor, meaning VB5 or VB.Net or whatever. VB is ridiculously simple to use and the office integration is fantastic. It is specifically good for generating lots of Excel spreadsheets or reports in batch.
OK, I know I am going to take a ton of heat from the web monkey crowd in this section. For server side development, I still think Java is the best tool. For the server side I am talking about custom port listeners or even (gasp!) servlets. You can keep the code clean, and generating a war file for tomcat is very simple.
Database Development and Integration
As a database developer (and former DBA), my opinions are different than most. For almost any application I have ever worked on, keep the “business logic” in the application code. Use only basic SQL to query the data. The reason I say this is that logic is easier to follow if it is in one place. If there is some group of complicated stored procedures during a complex java method, few people will be able to follow logic in multiple places. Also, it seems like there are only a handful of people who can do stored procedure development well. Since most people are writing applications that happen to store data, database development is just part of the job, not a black art like some aspects of coding.
Since I am an academic at heart, I am still fascinated by things like data mining, AI, scientific computing, etc. Java is making strides in data mining mostly due to the Weka (http://www.cs.waikato.ac.nz/ml/weka/) library. For “pure” artificial intelligence work LISP is still the best thing to use. There are lots of silly parentheses, but they are powerful. If the AI work is limited to the logic arena (and I mean really limited to it) you could use Prolog. Prolog is not very popular anymore, unless you are taking a programming languages or AI course in college. For generic text processing, Perl is king. If you are looking at a delimited file there are probably better tools (sed/awk) but for most text processing, Perl would be the best choice. In the biotech crowd, Java seems to be the most popular. There really aren’t many people with much experience in that industry so they use what they can get.
So, that is all I have for now. Eventually I may come up with more, but that requires more research. Domain specific languages seem to be of more interest lately, so that could change the landscape as well. Let me know if I have missed anything obvious.