Tuesday, July 26, 2005

Java is more productive than Ruby/Rails

I have been doing some Ruby On Rails, for 2 small projects. While I think it is good, I think it is overhyped as well. It is well designed, has good ideas (easy configuration), and focus on the right problem, architecture. But my conclusion is that I am not more productive with it than with Java.

I think most of the development time is not spent coding, but thinking. It is a very obvious statement, and yet too often ignored.

The current Joel On Software article is just making my point: if you look at how much time it took the students to complete their program, you can see it is not the writing that took that much time. And I am sure you noticed the same on your own projects.

So all the nice features of the Ruby language don't save you a lot of time. And actually when your code size is growing, it becomes increasingly difficult for an outsider to understand your program. Everything can be so dynamic, and your only help is a syntax coloring editor. Compare that to Eclipse, or IDEA, or Netbeans, where you have very convenient search, not text search, but search for declarations, for calls, of methods, variables, classes, all that just a mouse click away. Strong typing goes a little bit in the way while writing, but helps understanding better in many cases (personally I wish Java had type inference, as all the verbosity is not always needed). And when if you really want less verbosity, then you have access to a handful of JVM languages.

A drawback of Java is maybe that you have access to too many libraries. Sometimes, making a choice among the bazaar is not easy and the hype gets scattered.



  1. I agree with you. I came to Java from Smalltalk, and it is true the the dynamism of a language at the long term is a problem for big projects

  2. Hahahaha. Compare Java+Eclipse to C#/VB/Any-Lang-You-Like+VisualStudio and you'll learn a thing or two about productivity. Perhaps Java+MyEclipse has a shot at touching the C#+VS pair, but I'm too busy debugging Java bugs that never would've happened under C#+VS to find out!

  3. randall, I used VisualStudio.NET in another project. I think .NET is a quite good platform, and you are right, the development cycle is very fast with it. But Visual Studio is much less convenient than Eclipse or Netbeans or IDEA, has much less powerful features. If you only tried Eclipse a long time ago, you should try the 3.1 release, you will be amazed. Also I believe the Java development cycle can be almost as fast as the .NET one if you establish a good build process.

  4. I've often heard my manager (and others elsewhere) usually justify half-ass projects milestones as "good enough". Meeting deadlines of any sort is usually far more important than making sure that stuff actually works before going into production ("we can fix it later" ...). Are you suggesting they may be wrong-headed ;-)

  5. your point is not about being productive. you are comparing a language to a framework, which leads to a discussion about dynamic vs static typing.

  6. Hi,

    I agree with you:
    - Java plus a productivity tool is far better than any ruby stuff
    - Weaktyping (typical for any scripting languages) is a very bad thing. This triggers a lot of productivity issues in scripting languages: you get an object, you don't know exactly what you have, what attributes are there, etc
    - I disagree with you regarding the stuff "too many libraries are available in Java". Any professional must know what to choose in order to get the job done.
    - Performance: I don't understand how ruby and perl / php fans jump so fast over that: any virtual machine based technology providing jit compiling is better than the best scripting...

    In general, forcing programmers to use a good approach is a flawed technique: there are good and serious programmers who would always try to provide a good design, and programmers who would screw up. Discipline and knowledge is what a programmer needs in order to do well. So, the fact Rails provides a collection of folders to "enforce" MVC will not stop the dumb programmer from doing damages.


  7. @randall

    VS better? You gotta be kidding me. :) I did a couple of VS + .NET projects a while ago and hated it. I hated the drag + drop way of programming (resulting in pretty horrible code, so I ended up doing much manually anyway) and things like debugging and refactoring were a joke. And I missed the choice you have in Java for libraries. There's many *mediocre* commercial components for .NET but the couple of times we seriously though about buying some, we had to conclude they just weren't good enough.