Monday, October 25, 2004

Leaving the .NET World

Yes, I'm leaving my current employer. Leaving the state, actually, and returning to Lancaster, PA. Quite excited about it, for a variety of reasons, but for today's entry, I'll talk technical. I'm going to work for a small Linux shop, which excites me for reasons worthy of their own entry. But today, I'll talk about why I want to leave .NET and go back to Java.

For starters, let me state what I'll miss. C# is a good language. I give it the edge, as a language, over Java, although Java 1.5 appears to be doing some catch-up. But in switching to C# back in February, I felt (and still do) that C# is an improvement over Java, which I'm sure is what Microsoft had in mind. Kudos to Anders Hejlsberg. Nice job.

And the libraries. Just the ease with which you can do file access in the .NET libs is a win over the cruft of Java. In Java, I either have to go copy-and-paste the code to open a file, or spend several minutes wading through the Javadocs to figure out (again) how. In C#, the Intellisense has been enough to guide me through it a couple of times now. Painless. Another nice job.

Now let's talk IDEs. Until last year, I was a die-hard Emacsian, which isn't to say that I dislike vi, but rather to say that I disliked IDEs. I had used them, but greatly preferred my editor-of-choice. Enter Eclipse. I tried out one of the 2.x releases, and I was hooked. Do you remember the leap in productivity in switching from C++ to Java? I felt the same thing going from Java/Emacs to Java/Eclipse. A wondrous thing.

Then, in February, I took a giant leap backwards in coming over to DevStudio.

DS has Intellisense, Eclipse calls it something else, but Eclipse's stays out of the way. DS's is in your way, requiring extra keystrokes if it comes up when you weren't wanting it, and breaking your flow. Bad thing.

Both DS and Eclipse highlight syntax errors as you type them. But Eclipse catches 90% of all compiler errors, while DS catches maybe 30% of all errors, and only 15% of the places I tend to mess up typing in code. It's rare that DS tells me something I missed until I compile, while it's rare for Eclipse to tell me something in compile that I didn't see pre-compile.

Which brings up compiling. Eclipse recompiles when you save, and generally in sub-second time. DS requires an extra step to recompile, and by default requires you to type Ctrl-Shift-B. I remapped mine to a FN key, but I shouldn't have had to, and, in fact, I shouldn't have to do even that. And compile times for our project are close to a minute. I should admit here that I have some suspicion that we've set things up poorly, and our .NET project is larger than my old Java project, but even a simple test project takes several seconds.

And the output. I'm accustomed to the Unix-style, "if it works, say nothing" method of output. On success, Eclipse did nothing, and removed any error icons from the classes I was working on. On success in DS, I get 14 lines of text, the top half of which scrolls off the top of the output window. And on success (i.e. no errors), in DS, warnings don't show up. I suppose that I can probably tweak something to tell it that warnings are errors, but what about a simple line at the end that says "0 errors, 2 warnings" or somesuch?

And the lock-ups. In 14 months in Eclipse, I have no memory of any lock-ups of the IDE. In 8 months, DS has locked up 3 or 4 times, once requiring a machine bounce, the rest an IIS bounce. And once, I got a spray of colorful garbage similar to writing random numbers to video memory back in DOS days; I gingerly exited and rebooted, which seemed to be the Windows thing to do. Full disclosure: I use the debugger more under DS than I did in Eclipse, which may have contributed to some of these problems.

Other complaints:

I work between 5-7 projects. "Solutions", as DS calls them. Why does DS only show me 4 on the Start Page? And not the last 4 I've been in, either.

Why, when I open a solution, does DS grab the screen, and turn it white? Why does it do this when I've Alt-tabbed away and am working in another app, (stomping on the 2nd app's display)? And at times, even when I click on the window title, it doesn't show as having focus, even though it does. Quite poorly behaved; makes me feel like they're doing something non-standard, and I don't feel like I'm gaining anything by it.

Why do I sometimes have to have a file checked out of SourceSafe to be able to use incremental find on it? What on earth does it think it's changing?

When I go to add a file, it makes me check out the project, as it should be. But why, after checking out the project, does DS often forget that I told it to add a file, and make me add it a 2nd time?

When I get latest out of SourceSafe, it takes a few minutes to complete. Cool, with a project of this size, it would take that long out of CVS as well. But apart from starting typing, I have no way of knowing that it's finished. Or how far along it is. And it will regularly stop and ask questions in mid-extract, and won't continue until I've answered them. If it takes a few minutes, that's time for a bio-break, but if it stops 5 seconds into it, well, you get the picture. Annoying, and there's no reason it couldn't save up the questions until the end, or continue in the background.

Things DS is missing that Eclipse has: refactoring, import management, unit test support. There may be more, of course, and Eclipse is into 3.x releases, which I'm just getting back up to speed on, but that's just what I used and now miss.

Anyway, about the only thing I like better about DS itself is outline mode for code, which I understand Eclipse has in 3.x. The short of it is that I know that I'll be going back to an environment that supports me better. Very exciting.

No comments: