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

Автор оригинала: 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

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 119

    +14
    согласен, но этот совет подходит любым программистам, не только на Java
      +2
      Есть мнение (высказал кто-то из великих), что программист должен учить каждый год новый язык.
        0
        Ученые выяснили, что если регулярно есть 1200 яблок, по одному яблоку в месяц, то можно дожить до 100 лет.
        Ну это юмор, немного не точный. :) Насчет каждого года не знаю.
        Я двигаюсь по пути delphi -> php -> python -> java. Сейчас перешел на питон. Заметил очень интересную вещь: переходя от языка к языку, познаешь недоступные ранее истины прошедших языков. Т.е. изучая новый язык, хоть краем, но получается изучать другие языки. Очень удобно и интересно.
          0
          Я двигаюсь по пути delphi -> php -> python -> java. Сейчас перешел на питон. Заметил очень интересную вещь: переходя от языка к языку, познаешь недоступные ранее истины прошедших языков.

          Интересно, что бы вы могли узнать из Джавы такого, что не узнали бы при изучении Питона.
            +1
            Получить лучшую инфраструктуру: производительность, библиотеки, среды разработки: нужно распространять django-приложение с работой out-of-box - пожалуйста, jetty/berkleydb/jython к вашим услугам. JRuby уже нашёл применение в Enterprise: Oracle Mix, TW Mingle.
              0
              Я не спрашивал про достоинства джавы, как платформы.
                0
                Всё зависит от того для чего мы учим новый язык, если для решения задач - то и рассматривать Java надо не только как язык, но и как платформу. Если в "академических" целях, то лучше сразу переходить к haskell & lisp.
                  0
                  Так посмотрите на тему: «Java разработчикам стоит учить Ruby». Наверняка ведь не для решения практических задач? Ведь, по убеждению большинства здесь присутствующих, для решения практических задач нет платформы лучше, чем Джава.
                    0
                    Ну всё относительно. Мы вот используем Python(Django) для фронтенда, Java - для бекенда. И всё это чисто из практических целей.
                      0
                      Бэкэнд на джаве - легаси, или нет?
                        0
                        Нет, узкоспециализированные и ресурсоёмкие задачи скорее: Red5, Lucene...
            0
            > Я двигаюсь по пути delphi -> php -> python -> java

            У меня почти такой же путь, только я пока на python'e остановился. Хотя так же после pythona есть мысли изучить java
            0
            И кто этот "великий"? Языки программирования нужны чтобы выполнять конкретные задачи, а не для того чтобы их все подряд учили без дела. Если поучить нечего, историю родной страны можно поучить, или фонетический словарь... Полезнее для саморазвития во много раз будет, нежели изучение чёрт знает чего чёрт знает которое зачем чёрт знает может чёрт знает чем вам помочь (да и то на 90% вы к тому времени его уже забудете =)
              0
              Не согласен. Говорится о том, что необходимо поднимать общий уровень знаний. При изучении нового языка действительно изучаешь новые парадигмы (особенно если изучить принципиально отличающийся язык, например, Lisp или Prolog после Java). После этого в голове остается не язык, его синтаксис и семантика (детали забываются со временем), а именно основные идеи, заложенные в основу.

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

              Хотелось бы дополнительно отметить, что это высказывание сохраняет силу вне зависимости от специализации программиста на каком-то рабочем наборе языков.
            –1
            И в качестве нового языка не обязательно должен быть руби.
            0
            Но почему именно Java? На его месте может быть любой язык с C-подобным синтаксисом.
              0
              И наоборот :)
                0
                А почему именно с C-подобным?
                Т.е. ruby-программист джаву учить не должен?
                  0
                  Я имел в виду то же, что и первый комментатор - все плюсы изучения нового языка вы прочувствуете, если разрабатываете не обязательно на Java, а скажем, на C#.
                    +1
                    Руби-программисту джаву учить бестолку - она ему ничего не даст.
                      0
                      Объясните почему.
                        0
                        Потому что абсолютно всё, что можно сделать в Джаве, можно сделать и в Руби. Можно сказать, что руби-программист Джаву уже знает полностью.
                          +2
                          На ассемблере тоже можно сделать все, что в Джаве или в Руби.
                          Новый язык это не только новые конструкции и библиотеки. Это еще и подходы к решению задач, которые сформировались в той или иной среде. И вот именно ради них и есть смысл изучать новые языки.
                            –4
                            Я вас поздравляю, вы повторили мой комментарий своими словами.
                            0
                            Сила Джавы, как мне кажется, больше не в самой платформе (язык не поворачивается назвать её «языком программирования») сколько в библиотеках и фреймворках.
                            В случае разработки вочень ысоконагруженного приложения — это не так актуально—большую часть надо будет писать самим (но руби в той сфере я тоже не вижу). А в случае разработки, например бизнес—систем позволяет сэкономить большое количество времени использованием Apache, JBoss, OpenSymphony, UI-фреймворков (список неполный).
                              0
                              Мы здесь обсуждаем не применимость языка, а стоит его изучать, или нет. Причём не с точки зрения получения зарплаты, а с точки зрения роста себя, как программиста.

                              А в случае разработки, например бизнес—систем позволяет сэкономить большое количество времени использованием Apache, JBoss, OpenSymphony, UI-фреймворков

                              Я бы поостерёгся записывать веб-сервер Apache в плюсы к Джаве. А то так ещё и Линукс можно записать в плюсы :)) Ну и вы думаете, что в других языках нет библиотек и фреймворков? (это риторический вопрос)
                                0
                                Простите, видимо не так выразился. Я больше к тому, что Руби — язык программирования, а Джава — платформа. Джава, как язык — ничем не примечательна.

                                p.s. Apache — джава проекты Апача (пакет org.apache) и сервлет-контейнеры, а не веб-сервер.
                                  0
                                  Да, действительно, JVM, как платформа - свой закрытый мирок, из которого наружу никто не смотрит, и в который снаружи никто не смотрит. Я вот не знаю, зачем эти сервлеты нужны, какие у них преимущества есть (если есть, конечно :) ) по сравнению с другими методами взаимодействия (FastCGI, WSGI, etc). Если это кратко - просветите, пожалуйста :)
                                    0
                                    Я попробую, но за качество не отвечаю — я не java-разработчик :)
                                    Сервлет-контейнер (по сути — application server) — содержит несколько зарегистрированных (например, /access — первый, /admin — второй) сервлетов. Сервлет должен уметь обрабатываь GET и POST запросы (методы doGet и doPost). Контейнер — разбирает кому отдать запрос и отдаёт, дальше не его дело.

                                    Сравнить с WSGI или FastCGI, простите, не могу — до этого на питоне писал на Zope (там был свой «велосипед» — без FastCGI и прочего).

                                    Обычно на уровне сервлетов мало кто пишет — эта логика уже на уровне UI фреймворка — например в Tapestry именно так (заглянул в стенд продукта компании :).
                                      0
                                      Ясно. Достаточно странное решение, как на меня, ну да ладно :)
                                        0
                                        Servlet API и WSGI по сути одно и тоже. Только в Java это придумали по-раньше, когда возникла необходимость пускать одни и те же приложения на разных app servers. Лучшим сравнением наверное будет посмотреть исходники modjy - своеобразный "маппинг" wsgi на сервлеты, чтобы wsgi приложения пускать на jvm под jython'ом)
                            0
                            По преданию Ruby-программист - центр вселенной, и ему абсолютно незачем учить другие языки.
                            0
                            (шепотом) бабки даст и карьеру
                            вакансий на яву больше и платят там, в среднем, больше.
                              0
                              Ну насчёт руби не знаю, но за Питон платят больше, чем за Джаву, причём достаточно ощутимо.
                                0
                                это дело очень легко проверить вот таким образом http://www.job.ru/searchResults.html?selectType=2&country=1&_showOffersFromLast=&keywords=python&jobCategories=-1®ions=2
                                как видно, в большинстве вакансий питон вообще не идет в заголовке, а только где-то одним из желательных требований
                                зарплаты совершенно обычные
                                  0
                                  Я не обращал внимания ни на российские вакансии, ни на средние - я обращал на те, куда я мог бы пойти работать, и куда меня приглашали. И у питонских вакансий зарплата была, в среднем, на 30-60% выше.
                                    0
                                    хм, если вы говорите не о российских и не о средних (кстати, что такое средние в данном случае?), а о вакансиях предлагавшихся вам лично, то правильно я понимаю, что 30-60% выше - это тоже сравнительно к непитоновским "вакансиям предлагавшимся вам"? может ли это странное сравнение быть показателем вообще чего-либо в любую сторону?
                                      0
                                      > если вы говорите не о российских
                                      Я в Украине живу ;)

                                      > и не о средних (кстати, что такое средние в данном случае?)
                                      Средние - средние по зарплате. Я смотрел статистику с developers.org.ua.

                                      > то правильно я понимаю, что 30-60% выше - это тоже сравнительно к непитоновским "вакансиям предлагавшимся вам"
                                      Не только те, которые мне предлагали лично, но и те, куда я, в общем-то, мог пойти работать. И не только я, но и некоторое количество моих знакомых. И вот в питоновских вакансиях зарплата на 30-60% выше, чем в более-менее аналогичных джавовских вакансиях. Я думаю, что это именно потому, что «Джава даст бабки и карьеру», и её учат все. А Питон - не так.
                                        0
                                        сделал поиск на developers.org.ua. получил целых СЕМЬ вакансий про питон. опять же, в большинстве вакансий он "побочен".
                                        количество вакансий на Яву просто так не посчитаешь, там сотни.
                                        внимание, вопрос: каким образом можно делать сравнения по зарплане на таком рынке?
                                          0
                                          Да я не собираюсь вам ничего доказывать :) Статистика - я не про вакансии, а про такое: http://www.developers.org.ua/archives/max/2008/03/06/kiev-it-salaries-raised-by-40-percent/ (ссылку не могу поставить из-за отрицательной кармы)

                                          Ну а сами вакансии - то что знакомые говорили, то что на конференции (Exception) обсуждалось, то что мне в мыло падало. У меня нет задачи собрать полную статистику по всем программистам СНГ :)
                                            0
                                            о господи. при чем тут зарплата, если вакансий нет? есть грубо говоря всего несколько мест, где нужны именно питонисты. допустим питонистов мало (хотя порог входа низкий, потому начальным уровнем любой может овладеть махом) допустим, кому-то они нужны позарез и им ставят зарплату 3000EUR. одного нашли, второго нашли, третего нашли. ВСЁ. остальные привычно идут писать на ПХП. Все данные по вакансиям России и Украины говорят именно о такой ситуации. В евпропе не намного отличается (соотношение вакансий питона и явы 1 к 30 в Великобритании)
                                              0
                                              Порог входа низкий, но, по факту, программистов на Питоне не хватает. У нас в конторе не хватало. И у знакомых тоже не хватало. И сейчас ни там, ни там не хватает. А, как я уже сказал, собирать полную статистику - не моя задача.
                                                0
                                                Это не в питоне дело. Толковых программистов вообще не хватает :)
                                                  0
                                                  Я понимаю, но почему-то товарищ выше думает, что раз для питона меньше вакансий, то там такой проблемы нет. Такой проблемы не будет, если мне нужно будет нанять одного-двух человек для Эрланга, Хаскелля или чего-то подобного - но, опять же, зарплата будет сильно выше, чем в случае с Джавой или другим подобным языком.
                        0
                        Главное - не уходить совсем далеко в стороны. Скажем идеи из Lisp'а ещё можно как-то прикрутить к Java, но из Haskell или Erlang - вряд ли. Либо вы проникнитесь их подходом и будете потом с отвращением писать код на Java, либо, наоборот, он вам не понравится - и вы просто будете жалеть о петерянном времени.

                        Конечно если вы изучаете Erlang и Haskell имея (пусть потенциальную) возможность их в будущем применять в своих проектах - тогда другое дело...
                          0
                          Я склоняюсь к мысли, что понимание других парадигм еще никому не мешало. Пусть даже наш абстрактный Java-программист никогда не применит на практике того, что он понял, изучая Haskell; польза есть, если это помогло ему хотя бы быть чуточку менее зашоренным.
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              Тогда вы, наверное, в какую-то не ту сторону разминаете ;)
                            0
                            Есть еще вариант, что такой программист со временем напишет очередной эмулятор Хаскела на яве. :) Которым никто не будет пользоваться.
                              0
                              ага, я тоже уже с первых строк статьи хотел дать ссылку Чем изучение Haskell/Python вредит программисту : )
                                –1
                                Тут завелись какие-то лемминги-минусовальщики :)
                              +1
                              Только Erlang, без a после E. Вообще от JVM уходить совсем не обязательно, функциональное программирование и actor-model есть у Scala. За динамикой можно обратиться к Groovy.
                                +1
                                один (достаточно умный) товарищ в жж сообществе ru_java сказал примерно следующее:
                                "проблема java программистов в том, что они живут в своем мальеньком мирке jvm, грея себе душу рассказами о кроссплатформенности и всячески пытаясь уйти подальше от системных вызовов"
                                  0
                                  Это эволюция. Давайте еще поругаемся, что со своим тесным мирком системных вызовов все так далеко ушли от машинного кода.
                                    0
                                    как то не вяжется "достаточно умый товарищ" и "уйти подальше от системных вызовов". это не программисты ушли от системных вызовов, а создатели языка. или товарищ знает, как работать напрямую с памятью и, к примеру, прервываниями на Java?
                                      0
                                      sun.misc.Unsafe или как он там сейчас называется.
                                        0
                                        не так. "товарищ знает, как работать напрямую с оборудованием, без системных вызовов, в ОС защищённого режима?"
                                    0
                                    учить лучше основной язык, а вот интересоваться и читать литературу нужно и по другим.
                                    лучше быть гуру своего языка, чем "читал пару книжек" по 10, но 2 из них были про Java, поэтому я Java программист.
                                      –1
                                      учить лучше основной язык

                                      К сожалению, в таком языке, как Джава, очень быстро наступает момент, когда ничего нового уже не будет. Новые библиотеки - возможно, новые возможности - нет. Разве что "а вот появится в следующей версии JVM", которая выйдет через пару лет. Но пару возможностей за два года - это, скорее, деградация, чем развитие.
                                        +2
                                        мне всегда казалось, что хороший программист это не "учить новое, читать про рюшечки и changelog, only", я всегда думал, что хороший программист - этот тот, кто может писать это новое по мере своей необходимости.
                                        да и не знаю я людей, которые знают всю Java, даже Гослинг признавался в свое время, что это практически невозможно.
                                          0
                                          хороший программист это не "учить новое, читать про рюшечки и changelog, only", я всегда думал, что хороший программист - этот тот, кто может писать это новое по мере своей необходимости.

                                          Вы неправильно поняли то, что я написал. Я говорил о "новых" возможностях языка. Добавьте в джаву list comprehensions, например. Ну или именованные аргументы.

                                          да и не знаю я людей, которые знают всю Java, даже Гослинг признавался в свое время, что это практически невозможно.

                                          Я так понимаю, что под "знанием всей Java" вы подразумеваете знание всех (распространённых) библиотек. Нет, я не это имел в виду. Перечитайте ещё раз предыдущий комментарий?
                                            0
                                            Java это не нужно. Это язык для Ынтерпрайза а не для гиков.
                                              0
                                              Я и не говорю, что ей это нужно.
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            +1
                                            Ничем не могу вам помочь - я отказывался от всех предложений работать программистом на Java :)
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                        +2
                                        Если вы программист - научитесь играть на пианино. Или на любом другом инструменте.
                                        Это сделает вас лучше как человека.

                                        P.S. Угадайте, почему тяжело играть на скрипке? ;)
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            0
                                            Мысль, что смотреть по сторонам дело нужное поддерживаю. А на счет Руби нет. У Джавы есть Груви. Зачем ей Руби? :)

                                            Компилится в джава-байт-код. Работа джава-груви, груви-джава совершенно прозрачна. Хочешь наследуй, хочешь вызывай.
                                            Имеет все, что умеет Руби, но предлагает кроме duck-typing еще и статику.
                                            Рекомендую пользоваться Груви сначала просто в юнит-тестах.
                                            Удобств и гибкости тонны, груви тут как раз и усиливает, а скорость выполнения уже не критична.
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                0
                                                Ой этим консультантам только на руку, когда много технологий - ThoughtWorks не даром так Ruby пиарят вместе с polyglot-programming - им это только на руку.
                                                0
                                                Вы изменили свой стиль разработки на Java после изучения другого языка?

                                                Мне кажется, стиль меняется не только после изучения другого языка, но и по ходу изучения даже одного.
                                                  0
                                                  пиар Ruby
                                                    0
                                                    Зачем нужен Ruby, когда есть Groovy?
                                                      –1
                                                      а можно узнать, за что минус?
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                          0
                                                          хм..

                                                          >Изучение другого языка заставит вас погрузиться в другое сообщество.
                                                          Верно для груви? Верно!

                                                          >Изучение другого языка может научить вас новым идиомам.
                                                          Верно для груви? Верно!

                                                          >Изучение другого языка также заставляет вас использовать другие инструменты и процессы.
                                                          верно для груви? В пределах тех мыслей, что рассматриваются в статье - верно!

                                                          А интеграция с Java'ов для Java-разработчика - тем более плюс.
                                                          А теперь бы хотелось услышать _настоящие_ аргументы в пользу Ruby перед Groovy.

                                                          P.S. А ведь есть ещё такая интересная штука, как Grails!
                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                              0
                                                              а, прошу прощения - не понял сначала, что вы подразумевали под "да низачем, забудьте".
                                                              правда в плане "То есть ваш комментарий вообще никак не относится к исходному посту." я с Вами не согласен
                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                  0
                                                                  с такой постановкой вопроса согласен. Одна я пытаюсь сказать, что groovy для java-разработчика полезнее ruby.
                                                      0
                                                      есть гипотеза Сепира — Уорфа согласно которой структура языка определяет мышление и способ познания реальности. Как следствие этой гипотезы, чем больше человек знает языки, тем более у него богаче представление о реальности. Это применимо и к языкам программирования.
                                                      http://en.wikipedia.org/wiki/Sapir%E2%80%93Whorf_hypothesis#Computer_coding_language_conceptual_correlate
                                                        0
                                                        А почему все говорят "Джава"? Разве не "Ява"?
                                                          0
                                                          Нет, не "Ява", это английский, а не немецкий. Можете послушать какие-нибудь доклады сотрудников Sun, там ясно слышно, что они говорят "Джава" ;)
                                                            0
                                                            Извините, а при чём тут английский? Вы говорите "проект" или "проджект"?
                                                              0
                                                              Вы говорите "Майкрософт", или "маленькомягкое"? Джава - это название определённой штуки, а названия, как правило, не переводятся.
                                                                0
                                                                Я говорю "Микрософт". Речь не о переводе, а о более верном произношении. "Ява" имеет одни корни с сортом кофе и с островом, которые по-русски звучат именно так.
                                                              0
                                                              Ну, дык, они и остров соответствующий тоже Джавой называют, а Москву так вообще МОскоу'ой. Что ж нам теперь и столицу переименовать? :)
                                                              0
                                                              А "Job" как же тогда произносить ? :)
                                                                0
                                                                "Job" произносить так: "работа". Я спросил про русский язык.
                                                                  +1
                                                                  Тогда вместо Ruby on Rails надо "Рубин на рельсах" по вашему говорить? А вместо Visual Basic - "Визуальный основной"?
                                                                    0
                                                                    Предлагаю более жизненную аналогию. Одна из версий виндовс называлась Chicago, и по-русски все её называли "Чикаго", и были правы. Никому в голову не приходило называть её "Шикаго", а ведь именно так это по-английски звучит.
                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                0
                                                                Потому что от Явы до Жабы недалеко.
                                                                0
                                                                Java разработчикам стоит учить Flex фреймворк!! Пусть Ruby овладевают мастера PHP!!
                                                                  0
                                                                  Flex похож на JavaFX, что ли? Ж)
                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                    0
                                                                    Так и не понял, чем этот подход (с порождением новых сущностей) лучше здоровой итерации.
                                                                      for(String s: args) {
                                                                    System.out.println(s + " ");
                                                                    }


                                                                    Пока что вывод такой прочитал: изучайте другие языки, чтобы делать стандартные вещи нестандартными путями. И идея вобщем-то правильная, только с аргументацией сложности
                                                                      0
                                                                      Знаю одного Java-программиста, который однажды открыл для себя Perl - и с тех пор очень зол, что не сделал этого раньше :). На Java он больше не пишет.
                                                                        0
                                                                        Этот топик я на Хабре уже видел ;)
                                                                          0
                                                                          А если знаком с Object Pascal, C++, PHP, JavaScript, Java легко освоится? Просто каких только мифоф не слышал об "отуплении" "Жаберов".
                                                                            0
                                                                            если вы "знакомы" со всем этим списком, то с явой вы тоже будете "знакомы" :)
                                                                            0
                                                                            Если вы не занимаетесь написанием вещей, где критичен performance (тогда ваш выбор C++, D), то я бы рекомендовал как минимум знать один язык со статической типизацией (отличной заменой Java является Scala), один функциональный язык (та же Scala, Haskell, Erlang на выбор), один язык с динамической типизацией (Groovy, если хотите быстро адаптироваться после Java или Ruby/Python на выбор). Мировоззрение меняется это факт.
                                                                              0
                                                                              ruby -e 'a=[]; a[0x7fffffff]="A"'
                                                                                0
                                                                                Вопрос к автору, чем плоха конструкция на Java:

                                                                                final String[] animals = {"lion", "tiger", "bear"};
                                                                                for ( String a : animals )
                                                                                System.out.println( a );

                                                                                Тем, что проста, понятна, последовательна, легко отлаживаема и выразима на любом алгоритмическом языке? К чему извраты вроде code injection в коллекцию объектов с абстрактным итератором? Как Вы будете пошагово отлаживать свой код, если надо сделать более сложные вещи, нежели вывод объекта? Closures в Java - зло! Java не нужны новые идеи - она самодостаточна.

                                                                                А проблема в том, что вы не понимаете разницы между алгоритмическими и скриптовыми языками и цели их использования. Декларативное программирование и скриптовые языки хороши там, где кончается архитектура и начинаются прикладные задачи, типа определения бизнес правил и написания сценариев. А весь используемый функционал имплементируется фреймворком более низкого уровня, написанном на нормальном языке типа Java или C/C++.
                                                                                  0
                                                                                  а теперь ту же конструкцию для Map'ов, пожалуйста ;)
                                                                                  и сравните с тем же groovy
                                                                                    0
                                                                                    Вы про то, что в Java нет константной инициализации мепов? Так это любой школьник напишет. Например так:

                                                                                    final String[] mapConst = {"key1","value1","key2","value2" };
                                                                                    Map map = new HashMap();
                                                                                    for ( int i = 0; i < mapConst.length; i+=2 )
                                                                                    map.put( mapConst[i], mapConst[i+1] );

                                                                                    При этом не уродуется язык, а функциональность расширяется за счет собственно функций.
                                                                                      0
                                                                                      решение оригинально, спору нет, но на том же groovy оно в 4 раза короче и понятнее:
                                                                                      Map map = [key1: "value1", key2:"value2"]
                                                                                        0
                                                                                        Не понятней. Во-первых, где контроль типов в вашем мепе? Во-вторых, какой имплементирующий тип мэпа возвращает эта конструкция: HashMap, TreeMap, LinkedHashMap или VasyaPupkinInternalMap? В-третьих, как ведет себя сия коллекция в многотредовой апликации? Является ли она синхронизированной или нет?

                                                                                        Ответы на эти вопросы остаются за кадром и не ясны из контекста. В итоге язык усложняется и обрастает ненужными конструкциями и допущениями. А это возврат на 30 лет к PL/M (думаю, молодые программисты даже не знают что это такое). Все последущие языки эволюционировали в сторону упрощения, то есть при помощи минимальной функциональности и простоты покрыть максимальный объем задач. А вовсе не как сократить количество символов в программе. В итоге был найден определенный компромисс, который имеют все структурные языки. Функциональность расширялась за счет подключаемых библиотек или ООП.

                                                                                        Скриптовые языки типа groovy не являются структурными ибо служат для написания сценариев в уже существующей архитектуре и не более того. Писать что-либо серьезное на groovy будет большой ошибкой.
                                                                                          0
                                                                                          отвечу по-порядку:
                                                                                          Контроль типов опционален. В вашем мэпе я его тоже что-то не вижу ;)
                                                                                          По-умолчанию имплементация - LinkedHashMap. Хочется другой имплементации - пожалуйста:
                                                                                          HashMap map = new HashMap([key1: "value1", key2: "value2"])
                                                                                          Хочется синхронизированности - пожалуйста:
                                                                                          [key1: "value1", key2: "value2"].asSynchronized()

                                                                                          Энивэй, в данном контексте проблемы groovy не в простоте, а в нестатической типизации.
                                                                                            0
                                                                                            В моем примере контроль типов съел хабр (он подумал, что это html тэги).

                                                                                            HashMap map = new HashMap([key1: "value1", key2: "value2"])
                                                                                            Я так понимаю, что это транслируется в код, который сначала делает LinkedHashMap, а потом из нее HashMap ;)

                                                                                            Умолчания - для молчунов. Вся документация по groovy - это сборник рецептов и враперов для уже существующих api. Никакой формализации, никакой структуры. Словом, помойка для удовлетворения сиюминутных потребностей. Еще раз повторяю, что closures - абсурд. Не понимаю, чем он лучше функционального подхода? В чем философия Collection.each() ? Сама коллекция не имеет свойства обходить свои элементы и делать с ними что-то, пришедшее извне. И не нужно ее учить это делать при помощи closures. Коллекция - для хранения элементов, не более.
                                                                                              0
                                                                                              Кстати да, скорее всего так и происходит.
                                                                                              Ну если уж на то пошло, то груви действительно "врапит" уже существующие апи, это одна из "фич", и я не вижу в этом ничего плохого. Насчёт формализации не согласен - достаточно посмотреть что такое true в груви или на то, что size() можно вызвать практически на любом объекте, у когорого размер действительно есть - от файла и до матчера.
                                                                                              Опять же, пользоваться closures никто не заставляет - в большинстве случаев они работают как тело того же цикла или статический внутренний класс. Опять же Collection.each() - для удобства, не более того. Или может быть вы скажете, что findAll() - тоже абсурд?
                                                                                              зы философия и смысл groovy - не в замене java, а в её более удобном использовании, про grails можно сказать то же самое.
                                                                                              ззы может быть продолжм наш разговор в каком-нибудь более приспособленном для этого месте?
                                                                                                0
                                                                                                Ну и в чем смысл size()? Что он измеряет? Размер в байтах, в элементах или в попугаях? В java для этого служат интерфейсы. Например Comparable служит для любых сравнимых сущностей. Collection - для всего, что может содержать элементы. Так что никакой четкоопределенной универсальной абстрактной функции у size() нет.

                                                                                                Далее. Строгая типизация просто необходима. 30-летний опыт показывает, что она - в момент компиляции обнаруживает большинство ошибок. Не даром в java добавили generics.

                                                                                                Ничего принципиально нового в Closures нет. Он использовался еще в C как паттерн function callback. Но уже в C++ он стал одним из антипаттернов и заменен более адекватными шаблонами (типа Iterator).

                                                                                                Я согласен с Вами, что основная задача groovy - удобство и скорость программирования. Однако удобство и правильность - разные зачастую несовместимые понятия. Это как искусство и коммерция. Программирование, шаблоны, ООП и языки выросли из философских соображений, нежели из соображений удобства, и имеют определенную идею. Гослинг, разработавший Java - идейный человек, а разработчики groovy - комерсанты, завлекающие разработчиков удобством.
                                                                                    0
                                                                                    конструкция хороша, спору нет.

                                                                                    "А проблема в том, что вы не понимаете разницы между алгоритмическими и скриптовыми языками и цели их использования" - вы не сильны в телепатии

                                                                                    статья лишь о том, что стоит знать о существовании других подходов.
                                                                                      0
                                                                                      С философской точки зрения знание о том, что теоретически зубы можно лечить через жопу, занимательно, однако практически бесполезно.
                                                                                        0
                                                                                        знание того, что зубы надо лечить через рот, само по себе не развивает человека. а вот _понимание_
                                                                                        этого факта полезно. а в программизме (имхо) важнее всего понимае того, что определенный подход для определенной задачи оптимален.
                                                                                          0
                                                                                          Численно оптимальность подхода выражается в человекочасах, затраченных на решение. Оно включает не только написание кода, но и архитектурное проектирование, отладку и последующее сопровождение (другими программистами). Вполне вероятно, что начиная с комплексных задач средней сложности, Ваш подход перестанет быть оптимальным. Проект погрязнет в ошибках, программисты, пришедшие в проект не будут понимать код других... можно брать лопату и хоронить.
                                                                                          Оптимальным, может быть, для написание серверной вебстранички одним программистом.
                                                                                    0
                                                                                    А как на счет начать програмирование именно из Ruby ?
                                                                                    Я имею кое-какие познания в PHP, но Ruby более понравился.
                                                                                    Потом думаю перейти к Python. Что скажете ? :)
                                                                                      0
                                                                                      Полностью согласен, правильный совет.
                                                                                      Я лично совсем по-другому посмотрел на программирование, изучив в универе Haskell.
                                                                                      А RSpec — это тема, её стоит попробовать всем программистам независимо от их языка.

                                                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                      Самое читаемое