про руби (программистское)
Apr. 8th, 2007 12:20 amЯ хотел бы написать, что проблема, которая стоит перед языком Руби и его сообществом - преодолеть засилие радостных идиотов, fanboys, которые наполнили собой и засоряют сообщество. Но я не уверен, что это действительно проблема. Да, мне лично, и многим другим (как аутсайдерам с точки зрения Руби, подобно мне, так и опытным разработчикам в нем) это не нравится и отталкивает. Но, с другой стороны, весь этот шум в конечном счете ответственен за популярность этого языка, за его растущую известность, за mindshare в программистской среде.
Обычное дело - когда о чем-то очень громко говорят, выходит, что говорят в основном дураки. А что поделать, если хочется быть услышанным?
В последнее время мне попались два примера.
What's Wrong With Ruby - мнение человека, которому не очень понравился Руби. В статье он перечисляет, что ему не понравилось и что показалось перехваленным в обычных описаниях Руби. При этом он сохраняет вполне корректный и умеренный тон, и отдает должное языку в том, что ему понравилось. Интересная статья, несколько эклектичная и недостаточно подробная, но все равно интересная. Я, например, разделяю неприязнь автора к "cutesy introductory tutorials", и особенно к знаменитому в сообществе Руби Why's (Poignant) Guide. Это ужасная на мой взгляд книга, полная несмешных вымученных шуток и картинок, идиотской болтовни, и на редкость неудачных собственно объяснений и примеров того, что касается самого языка.
Однако дело не столько в самой статье, сколько в комментариях под ней, в которых тут же собралось стадо fanboys - идиотов, ругающих автора последними словами за то, что он посмел посягнуть на их культовый язык или на культовую фигуру _why (автора вышеупомянутой книги). Их немало в комментариях к самой статье, и еще больше - в комментариях к записи _why на эту тему (как обычно в его стиле, зубодробительно несмешной). Почитайте - эти комментарии говорят за себя. Нет, я не думаю, что они характеризуют все сообщество пользователей Руби. Но они характеризуют то стадо fanboys, которое его замусорило.
Мне попадалось мнение, что идиоты кочуют от одного популярного языка или технологии к другим, и многие из тех, что сейчас пишут и говорят благоглупости о Руби, раньше молились на Джаву, когда та была "cool". Может, в этом что-то есть. Но что в языке или технологии или сообществе, уже существующем, притягивает такие массы? Я не могу себе представить, например, такой поток ответов на статью, критикующую Перл, ни сейчас, ни пять лет назад, ни десять. Или Питон, или Хаскель, или Лисп.
Второй пример - статья "Why was Rails only possible with Ruby?" на сайте O'Reilly. Точнее, не статья, а рецензия книги о Руби и Rails. В ней самой, и в довольно интересно потоке комментариев под ней, поражает совершенное детская наивность тех, кто упрямо утверждает, что в Руби есть какие-то мистические свойства, которые делают создание системы типа Rails возможным только в Руби - и их неспособность назвать эти свойства: после того, как им снова и снова объясняют, что вот эти и вот эти и вот эти свойства Руби, которые они считают уникальными, на самом деле есть и тут и тут и тут, и системы, подобные Rails, на самом деле есть, и в чем-то более интересные (Seaside в Смоллтоке часто упоминается в последнее время - я не успел пока о нем подробнее прочитать), после всего этого им остается только лепет насчет "интуитивности" и каких-то мистических откровений, которые превращают Руби в идеальнейший из языков. Пользуясь словами того же _why, "We can no longer truthfully call it a computer language. It is coderspeak. It is the language of our thoughts". И вот такой интеллектуально беспомощный фанатизм тоже, увы, весьма распостранен в сообществе Руби, насколько я могу судить, когда с ним сталкиваюсь. Впрочем, опять-таки, действительно ли "увы"? Может, сообществу Руби это нравится, и такая форма агрессивного самопиара его вполне устраивает.
В завершение замечу только, что все же собираюсь в ближайшее время изучить Руби, хоть и не в ближайшие пару месяцев, наверное. И процитирую понравившееся из комментариев к второй статье, среди аргументов и обвинений поклонников Руби, Питона, Джавы, Перла и других языков:
"Can't we all at least agree to hate PHP? ;)"
no subject
Date: 2007-04-07 09:39 pm (UTC)Отличный язык, идеален для своих задач. А что?
no subject
Date: 2007-04-07 09:54 pm (UTC)no subject
Date: 2007-04-07 10:55 pm (UTC)no subject
Date: 2007-04-08 08:11 am (UTC)http://nuclight.livejournal.com/107170.html (в коменнтах добавлено еще кучка таких тараканов, но в целом там крики вида "не тронь нашу священную корову")
no subject
Date: 2007-04-07 10:01 pm (UTC)Я не отрицаю что возможность лепить спагетти-код не думая, щедро предоставляемая Питоном и Руби, должна быть привлекательна для начинающих программистов.
no subject
Date: 2007-04-07 10:10 pm (UTC)Панталоны, фрак, жилет
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2007-04-07 11:05 pm (UTC) - Expand(no subject)
From:(no subject)
From: (Anonymous) - Date: 2007-04-07 11:50 pm (UTC) - Expand(no subject)
From:(no subject)
From: (Anonymous) - Date: 2007-04-08 12:03 am (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:(no subject)
From:(no subject)
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:...
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:в догонку
From:Re: в догонку
From:Re: в догонку
From:Re: в догонку
From:Re: в догонку
From:Re: в догонку
From:Re: в догонку
From:Re: в догонку
From:Re: в догонку
From:Re: в догонку
From:Re: в догонку
From:Re: в догонку
From:...
From:надо запретить
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:Re: Панталоны, фрак, жилет
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2007-04-08 01:01 am (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:ага, чистый FUD
From:Re: ага, чистый FUD
From:верно!
From:international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:...
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:...
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:Re: international obfuscated ruby contest - 2007
From:(no subject)
From:Amen
From:(no subject)
From:Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:Re: Вкрадчиво
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2007-04-08 12:44 am (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:извините, ответил не в ту ветку
From:(no subject)
From:let the holy war begin
From:I don't like your fashion business
From:no subject
Date: 2007-04-07 10:53 pm (UTC)Кстати, seaside с rails вовсе не подобные, разве только тем, что оба являются веб-фреймворками.
no subject
Date: 2007-04-07 11:01 pm (UTC)rails
From:no subject
Date: 2007-04-07 11:10 pm (UTC)no subject
Date: 2007-04-07 11:58 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:А-а-а-а! You made my day!
From:no subject
Date: 2007-04-07 11:32 pm (UTC)Теперь отпал последний аргумент в пользу знакомства с Руби.
no subject
Date: 2007-04-08 03:09 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-04-08 12:05 am (UTC)А учить Руби (блин, как прочёл первый раз неправильно, раби, так теперь из головы не выбьешь) после Перла, Питона и Смоллтока — взять (одолжить) книгу в самолёт, и готово.
Чем ближе к концу света, тем больше идиотов
Date: 2007-04-08 02:13 am (UTC)Поэтому люди
критиковализащищали PERL более или менее цивильно, а вот Руби повезло меньше.
Развитие демократии и увеличение возможностей для реализации своего права голоса приводит к ужасающей охлократии.
Общефилософски говоря...
no subject
Date: 2007-04-08 04:19 am (UTC)Очень интересная статья. Автор хорошо поставил вопрос: "попробуйте сказать что-нибудь хорошее про язык, который вы не любите". Сам он Рубиист, но честно и здраво рассказывает, что ему нравится в альтернативах. К сожалению, комментаторы свели всё к приколу, начав вспоминать про Кобол.
... Это была сумасшедшая рыба ...
no subject
Date: 2007-04-08 04:55 am (UTC)В Интернете соотношение идиотов к не идиотам ровно такое же, как и в реальной жизни, разве можно что-то поделать?
no subject
Date: 2007-04-08 07:13 am (UTC)Зато там совершенно чудесные фантасмагорические истории в картинках (!), за что я её и пересматриваю время от времени. Но тут уже, скорее, дело вкуса — вполне допускаю, что кому-то эти комиксы могут показаться тупыми и неуместными.
no subject
Date: 2007-04-08 10:38 am (UTC)no subject
Date: 2007-04-08 07:48 am (UTC)no subject
Date: 2007-04-08 08:05 am (UTC)no subject
Date: 2007-04-08 09:03 am (UTC)no subject
Date: 2007-04-08 10:36 am (UTC)меж тем, Вы, надеюсь, согласитесь, что scheme далек от железа.
также далеки от железа навинченые на С "прелести" С++: ООП (крайне чуждая железу концепция), перегрузка, templates.
Разобрались с отсутствием "консистентности" у С++?
По поводу "тупости" и "умности" -- мы ведь рассматриваем отсутствие и наличие высокоуровневых возможностей (first-class functions, GC, introspection, "vertical" hooks, OOP flavors) как определение "тупости" и "умности" соответственно (или, если угодно, выберем другие термины). Отсутствие у Вас "уверенности" в таком случае не несет никакого смысла.
Возвращаясь к теме:
Позвольте вопрос -- писали ли Вы на Руби? (не сочтите за грубость)
no subject
Date: 2007-04-08 01:47 pm (UTC)лисп много лучше.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:наверно, я ещё мала
From:Re: наверно, я ещё мала
From:максимально упрощенно...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:Re: наверно, я ещё мала
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:отвечаю на последний пост в Вашем журнале
From:Re: отвечаю на последний пост в Вашем журнале
From:зачем ерничать?
From:...
From:...
From:...
From:Re: отвечаю на последний пост в Вашем журнале
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:no subject
Date: 2007-04-08 04:05 pm (UTC)Книжка сама по себе не ужасная, но как пальцы гнет чувак!
И reddit.com, разумеется.
no subject
Date: 2007-04-08 09:24 pm (UTC)для лиспатриотичности можно просто эссе грэма почитать, то же рекурсивное Beating The Averages ;)
no subject
Date: 2007-04-08 04:24 pm (UTC)Language wars (Joel Spolsky)
http://www.joelonsoftware.com/items/2006/09/01.html
и реакция публики:
Has Joel Spolsky Jumped The Shark?
http://www.codinghorror.com/blog/archives/000679.html
Fear, Uncertainty, Doubt - loudthinking.com
http://www.loudthinking.com/arc/000596.html
no subject
Date: 2007-04-08 09:20 pm (UTC)Но вообще статья по ссылке обсуждалась на форуме МГУ недавно, с моим непосредственным участием, и вот тезисно основные типа возражения (при том, что сам я Руби не видел ни разу в жизни вообще):
1) Некорректная логика: предположим, что Руби даёт реальный прирост производительности, Руби является DL, рассмотрим основные свойства DL, ни одно из них не даёт такого уж большого прироста производительности (вложенный FAIL: недоказанный прирост производительности не является ложным, если что), следовательно, Руби не может давать прироста производительности.
2) Если вся статья направлена исключительно на обуздание базза вокруг Руби, то непонятно, зачем нужно так много слов.
3) Автор -- убеждённый жавапрограммер. Narrowness of experience leads to the narrowness of thought, как бы, и тут это очень явно видно.
Небольшое отступление: мне недавно показали ЭпплСкрипт. Его очень интересно читать, представляя у себя в голове трансляцию в Свой Любимый Язык. Особенно это интересно делать со строчкой "set bar to messages of foo whose read status is false". Мой испорченный сишной парадигмой моск немедленно сгенерил цикл. Обнаружив, что в результате получилось раз эдак в пять больше символов, чем в оригинале, цикл был заменён на foreach. Далее foreach был заменён на что-то вроде "messages.FindAll(delegate (Message m) { return !m.ReadStatus; });", чем я удовлетворился, ибо получился почти семантический эквивалент, а отсутствие в шарпе паскалевского using (someObject) (расширение scope до полей и методов объекта), совмещённого с вызовом делегата, я вполне могу пережить.
Это я к тому, что язык программирования накладывает крайне сильный отпечаток на способ мышления программиста. Мой пример очень хорошо показывает, как язык программирования (или его частоиспользуемый subset) может приводить к уменьшению эффективности программирования ещё на этапе обдумывания кода: ещё до того, как что-нибудь было напечатано, в голове программиста (меня) образовались какие-то совершенно левые семантические конструкты вроде цикла, переменной цикла и временного массива.
Есть подозрение, что если Руби похожа на питон и третий шарп, причём Стандартные Библиотеки написаны в правильном стиле (forcing newcomers to conform), то эффективность программирования может действительно вырасти в разы, чисто за счёт уничтожения левой семантики. Автор же такую возможность просто не рассматривает, потому что даже не представляет, что она существует.
вопрос к avva
Date: 2007-04-09 10:27 pm (UTC)Анатолий, скажите, неужто Вы все это безобразие читаете? =)
Re: вопрос к avva
Date: 2007-04-09 10:41 pm (UTC)Re: вопрос к avva
From:Re: вопрос к avva
From:Re: вопрос к avva
From:Re: вопрос к avva
From:no subject
Date: 2007-04-10 11:09 am (UTC)Согласен. Для этого и придумали различного рода SWIG'и. Хотя результат его работы не всегда удолетворителен. Руками всё же красивее, хоть и дольше.
Хорошо если надо создавать переходный уровень к сишным функциям, параметры и возвращаемые данные которых отображаются на конструкции языка тривиальным образом - как отображаются сишные целые числа на целые числа, сложнее когда надо отображать сишные строчки на строчки иного языка, совсем плохо когда надо отображать сишные структуры на объекты иного языка и обратно, и, наконец, задача создания переходного уровня становится окончательно непростой в случае когда сишная библиотека манипулирует структурами со сложно взаимосвязами, как по данным так и по времени сушествования.
Не скажу про другие языки, но в Ruby всё, что Вы описали давно сделано.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/README.EXT?revision=11708&view=markup
К примеру, интеграция языка класса того же Руби с Xlib представляют собой совсем не такую тривиальную задачу что бы от нее можно было отмахиваться как от не заслуживающей внимания.
Нашёл два проекта на эту тема
http://ruby-xlib-wrap.sourceforge.net/
http://www.moriq.com/ruby/xlib/
Пользоваться не приходилось.
no subject
Date: 2007-04-10 11:13 am (UTC)гораздо разумнее разговаривать с X-сервером по сетевому протоколу, как делает, к примеру, CLX.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-04-12 06:46 pm (UTC)no subject
Date: 2007-04-24 10:55 am (UTC)могу коротко сказать, почему такое невозможно в других языках. первое - динамическое определение всего, включая классы и методы в них. да - такое есть в других дин. языках, включая смолток и перл, но во-первых я не уверен, что настолько широкие возможности по переопределению, во вторых - руби при этом сохраняет классический синтаксис эйфеля. если вы знаете, как ооп делается в перле, знаете синтаксис смолтока - то вы знаете разницу
т.е. после возможности динамического определения классов, методов, видимости, наследования следующая вещь - очень удобный синтаксис, использующий идеи из многих других языков. один пример - операции определяются пользователем, при этом из определений +-*/ автоматом создаются определения += -= *= и т.д.
другой пример - очень удобный оператор case был описан в "этюдах для порграммистов". единственный язык, где он реализован - ruby. можно написать что угодно в выбирающем выражении и в выпражении для каждого ваврианта, эти два значения вычисляются и сопоставляются операцией =~~ которую может определить пользователь для любого класса
вот это сочентание динамического ООп и удобного синтаксиса и есть его killer features
а я сейчас предпочитаю хаскел. руби всё же удобен для небольших задач, для связи. большая программа требует большой дисциплины