Ruby and Subversion
Feedback on "Ten Things a Java Programmer Should Know About Ruby"
This is a compilation of feedback I received for a list of things Java programmers should be aware of when looking at Ruby. This list is not the final version, nor are all (most) of the ideas in this list mine. This is merely a temporarty holding spot for these ideas while I assemble a talk/article/presentation on the topic.
If you have a problem with anything on this list, please bring it up with the person who made the suggestion (i.e. not me!)
However, if you have further suggestions for this list, feel free to drop me a note at jim@weirichhouse.org.
| Boolean methods end in ?. Dangerous methods end in ! | |
| you can fit in your mind and write code without looking at the docs every six minutes | |
| less syntax and less typing | |
| Discipline. Because of its inherent flexibility, Ruby require more self-discipline | |
| "." (dot) is a method call operator. "::" (colon-colon) is a scope operator. | |
| Ruby classes are Objects (therefore String.new, not new String()) | |
| Everything is an Object | |
| Ruby does not have type casting. | |
| Compared to Java, XML is agile. Compared to Ruby, XML is Heavy. | |
| Ruby has O/R mappers, so find your Ruby "hibernate", but drop any preconceptions. | |
| Don't worry about early performance optimization | |
| Enjoy closures and blocks | |
| No method overloading | |
| Don't worry about interfaces, enjoy Duck Typing. | |
| Reflection in Ruby is much easier than in Java, and more deeply into the language than the java.lang.reflect tack-on. | |
| That you can write Ruby in Java (http://jruby.sourceforge.net) | |
| Everything is an expression. | |
| local_variable, @instance_variable, $global_variable, Constants, (and @@class_variables) | |
| Java static methods do not (quite) translate to Ruby class methods. | |
| you can have variable number of parameters, and multiple return values | |
| Ruby is not a Silver Bullet, unlike Java, right? :-) | |
| Ruby is a language to be used everywhere. You use it even in templates. No need for "Velocity/JSP." | |
| Web-development is possible with other languages besides Java. | |
| Many things that you're used to thinking of as syntax are now just | |
| Ruby is strongly typed, not statically typed | |
| Ruby has extensive reflection capabilities | |
| Ruby is dynamic. You can add, remove and modify objects, classes and methods at runtime. | |
| REXML vs. JAXP. I rest my case. | |
| KISS | |
| Think in terms of methods (behaviors) instead of classes. | |
| you cannot rely on the compiler to catch trivial mistakes | |
| No explicit types. Probably the most disconcerting thing for a javahead | |
| ruby has shortcuts for accessor methods which reduces alot of redundant coding in java | |
| you can use string interpolation, ex: "x: #{@myvar}" instead of having to say "x:" + myvar' | |
| no semi-colons, optional parenthesis | |
| Ruby classes are always "open". | |
| C extensions/wrappers are *much* easier in Ruby than JNI interfaces in Java | |
| Ruby has MVC and OO programming and libraries, but drop any preconceptions. | |
| In Ruby data is strongly typed, but variables are *not* | |
| Once you start coding Ruby, going back to Java is painful. | |
| CamelCase for class names, names_with_underscores for methods and variables. | |
| stop writing so much code | |
| ri is your friend. irb is your other friend. | |
| eval | |
| the builtin classes are much faster because they're written in C and not Ruby | |
| Avoid external utility classes | |
| Use class methods to define pseudo-compile directives | |
| You probably don't need Factories | |
| Enumerable is your friend | |
| Typing is the enemy | |
| No external configuration files | |
| method_missing | |
| Singleton methods | |
| Ruby packaging vs Java packaging | |
| ruby has multiple inheritance through mixins (this is sooo nice to have) | |
| writing code in ruby, can improve the code you write in java | |
| Ruby is agile, perfectly suited for XP | |
| Ruby's OO is message based. | |
| Fixed what's wrong with Perl | |
| Fixes what's wrong with Python | |
| It's super productive (like Perl, Python and Smalltalk)- maybe 5-10x Java. | |
| Is a lot like Smalltalk, but doesn't look as funny | |
| Is a lot like Javascript, but more OO and more for ful app development | |
| Blocks and Closures | |
| Open Classes | |
| Duck Typing | |
| "finally" is called "ensure" | |
| Use blocks for transactional behavior like like File.open does. | |
| Help at: http://ruby-lang.org/en, http://ruby-doc.org/, news:comp.lang.ruby, irc:ruby-talk | |
| An instance of a class can be extended to be subtly different, without needing to subclass. | |
| you can change your mind about whether .foo is a simple property or a complex method call, without affecting the interface to your class. | |
| HEREDOC strings with variable interpolation make large chunks of output really easy to construct. | |
| For good (but subtle) reasons, you have to leave the '++' and '--' behind. |

