Pull to refresh

Java разработчикам стоит учить Ruby

Reading time 3 min
Views 11K
Original author: Randall
Хорошо, это может быть не Ruby. Выберите какой-нибудь другой язык. Выберите Erlang или даже Javascript.
Не важно — главное, чтобы он отличался от Java, и его изучение потребовало бы некоторых усилий.
Это поможет вам быть готовым к усвоению нового.

Зачем? Потому что изучение других языков сделает вас лучше, как Java разработчика. Серьезно.

Изучение другого языка заставит вас погрузиться в другое сообщество.
Вы увидите другие идеи и подходы к многим общим задачам. Идеи и подходы не обязательно должны быть лучше, они просто другие. В других сообществах часто можно найти свежий взгляд на подобные задачи. И иногда даже вы сможете оценить то, что мы имеем в Java сообществе (например, огромное количество действительно полезных библиотек).

Изучение другого языка может научить вас новым идиомам.
Какие-то вы будете использовать в Java, какие-то нет. Ruby blocks, к примеру, — широко используемая форма замыканий в большинстве Ruby программ. Они очень полезны для выполнения кода, который делегирует блоку с конкретным поведением. Вот простой пример итерации массива и выполнения определенного действия (печати элемента):
animals = ['lion','tiger', 'bear']
animals.each {|animal| puts animal }


К сожалению, в Java нет замыканий. Но не совсем. Больше всего замыкания в Java 6 (да и в предыдущих версиях — прим. пер.) напоминает анонимный вложенный класс, который, по сути, так и используется в GUI приложениях, когда мы добавляем Listener. Всё, что нужно, — определенный интерфейс и метод в классе, предоставляющем реализацию, и это выполнит итерацию (как метод each в Ruby). Представим, что в java.util.List есть метод each, который принимает на вход OnEach:
public interface OnEach {
void run(T obj);
}
public interface List ... {
void each( OnEach action );
}

Наш пример будет выглядеть примерно так:
List animals = Arrays.asList( new String[]{"lion", "tiger", "bear"} );
animals.each( new OnEach() {
public void run( String animal ) {
System.out.println(animal);
}
});

Довольно сложно, да? Но даже если это не очень просто, то это всё же паттерн, который можно использовать,позволяя получать определенное поведение без написания подклассов. Имеются некоторые идеи реализации замыканий в Java 7,но среди них нет таких же простых в использовании вещей, как в Ruby и Javascript-е. Для этих целей у Alex-а есть лучший ресурс о всех вещах в Java 7.

Изучение другого языка также заставляет вас использовать другие инструменты и процессы.
Одним примером в Ruby является RSpec, представляющий собой управляемый поведением фреймворк (Behaviour Driven Development - BDD), сфокусированный на спецификации и проверке поведений.
BDD - богатая тема, которую я раскрою в другом посте.

Другой пример: autotest - хороший маленький инструмент от ZenTest, выводящий последовательную интеграцию на новый уровень. Он работает на локальной машине (в отличии от удалённого сервера интеграции) и просто проверяет файловую систему на машине разработчика на предмет изменения исходных кодов и выполняет тесты, соответствующие измененным файлам. Если эти тесты проходят, он запускает все тесты. Такой подход прост, элегантен и позволяет вам сфокусировать усилия на изменении кода, уже получая результаты тестирования. Это похоже на JUnit или TestNG плагин к Eclipse, который автоматически выполняет ваши тест, когда вы работаете над кодом.

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

Вы изменили свой стиль разработки на Java после изучения другого языка?

---
Вольный перевод статьи отсюда: jbossdna.blogspot.com/2008/06/java-developers-should-learn-ruby.html
Tags:
Hubs:
+27
Comments 119
Comments Comments 119

Articles