Java - это энтерпрайзно. Проверено. И быстро (не смотря на то, что утверждают
противники). Довольно многословно. Переходя с Java на Ruby вы серьезно сократите
размер кода. Разработка прототипа займет меньше времени.

### Сходства

Как и в Ruby, в Java...

* памятью управляет сборщик мусора.
* объекты строго типизированы.
* есть разграничение доступа на `public`, `private` и `protected`.
* имеются встроенные средства документации (называемые RDoc) - генерируемая
  документация похожа на ту, что генерирует javadoc.

### Отличия

В отличие от Java в Ruby...

* не надо компилировать код - он интерпретируется.
* есть несколько популярных GUI тулкитов - можно попробовать [WxRuby][1], [FxRuby][2],
  [Ruby-GNOME2][3], [Qt][4], или [Ruby Tk](https://github.com/ruby/tk), например.
* в конце определения класса используется ключевое слово `end`, вместо заключения
  кода в скобки.
* вместо `import` пишется `require`.
* все члены класса приватны - снаружи доступ осуществляется через методы.
* скобки при вызове метода не обязательны.
* все - это объект, включая числа как 2 или 3.14159.
* отсутствует проверка типа.
* имена переменных - это просто обозначения, для них нет специального типа.
* нет объявления типа - можно просто присваивать переменные "на лету" (например,
  `a = [1,2,3]` вместо `int[] a = {1,2,3};`).
* нет приведения типов - надо просто вызвать метод. Юнит-тесты сразу скажут, если
  при преобразовании возникло исключение.
* вместо `Foo foo = new Foo("hi")` - `foo = Foo.new("hi")`.
* конструктор называется `initialize` вместо имени класса.
* вместо использования интерфейсов можно "подмешивать" модули.
* вместо XML предпочитается YAML
* вместо `null` - `nil`.
* `==` и `equals()` по-другому обрабатываются в Ruby. `==` используется для теста
  на равенство (`equals()` в Java). `equal?()` используется для проверки идентичности
  (как `==` в Java).


[1]: https://github.com/eumario/wxruby
[2]: https://github.com/larskanis/fxruby
[3]: https://ruby-gnome2.osdn.jp/
[4]: https://github.com/ryanmelt/qtbindings/
