So yeah, this has been interesting. I use Ubuntu to satisfy just about every computing need I have (even running Warcraft from time to time, though I most frequently use my one Windows XP install for that), so re-learning my way around Windows has been frustrating because I keep finding problems that I'd thought were solved on all the commercial proprietary operating systems (you know, the ones you actually have to pay for).
I won't get into those details here, though, because the environment works well enough. What's been really interesting is Visual Studio. I mostly use Emacs for Python and Latex development these days and Eclipse for Java and C/C++. I had always thought that Visual Studio would have at least all of the Eclipse features and would have developed higher order models for code bases (that is, a codebase is as a set classes rather than stuff that's in a bunch of files. What's been most shocking is that VisStudio doesn't seem to have an incremental compiler, at least by default. Of course it does all the underlining and has all the completion features that one expects with a statically typed language. It even covers all sorts of metadata, which is allowed in C#. Bonus: VS knows Emacs keybindings and implements them more faithfully than Eclipse.
Here's my litany of missing features in VS: too few refactorings; the Options dialog isn't resizable, the text editor isn't configurable enough (there's no highlight current line); there's no treeview of the code (certainly not by default, and was not an option in the menus that I could see); C# and ASP.NET both seem to require a bunch of extra config files that I don't understand (Service.asmx? Assembly.cs?); when opening a file from the filesystem VS puts it in the leftmost tab; I prefer source jars to XML files containing javadoc, thankyouverymuch; STAThread... is this platform specific crap really necessary in a modern language?; where's the hypertext view of code? let's have ctrl-clickability to jump to implementations; there needs to be an easy way to switch between tabs; emacs keybindings are great in a large number of ways but fail to delete the current selection (which emacs21 does, though maybe past versions didn't); Ctrl-I doesn't indent the current line; for a native (non-Java) app I expect _better_ performance than with eclipse, not worse (this may be due to Windows' virtual memory management which seems to always swap out the wrong thing; there's no excuse for an app written in a modern language to flicker (tree view widgets seem to have this problem with tooltips) -- double buffer people!; let's have incremental search everywhere, popups suck; it's too hard to get the list of keybindings to see what things are set to; ... OK, this could go on forever. I'll have to stop here. I'd really rather be concerned with writing about the good stuff. OK, one more complaint: Alt-/ really ought to import stuff. I just spent half an hour trying to figure out how to import a .NET DLL and use its components.
The coolest thing (and the thing that prompted me to start this post) has been the ASP.NET development setup. I think the Webtools project for Eclipse has some of the features, but the most impressive thing to me in VisStudio is that when you click "Debug/Run", it launches a web server and creates a notification area icon for it. All you have to do is click the icon and a web browser pops up that browses your new web module. Very cool.
C# makes it really easy to implement web services. Just create an ASP.NET project, extend System.Web.Services.WebService, tag your class with a WebService namespace, and tag each service method with [WebMethod]. Of course, it's even easier to do these things with python and SOAPpy, but that's another story. ASP.NET's Web.Config looks a lot more friendly than Servlet's web.xml (though ASP.NET has just one implementation provider).
The Emacs keybindings are really great (except where they completely suck). Ctrl-X 1 and Ctrl-X 2 work nicely and it's easy to split a text editor vertically, even with a single mouse click. Ctrl-X o should probably switch between tabs, though. The command console is nice. I guess this is like EclipseMonkey. In any event, Meta-X does the right thing and drops you in there.
ASP.NET provides a nice web frontend to SOAP services. It spits out the XML you'll need to make a SOAP call (both 1.1 and 1.2) as well as handles simple REST-style HTTP POSTs.
GNOME way back in the day (1.4ish or was it just Ximian GNOME) had an IRC client built in so you could really easily get in touch with the community. They took it out eventually, but I liked the concept. Eventually we might see some gaim integration with the GNOME help menu... Anyway, Visual Studio has a community menu entry that pops you out to a web page where you can post and read questions and answers. Good stuff. The best software has good communities and modern software should work to connect the two. I'll probably never use it, but I like that it's there.
The API docs for .NET improve on the Javadoc concept a lot. Java documentation is decent for looking up a things that your IDE should already know, but they suck for investigating how to use a package, such as java.io. The .NET docs have taken a task-oriented approach to documentation. For many classes, such as System.IO.FileStream, when you browse to the help page, you'll find a number of tasks such as "reading text from a file" or "reading and writing a binary file" or "copying a file," all of which link to snippets of source code that show the sequence of API calls necessary to complete these tasks. This is huge and beats the tutorial approach taken by Javasoft hands down.
OK, that's it for now... I may post again later if I find something else interesting or overly annoying.
Update: I also really dig the start view in Visual Studio 2005. It shows a web page displaying a bunch of news about the .NET platform, MSDN and Visual Studio.
I won't get into those details here, though, because the environment works well enough. What's been really interesting is Visual Studio. I mostly use Emacs for Python and Latex development these days and Eclipse for Java and C/C++. I had always thought that Visual Studio would have at least all of the Eclipse features and would have developed higher order models for code bases (that is, a codebase is as a set classes rather than stuff that's in a bunch of files. What's been most shocking is that VisStudio doesn't seem to have an incremental compiler, at least by default. Of course it does all the underlining and has all the completion features that one expects with a statically typed language. It even covers all sorts of metadata, which is allowed in C#. Bonus: VS knows Emacs keybindings and implements them more faithfully than Eclipse.
Here's my litany of missing features in VS: too few refactorings; the Options dialog isn't resizable, the text editor isn't configurable enough (there's no highlight current line); there's no treeview of the code (certainly not by default, and was not an option in the menus that I could see); C# and ASP.NET both seem to require a bunch of extra config files that I don't understand (Service.asmx? Assembly.cs?); when opening a file from the filesystem VS puts it in the leftmost tab; I prefer source jars to XML files containing javadoc, thankyouverymuch; STAThread... is this platform specific crap really necessary in a modern language?; where's the hypertext view of code? let's have ctrl-clickability to jump to implementations; there needs to be an easy way to switch between tabs; emacs keybindings are great in a large number of ways but fail to delete the current selection (which emacs21 does, though maybe past versions didn't); Ctrl-I doesn't indent the current line; for a native (non-Java) app I expect _better_ performance than with eclipse, not worse (this may be due to Windows' virtual memory management which seems to always swap out the wrong thing; there's no excuse for an app written in a modern language to flicker (tree view widgets seem to have this problem with tooltips) -- double buffer people!; let's have incremental search everywhere, popups suck; it's too hard to get the list of keybindings to see what things are set to; ... OK, this could go on forever. I'll have to stop here. I'd really rather be concerned with writing about the good stuff. OK, one more complaint: Alt-/ really ought to import stuff. I just spent half an hour trying to figure out how to import a .NET DLL and use its components.
The coolest thing (and the thing that prompted me to start this post) has been the ASP.NET development setup. I think the Webtools project for Eclipse has some of the features, but the most impressive thing to me in VisStudio is that when you click "Debug/Run", it launches a web server and creates a notification area icon for it. All you have to do is click the icon and a web browser pops up that browses your new web module. Very cool.
C# makes it really easy to implement web services. Just create an ASP.NET project, extend System.Web.Services.WebService, tag your class with a WebService namespace, and tag each service method with [WebMethod]. Of course, it's even easier to do these things with python and SOAPpy, but that's another story. ASP.NET's Web.Config looks a lot more friendly than Servlet's web.xml (though ASP.NET has just one implementation provider).
The Emacs keybindings are really great (except where they completely suck). Ctrl-X 1 and Ctrl-X 2 work nicely and it's easy to split a text editor vertically, even with a single mouse click. Ctrl-X o should probably switch between tabs, though. The command console is nice. I guess this is like EclipseMonkey. In any event, Meta-X does the right thing and drops you in there.
ASP.NET provides a nice web frontend to SOAP services. It spits out the XML you'll need to make a SOAP call (both 1.1 and 1.2) as well as handles simple REST-style HTTP POSTs.
GNOME way back in the day (1.4ish or was it just Ximian GNOME) had an IRC client built in so you could really easily get in touch with the community. They took it out eventually, but I liked the concept. Eventually we might see some gaim integration with the GNOME help menu... Anyway, Visual Studio has a community menu entry that pops you out to a web page where you can post and read questions and answers. Good stuff. The best software has good communities and modern software should work to connect the two. I'll probably never use it, but I like that it's there.
The API docs for .NET improve on the Javadoc concept a lot. Java documentation is decent for looking up a things that your IDE should already know, but they suck for investigating how to use a package, such as java.io. The .NET docs have taken a task-oriented approach to documentation. For many classes, such as System.IO.FileStream, when you browse to the help page, you'll find a number of tasks such as "reading text from a file" or "reading and writing a binary file" or "copying a file," all of which link to snippets of source code that show the sequence of API calls necessary to complete these tasks. This is huge and beats the tutorial approach taken by Javasoft hands down.
OK, that's it for now... I may post again later if I find something else interesting or overly annoying.
Update: I also really dig the start view in Visual Studio 2005. It shows a web page displaying a bunch of news about the .NET platform, MSDN and Visual Studio.