Why Ruby Matters(and PHP doesn't)

    Chapaevнаписал интересную статью – если статья понравилась – плюсуем человеку карму, что бы он мог размещать статьи сам (North)

    Заранее прошу беременных женщин и детей не приступать к чтению и комментированию этой статьи — внутри будет жарко. Так же прошу не спускать всех собак на North'a, который разместил эту статью, так как мне это не позволяет сделать карма. Эта статья о том, почему я люблю Ruby & Rails и активно слежу за их развитием.


    Сам я всю свою разработку веду на Java. На Хабре одним из критериев технологии является «How many of top 10 web 2.0 sites run on it?». Java же участвует в другом конкурсе: «How many of Fortune top 1000 companies heavily use it?». Да, это не Digg & Wikipedia, это IBM, Oracle, Google, Accenture, Voca, Sabre, Wallmart, 9 из 10 крупнейших банков мира и многие-многие другие.

    Собственно возникает вопрос — почему же я обратил внимание на Ruby. Вообще программисту рекомендовано изучать хотя бы по одному новому языку в год, но Ruby попал в круг моих интересов из-за Rails. Всё началось с того, как я в очередной раз натрахавшись с Web-разработкой на Java отправился в поиски нового Java Web-framework'a. На Java их настолько много, что Neal Ford(архитектор в ThoughtWorks) однажды даже написал книжку на эту тему, а Matt Raible(создатель Appfuse) ежегодно проводит презентации на эту тему. Наверное любая идея была или воплощена на Java первой, либо портирована на неё. У нас есть и дедушка Strus, один из первых MVC Web-framework'ов, и template engine Velocity(привет Smarty!) и JSF(привет ASP.NET) и ещё много-много других. Так вот в то время как раз был один из пиков Rails-hype, которая просочилась и на TheServerSide, и на JavaLobby, так что я решил — а почему бы и не попробовать?

    С того времени я смотрю на все Java Web-framework'и с презрением, Web надо писать на Rails и только на нём, в данном случае именно Rails является «best tool for the job». Просто потому что это KISS & DRY, что так сложно получить во всех Java web-framework'ах. Да, на работе приходится писать Web на Java, поэтому я выбрал меньшее из всех зол — Google Web Toolkit, и мне теперь не приходится встречаться со всеми этими JSP+JSTL/JSF/Velocity, кучкой XML-файлов для конфига всего и вся + какой-нибудь Struts/Spring MVC/Tapestry, добавить ещё модного AJAX: JavaScript + jQuery/Prototype. GWT позволяет писать только на Java, и не думать об остальном, включая JavaScript)

    Итак, вернёмся к Ruby. So why it matters?

    Имплементация.

    Ruby пошёл по правильному пути. С версии 1.9 в руках у разработчиков уже не интерпретатор, а виртуальная машина. Это даёт Ruby большое преимущество в производительности перед остальными интерпретируемыми динамическими языками, в частности — PHP. Интерпретатор никогда не будет быстрее виртуальной машины. Вторая радость — наличие JRuby & IronRuby. В Enterprise сейчас можно попасть двумя путями: придумать технологию которая будет looking as damn good as Java/.Net, или будет с ними очень тесно интегрироваться. Ruby выбрал второй путь и пока что делает на нём очень большие успехи. К слову JRuby-имплементация уже обгоняет практически во всех тестах MRI(Ruby 1.8.6), а недавно ещё и Rails Performance подтянули и единственным затыком сейчас является порт Oniguruma, RegExp-библиотека Ruby, которая активно используется в Rails.

    Возможности DSL & Meta-programming.

    Это одна из «the next big thing». Domain Specific Languages — это языки предметной области, созданные для решения каких-то конкретных задач. Так вот Ruby позволяет Вам за счёт своей структуры легко самому создавать такие языки. DSL в самом Ruby-мире тьма: ActiveRecord(всякие has_many :items), Rake, RSpec и многие-многие другие. Что же такое DSL и как оно выглядит? DSL может выглядить так в каком-либо бизнес-приложении, где надо пополнить счёт пользователю и отправить ему соответствующее уведомление.

    with Client «1234-567890» do
    pay 500
    send_mail :new_payment
    end

    Возьмём пример из Hpricot, HTML-парсера. Данный код загружает страничку, изменяет CSS-класс у ссылки и выводит результат на экран.

    doc = Hpricot(open(«redhanded.hobix.com/index.html»))
    (doc/«span.entryPermalink»).set(«class», «newLinks»)
    (doc/"#sidebar").remove
    puts doc

    Вообще тема DSL заслуживает отдельного рассмотрения, и наверное когда-нибудь я напишу об этом отдельную статью.

    Сообщество.

    Rails-community чем-то напоминает мне Индийскую культуру с тремя её столпами: традиции, единство и многообразие. Наверное только с Rails вместе продуктивно могут работать такие люди как Matz, why the lucky stiff, DHH, Martin Fowler соблюдая DRY & KISS традиции и двигаясь вперёд, преподнося всё новые и новые идеи. Именно после Rails стал популярен REST, именно после Ruby адепты Smalltalk возрадовались возрождению DSL и мета-программирования, именно Ruby & Rails дали мне глоток воздуха после Java. И безоговорочно Ruby & Rails это следующая эволюционная ступень после Java к мечте всех имперских программистов Lisp)

    На этом пока всё. Всем спасибо за внимание!
    Поделиться публикацией

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

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

      –3
      Опять и снова. Хватит уже.
        0
        Холиварщики минусуют, даже в карму срать полезли. Ну давайте минусуйте и пиздите на тему у кого писька больше.
        +3
        Мне, как Рубисту нравится читать такие статьи; PHP-шникам нравятся статьи преподносящие их любимую технологию над другими, и это нормально, это полезно.

        P.S. Но мне немного непонятен заголовок — ведь в статье речь идет в основном о Ruby/Java а в заголовке указано Ruby/PHP...
          –4
          Знаете что сказал бобук про рубистов? Приходите когда интерпретатор руби догонит по скорости питон :)
            0
            Согласен, по рукам :-)

            P.S. Давайте сделаем топик БЕЗ холивара :-).
              0
              А рубисты прямо толпятся в прихожей у Бобука - и мечтают к нему прийти? :)
                0
                Видимо были. И по его заявлениям те что остались теперь пишут на питоне :]
                  0
                  значит это были не настоящие рубисты ^_^
                +1
                Это все фигня. Я бы сказал: приходите когда руби догонит по популярности пхп.

                Я понимаю что руби отличный ооп язык, но я его синтаксис не знаю, и это мне не мешает...

                В России вообще руби-хостинга только 2-3, а работа для руби-программиста появляется раз в месяц
                0
                А мне нравится читать статьи со взвешенным анализом :)
                0
                > Web надо писать на Rails и только на нём, в данном случае именно Rails является "best tool for the job"

                Рыдалъ... Особенно над тем, что «Web надо писать». Вообще в статье не увидел ничего интересного. Очередное обсасывание известных фактов.
                  +2
                  Думал действительно будет горячий холивар на тему PHP vs ROR, а вижу - давайте любить ROR вместе... ;)
                    0
                    Хлеба и зрелищ? :-)
                    • НЛО прилетело и опубликовало эту надпись здесь
                    +1
                    Судя по количеству англоязычных терминов, автору, вероятно, было бы проще написАть статью целиком на английском.
                      +1
                      Замах на рубль - удар на копейку... Жаль.
                        0
                        ОМГ. Опять холиворщина. Давайте завязывать с темами типо "Почему х лучьше у". Нет плохих/хороших языков. Есть криворукие програмеры. На любом языке можно писать красиво, с умом. Каждый язык имеет сферу применения. Каждый язык имеет достоинства и недостатки. Есть "любовь" с первой строчки кода. Сравнивать языки программирования бестолку. Все-равно холиворим. Лучше обсуждать конкретные вещи про конкретный язык.
                        Хватит холиворить!!! Истины нет в сравнении языков нет и не предполагается.
                          0
                          Эээммм... как-бы так сказать, что в статье нет ничего холиварного, кроме заголовка? :)
                            0
                            Это я в общем. Накипело..... по мотивам последних 3х дней и "почему я спрыгнул с руби на пых"
                          0
                          начал за здравие кончил еще хуже
                            0
                            Много терминов, мало обоснования, статья узкоспециальная, да и в очередной раз кидать камнями в пхп как бы и не уместно...
                              0
                              Кстати, в заголовке должно быть doesn't =)
                              • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                аффтар явно не владеет PHP, если строка вида (doc/"span.entryPermalink").set("class", "newLinks") заставялет его писаться кипятком
                                • НЛО прилетело и опубликовало эту надпись здесь
                                  0
                                  нехватает кармы что бы пост написать...
                                  но возможно будет полезно знать как из rake запустить какой-либо контроллер.
                                  очень полезно, так как можно rake через крон вызывать, а все действия писать в контроллере.

                                  require 'rake'
                                  require 'rake/testtask'
                                  require 'rake/rdoctask'
                                  require "action_controller"
                                  require "action_controller/integration"


                                  require File.expand_path(File.dirname(__FILE__) + "/../../config/environment")
                                  namespace :mytasks do
                                  task :grab do
                                  app = ActionController::Integration::Session.new
                                  app.get("import/grabber/target")
                                  puts app.html_document.root.to_s
                                  end

                                  # другие задания ....
                                  end

                                  запускается из папки "ваш проект/lib/tasks" командой rake mytasks:grab
                                  информация по rake http://www.rubyroid.org/blog/rake-tutorial
                                    +1
                                    Классический случай - автору не нравится технология, которую он использует для создания проектов на работе. Может PHP здесь не виноват? Может просто тогда убедить свое руководство использовать Ruby?
                                    Я бы прислушался к такой статье, если бы втор собаку съел на Java, а потом еще пару собак на PHP и Ruby. Вот тогда пост был бы интересным, а так - пустые крики
                                      0
                                      Зохвавал достаточно на PHP, потом на Java (текущая работа), щас для себя изучаю Ruby.
                                      Так вот. Пока в голове каша - пох на чем пишешь. Когда порядок - тоже пох, но удобный инструмент все-таки подбираешь.
                                      Так вот. И Java и Ruby - одного уровня технологии. Хоть и разные по сути. Ruby - как талантливый малец, Java как умудреный старец.

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

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