Life outside .NET, or “How to check out your neighbours”

The hillbilly be all Java’d up these days. For coming on three weeks, I’ve been the lone developer on a project based on Google Web Toolkit. It’s a web framework (naturally) that allows developers to build applications in Java and compiles it down to JavaScript, CSS, and HTML. Scoff all you want, if it were any other company behind it, I’d probably be right there with you.

We considered quite a few technologies before landing on this one. We went through Ruby, Sharp Architecture, Open Rasta, Moo Tools, and probably several others. I can defend ending up Google Web Toolkit privately if you want but putting the thought process up in a public forum is going to lead to comments that I’m too tired to moderate these days. And yes, I’ve heard of Script #, too.

Coming at this from a .NET developer’s standpoint has been interesting. It’s surprising how much we take for granted in our IDE, for example. I’m still meandering my way through the keyboard shortcuts in Eclipse (after a brief fling with IntelliJ IDEA). One thing I’d really like is a keyboard shortcut for the GWT Compile button, which currently is available only via a toolbar button or a context menu, as far as I can tell. Was happy to find a VIM plugin for it too that works as advertised.

Not sure if this applies to Java in general but within the confines of the Google Web Toolkit, the ecosystem is freakin’ phenomenal. The documentation page alone encourages unit testing and the use of an MVP architecture. Once you start reading about it, you can’t help but stumble on a number of other projects:

  • gwt-presenter: A passive view implementation for GWT
  • gwt-dispatch: A command pattern implementation for GWT
  • Guice: Google’s dependency injection framework
  • Gin: A dependency injection framework for the client part of GWT

The shocking thing from a .NET perspective is that these concepts are just sort of assumed. There’s little debate on whether dependency injection is necessary or whether passive view is overkill. Someone watched a presentation from Google IO last year, whipped up a command pattern project based on it, and lo! the people said it was good. Between support for Hibernate and the App Engine data store, I think people would look at you bug-eyed if you even suggested writing your own data access layer.

The downside to all this as that the tooling seems to be several steps behind what I’m used to in the Microsoft world. It’s still too early to make a fair comparison but even after digging a little deeper into Eclipse, I can’t imagine being quite as productive as I currently am in Visual Studio. Yes, there’s also IntelliJ but our anecdotal evidence suggests that neither Java IDE is seen as a de facto standard. For the moment, I’m sticking with Eclipse simply because all the documentation refers to it and the GWT and App Engine plug-ins for it work out of the box.

Couple of final shout-outs to two blogs that have been invaluable during the learning curve phase. First is Hive Development (currently featuring two posts on how to unit test MVP applications in GWT). Second is TurboManage, whose sample code is more detailed than many apps I’ve written.

Anyway, it’s been an interesting couple of weeks.

Kyle the Decaffeinated

This entry was posted in GWT, Java. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • http://kyle.baley.org Kyle Baley

    “Shunned” is probably too strong. “Not encouraged as vigorously as they could be” I think is more accurate.

    But if you’re going to learn a new language for the community, check Ruby. In Java, good principles are embraced. In Ruby, they’re baked into the language.

  • Wayne M

    Things like this make me want to switch to Java; good software engineering principles are embraced and beloved in Java-land, while in .NET they tend to be shunned and ignored in favor of “Mort” solutions that collapse as more and more features are added.  I’ve gotten so tired of being the only developer on a team, if not the only person in the entire company (up to and including the CTO) who understands *what* Dependency Injection is, let alone things like the SOLID principles, unit testing, ORMs, etc.

  • Mememe

    eclipse is light years ahead of visual studio.

  • http://codebetter.com/members/kylebaley/default.aspx Kyle Baley

    @Daniel: I forgot to make a similar point but you’re right. It’s easy to forget that for all one’s fluency in Visual Studio, it’s years of minor tweaks, little tips, and “I didn’t know you could do that” moments that get you up to that point. Having switched to IntelliJ, then back to Eclipse since last commenting, I’m wondering if the plethora of choices is actually a good thing.

  • Ari

    Nice to see professional developers willing to use the best tool for the job. A professional developer should be willing to choose the best language for the task at hand and the availability of IDE’s should be a secondary consideration.

    Our company mainly use .NET but we also use Python and Java for integrating with third party products using web services and CORBA.

    Many of the tools that .NET developers take for granted today started out on the Java platform. NUNIT is one example while NANT is another.

  • http://dcsobral.blogspot.com/ Daniel Sobral

    Funny thing. Last year I was looking into F#, so I got to use Visual Studio for a bit — and I hated it. I could not understand how anyone could ever be productive with it.

    Of course, I knew it was just a matter of ingrained habits. Netbeans, IntelliJ, Eclipse… they are all very good IDEs, with a good amount of plugins. But learning them takes a rather long time, and an even longer time if you have to unlearn former habits.

  • Terry

    Kyle, I want to thank you for this post. It’s really forced me to think about why I hate Java so much in comparison to .NET. I once thought it was just that Java itself was fundamentally deficient as a language. That was part of what irked me about Java but in the process of thinking about the language itself and all the ETL solutions I’ve been looking at written in JAVA what they all have in common is poor execution (Break down in code of the success you can expect based on ideas and execution [1]). Clumsy and incomplete tooling such as buggy GUI builders, ugly GUIs created by SWT, framework bloat, accidental complexity,etc. Just about every annoying thing about Java has numerous problems in the execution not the ideas. Microsoft has had superior execution in comparison to Sun over the years and really this is the biggest difference that has irked me when it comes to Java and it’s precisely why I have no interest in my “neighbours”.

    [1] idea = 100, SunExecution = .25,
    MSExecution = .75

    IsSuccess(idea,execution)
    [
    success = idea * execution;
    return success;
    ]

  • Chad Smith

    I’m pleased to see an increase in the number of ‘.net people’ who reply positively to these type of blog posts.

    I came to the comments to let you know I was interested in your Java/GWT experience and would love to hear how it progresses. I’m happy to see I wasn’t the only one.

    I work with MS technologies and generally enjoy it but I chose to look over the fence a while back and got engrossed in Python in my spare time. I ended up with a love/hate relationship with eclipse.

    I’d like to think that .NET developers actively keeping tabs on the competition, reminds MS they need to do the same and act on what they find to keep us :)

  • S

    “It’s still too early to make a fair comparison but even after digging a little deeper into Eclipse, I can’t imagine being quite as productive as I currently am in Visual Studio. ”

    Use Netbeans if you want something closer to the behavior of Visual Studio and that is also free.

  • NickM

    Thank you for writing this. As a .NET dev with experience in other platforms, it’s good to get a reminder that other platforms do, in fact exist (other than the iPhone anyway)

    I’m hoping to get into Android development soon. I wonder if it supports / acknowledges the Web Toolkit…

    Anyway…thanks.

  • Charl Victor

    Hi Kyle,

    Thanks for the post. I was also a .NET developer for a good couple of years, but have now completely switched to Java for the last 6 months or so.

    I must say, the journey has been interesting and scary and the same time. It is amazing how much you get use to what you are using. I have now used both NetBeans and Eclipse and I must say I am edging towards Eclipse. Coming from VS, Netbeans seems the easier one to learn, but it automates quite a lot from you so although it makes the switch easy, you do not learn all the basics.

    I must say, I am enjoying the open source world, sometimes there are too many options to choose from, but at least you have the option :)

    Keep well and good luck with your path forward into the Java world.

  • http://codebetter.com/members/kylebaley/default.aspx Kyle Baley

    Robert,

    UiBinder does show promise. But I’m having trouble figuring out how to effectively use MVP with it. The GWT documentation keeps scoffing at me by promising an article on it “in the future”.

  • Robert

    Hey Kyle,

    I am working on a project with GWT on the “client side” and the .Net stack on the server, and I am finding it really very nice.

    Once you get past a few initial hurdles, it works out very smoothly. One hurdle was the wire protocol. We created a generator in GWT to automatically create the serialization code to convert to Json, and we use json serializaton on the server side.

    If you plan ahead and implement the history stuff, and use UiBinder, it really is like creating rich client apps without all of the downsides.

    So… here is one developer who is not scoffing.

    Good luck and let us know how it turns out.

  • Tom

    For IDE, I personally prefer NetBeans to Eclipse – it felt most comfortable coming from the VS.NET world – but there is a LOT of anti-NetBeans sentiment at my current employer. Eclipse is *our* de facto standard.

    One thing I noticed that was very hard to get used to, and is likely the flipside of your “these things are just assumed” coin, is that the podcast/blogosphere does not seem nearly as vibrant and diverse and active as the .Net one. *Especially* podcasts, which I love to listen to while driving. There doesn’t seem to be a Java version of Hanselminutes or DotNetRocks or, really, much of anything.

    Another thing I had assumed, but now can verify, is that Java and C# are essentially the same thing. The Java APIs are analagous to the framework and Java itself is nearly identical to C#. It is a VERY easy transition.

    Tooling is the big difference to me. I miss Visual Studio. Eclipse still doesn’t feel “right”. I’ve tried all the big IDEs out there for Java and nothing quite eclipses(heh), or even equals, Visual Studio.

    I’m sure as I get more experience with it, Eclipse will feel more natural, but god help me if I have to build another native GUI. ;)

  • Rich Denis

    Kyle,

    Im with you. A career long .NET developer, I have been at a Java based software company now for a few months. I am also finding some of the tooling lacking but I liken it a lifelong mechanic changing from fixing Fords to Toyotas; The concepts are the same but there will be new tools discovered along the way to make the job easier.

    For now, I’m with the rest. intelliJ as a Re#er user is an easy transition. That said, I have had no troubles with Eclipse for the JAVA tasks that I have had to do. Basically, I’ll take what ever project format another dev will give me.

    GWT seems cool. We are using it for some of our stuff as well. Seems to slow things down on the build server but other than that, cool.

    Rich

  • Jason G

    As someone that did Java for several years before .NET, I agree with you on the difference in perspectives each community has on concepts like Dependency Injection. In .NET, we’re still arguing if it’s necessary while really the only argument in Java is Eclipse vs IntelliJ.

    My vote’s always been for IntelliJ.

  • http://codebetter.com/members/kylebaley/default.aspx Kyle Baley

    Yeah, IntelliJ is on my todo list of things to figure out. I’ve dabbled with it twice now and couldn’t get it working. But I’m feeling enough pain already to give it a real college try this time. Especially since it claims to support Eclipse projects natively.

  • Matt

    Kyle, as a fellow .NET’er that occasionally flirts on the other side, I find it hard to fathom that you chose the bloated, complex Eclipse over the comforting similarity that IntelliJ provides to us who use Resharper?

  • Simon

    Kyle.

    I enjoyed this post. I’m almost entirely a .Net developer, but it’s always interesting to see what other stacks are using.

    I subscribe to the Illegal Argument podcast which focuses on Java and Java VM technologies. I get something out of it, although I often have little idea what they are talking about. Interestingly enough, they always seem to be having issues with their tooling!

    Thanks for the write-up.

  • http://www.dimecasts.net Derik Whittaker

    @Dinish,

    What purpose did this article serve?
    A) As this is his blog he can post about anything he wishes, hell he can post about watching paint dry for all I care.
    B) His post will help to either inform .net devs what the ‘other side’ may look like. It may also be an open call for tooling suggestions as he clearly admits he needs.

    He did not explain his requirements? WTF, what requirements would you want him to say? That he wants an IDE that helps him be more productive? If you ask me that is an requirement that is not needed to be stated, it should simply be understood.

    Sounds to me like you may be a narrow minded .net drone that is afraid to look past the end of his own nose to see what else is out there….. Good luck with that.

  • http://codebetter.com/members/kylebaley/default.aspx Kyle Baley

    Sweet! I was hoping for something like this. A trumped-up comment designed to start a useless thread that completely overshadows the original discussion. Normally I’d let it slide but the baby kept me up all &*%$ night so I’m looking for a venting outlet. Dinesh, if you are actually following up, I’d recommend not bothering to respond to this little diatribe. In any case, it won’t be an actual response. It thought it would be more fun (for me, at least) to imagine the thought process that went into you commenting:

    “WTF? A post about Java? What a load of crap. I know it’s 2010 and no one leaves lengthy comments saying, ‘Don’t waste my time’ any more but man, this guy’s totally out of line. I’m a .NET developer! What the hell do I care about Java? I mean, everything else he writes about, like Sharp Architecture and Open Rasta and the CodeBetter CI server and starting a user group in a country I’ll never visit, is all just so incredibly relevant to my life but if I want his opinion on Java, I’ll send him an e-mail about it directly and demand he write about it. Until then, he should STFU. So I’ll do the other 38-odd thousand CodeBetter subscribers a favour and tell him exactly that! I’ll even throw in some free advice telling him to use Java if he likes it so much.”

  • Dinesh Gajjar

    Kyle : If you are happy with Java use it! You didn’t add anything technical here, just a pseudo post.

    What purpose does this article serve which is different then an advertisement ?

    You didn’t explain your requirement.

    You didn’t explain why you chose what.

    You gave a shout-out to discussions/arguements in .NET community, but have you ever counted how many things you can use to achieve the same thing in Java ?

    Thanks for your shout-out, but I am not interested in Java. I am happy with .NET

  • http://pedroteixeira.blogspot.com Pedro Teixeira

    intellij + yourkit is the closest you’ll get as far as tooling goes (in comparing to .NET land)

    You should definetely considering using intellij! it is far superior than Eclipse (performance, shortcut design, js formatter, etc)

  • http://derickbailey.lostechies.com Derick Bailey

    just keep in mind that slowing down in one part of the process (tooling) may lead to an overall improvement in productivity.

    after spending the last 4 or 5 months in Ruby with nothing but the E text editor, I’m convinced that what we call ‘productivity’ in Visual Studio is more along the lines of ‘activity’, considering the constant redesign and rebuilding of our ‘best practices’ and tooling.