четверг, 29 сентября 2011 г.

[prog.flame] Еще на тему спекуляций вокруг сравнения языков программирования

Небольшое добавление к разговору о спекуляциях вокруг языков программирования, начатом в комментариях к одной из предыдущих заметок. Вот на какой момент я бы хотел обратить внимание: мне на глаза практически не попадались серьезные сравнения языков между собой применительно к какой-нибудь серьезной задаче. То, что приходилось видеть – это либо какие-то мелкие эксперименты (на программах не более 50KLOC, а то и меньше), либо же последствия т.н. big rewritting, когда какую-то систему переписывали с нуля на другом языке.

Понятное дело, что мелкие эксперименты вообще не репрезентативны. То, что 50 студентов на Ruby завершили мелкую задачку в среднем на 15% быстрее, чем другие 50 студентов на Java, и на 30% быстрее, чем еще 20 студентов на C++ – это несерьезно. Поскольку тратили он на разработку по 12-20 часов каждый. Что это такое по сравнении с разработками, в которых только фаза проектирования, в которой задействованы отнюдь не студенты, может растягиваться на месяцы?

Со случаями big rewritting так же все не столь однозначно. Потому, что:

  • во-первых, при переписывании резко сокращаются затраты на первичное проектирование – ведь значительная часть работы уже была выполнена во время первой реализации, а теперь ее результаты переиспользуются;
  • во-вторых, переписыванием занимаются, как правило, уже другие люди. Которые, опять же, могут опираться на опыт предшественников;
  • в-третьих, переписывание происходит уже на несколько ином уровне развития технологии. Инструменты не стоят на месте. И если где-то раньше разработчикам пришлось городить собственный огород, то сейчас можно будет воспользоваться уже готовыми чужими продуктами.

Кроме того, такие вещи, как big rewritting встречаются не так уж и часто. Иногда и не давая ожидаемого результата. И, в любом случае, являются очень дорогими мероприятиями. Поэтому-то чаще дешевле сопровождать старую систему, чем переписать ее с нуля.

К чему я это все? А к тому, что объективные сравнения преимуществ одного языка над другим еще нужно поискать. Вместо этого мы, программисты, пытаемся придать видимость объективности нашим собственным пристрастиям. Мол, если мне удобнее что-то делать на C++, то C++ в этих задачах лучше. Хотя кто-то может с точно такой же уверенностью утверждать подобное для Java или Haskell.

Единственный более-менее объективный критерий – это статистика использования того или иного языка в различных нишах. Например, так уж исторически сложилось, что COBOL-а и Java в махровом Ынтерпрайзе больше. А C++ больше на десктопе (особенно на WIntel-е). А Lisp-а в форумных флеймах ;) Значит ли это, что невозможно проникновение языков в “чужие” ниши? Отнюдь. И на Java пишут десктопный софт, а на C/C++ критически важные задачи для банков.

Так что возможно, в принципе, все. Другое дело, в что это обойдется. Практика показывает, что нарушение традиций обходится недешево (народная мудрость о мочеиспускании против ветра возникла не на пустом месте). И вот с этим-то приходится считаться. А разговоры о том, что Haskell позволяет сделать что-то лучше, чем C++ (Java, C#, …) – это все форумный трындеж. Посему хочу в завершении процитировать комментарий ув.тов.Леши Сырникова:

На мой взгляд, языки надо сравнивать исходя из потребностей и целей программиста, который на них пишет и задач проекта. Хочешь зарабатывать бабло - есть привязанные к одной платформе и произовдителю Java и C#, хочешь кроссплатформенное решение - C++. Нужен веб - есть php и RoR (первый более стабилен в API, второй позволяет проще писать крупные проекты) плюс полугиковский Django. Хочешь чего-то написать для себя - выбирай, что нравится.

Все спекуляции на тему сравнения языков в таком случае становятся "поводом поболтать". Нет смысла сравнивать D и C#, они в настоящее время для разных ниш, для разных целей, удовлетворяют разные потребности.

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

17 комментариев:

имя комментирует...

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

бугага

начнем с того, про что я могу довольно точно сказать -- почему *лично* я участвую в языковых спорах

это нескучный способ сравнительного анализа языков; он также стимулирует не лениться и узнавать новое (в т.ч. читать пдф-ки), а так же взглянуть на известное под новыми углами, а также в контексте чужого опыта

моя цель -- стать специалистом в области сравнительного анализа языков (на самом деле цель может быть и больше); для тех, кто такой цели не имеет -- поддержка неиспользуемых знаний в актуальном состоянии тоже может быть полезной -- а серьезные люди, по-моему, должны *в собственных интересах* подталкивать процесс эволюции ЯП в нужную им сторону, а не просто ждать, когда цари-батюшки спустят какое-то решение сверху (чтобы потом негодовать по его поводу, гы-гы); а для этого как минимум надо разбираться в своих потребностях и в общем ландшафте языкостроения

собственно, формулировка своих претензий к языку и своих пожеланий к нему (в т.ч. таких, которые видны в твоем блоге) являются вкладом в процесс эволюции ЯП

дальше -- по-моему, ты зря пытаешься перевести вопрос качества языков в субъективную плоскость; хотя оценка качества безусловно зависит от субъекта, но возможность создать здесь (почти) объективно полезные вещи весьма велика

_____________________________________

как меня задолбал блогстоп! особенно вот это маленькое окошко "Оставьте комментарий", в котором удобно помещается разве что "всем чмоки в этом чяте"

при этом в режиме "юзер цсс" оно становится у меня еще Уже

(ты бы не мог его расширить на всю ширину страницы? че-то типа style="width:100%" )

ввод капчи тоже порядком мешает -- и выдать тупняковый пост мне как-то не хочется, а хороший требует усилий

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

так что может наберусь решимости и сделаю пост


P.S. блогСТОП еще любит выдавать ошибки постинга после *успешной* авторизации (выглядят они заявлением про какие-то проблемы с куками), при этом теряя *весь* набранный мной пост; я вообще поражаюсь, как можно было сделать столь садистский сайт, так что я думаю, можно простить мое молчание в комментариях

З.Ы.Ы. а если мне будут приходить копии комментов на гмейл, то я смогу отвечать на них через почту, чтобы при этом они попадали в комменты?

Евгений Охотников комментирует...

@имя:

По поводу удобства использования blogspot-а. Не уверен, что я могу назначить свой CSS для страницы с комментариями. По поводу почты -- наверняка так нельзя.

Капчу если отменить, то забабахаешься затем спамовые камменты чистить. Тем более, что если при работе в браузере быть залогининым в gmail или blogger, то мне капчу не предлагают вводить.

Размер окошка для ввода коммента может менять свой размер (по крайней мере в Chrome).

имя комментирует...

я всегда тут залогинен в gmail, и раньше когда-то читал, что для удаления капчи мне надо сделать свой блог и хотя бы один свой пост в нем -- а я, в отличие от чукчи, читатель в основном :-)

в принципе, есть блогопостерский софт, который будет работать без капчи, так что проблема окошка так тоже может решиться -- но блин, наваять столь враждебный к пользователю сайт -- это особое искусство

_________________________

ладно, продолжу про языки

> не отделяет личные предпочтения от возможностей языка

возможности языка должны быть такими, чтобы там могли быть реализованны *любые* личные предпочтения, удобно реализованы вменяемые личные предпочтения, и очень удобно реализованы типичные личные предпочтения

или, в ответ на старую тему -- качество языка на 80% состоит из расширяемости-и-удобных-гайдлайнов-на-расширение

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

Евгений Охотников комментирует...

@имя:

Капчу отключил, посмотрю, к чему это приведет.

По теме заметки отвечу попозже.

имя комментирует...

> Капчу отключил, посмотрю, к чему это приведет.

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

http://compare-programming-languages.blogspot.com/

там кстати сделана возможность писать нормальный программный код в комментах, НО показывается правильно это не везде, а только на страничке поста

можешь глянуть

имя комментирует...

даже больше -- если, допустим, ты уверен, что у тебя будут в комментах писать код только на с/с++, то можно прикрутить раскрашивалку кода

имя комментирует...

насчет спамовых комментов -- в лазя в интрефейсе блоггера я заметил новую фичу по автоматическому отсеву спама из комментов, как работает -- не знаю

и пока что на других блогах мне продолжают предлагать капчу

Евгений Охотников комментирует...

@имя:

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

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

Конечно, языки более универсальные и многократно более сложные инструменты. В этом, видимо, все и дело. Освоение языка так, чтобы он "идеально лег в руку" -- задача не простая и не быстрая. К тому же особенности мышления разных людей и даже их эстетические пристрастия ведут к тому, что один и тот же язык кем-то воспринимается "на ура", а кому-то категорически не нравится. Скажем, я не могу понять, почему паскалеподобные языки вызывают неприятие из-за begin/end. Тем не менее, такой факт имеет место быть :(

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

А дальше больше -- поскольку кто-то умело пользуется языком X, то он стремиться все делать на X. При определенных обстоятельствах у него это получается. Например, сделать систему работающую в режиме 24/7 на C++. Или систему моделирования аппаратуры на Haskell. Это означает всего лишь то, что в данных конкретных случаях у конкретных людей получилось. Но не значит, что получится в других обстоятельствах у других разработчиков. Тем не менее, авторы успешных систем будут упорно пропагандировать именно свой подход -- C++, Lisp, Haskell или еще что-нибудь.

имя комментирует...

> Скажем, я не могу понять, почему паскалеподобные языки вызывают неприятие из-за begin/end.

это синтаксический шум

приемлемый вариант был бы типа if ... then ... else ... end; он мне визуально нравится больше сишного, но когда его становится много (в смысле, он употребляется часто), то слово then начинает шуметь, и хочется что-то вообще типа

if ... ;; ... ;; ... end

Евгений Охотников комментирует...

@имя:

>это синтаксический шум

Ну вот видишь, насколько все субъективно. Для меня begin/end шумом не являются.

Rustam комментирует...

@Евгений

Я согласен с тем что важность языков фанатами часто преувеличивается, но с другой стороны все-таки в среднем программист на хаскеле будет продуктивней программиста на ассемблере :)

Евгений Охотников комментирует...

@Rustam:

А это смотря на каких задачах ;)

Rustam комментирует...

@Евгений

Ну я же написал в среднем :)

Хотя если брать только ЯВУ все уже становится не так однозначно, все-таки, по моему тот же Сергей Зефиров не прав утверждая, что в ЯВУ есть разница в уровне на порядок.

Евгений Охотников комментирует...

@Rustam:

>Хотя если брать только ЯВУ все уже становится не так однозначно, все-таки, по моему тот же Сергей Зефиров не прав утверждая, что в ЯВУ есть разница в уровне на порядок.

Я думаю, что здесь опять же субъективность сильно влияет. Конекретный человек может относиться к какому-то ЯП предвзято, с багажом каких-то стереотипов. Что не позволит ему нормально использовать этот язык. Тогда как перейдя на другой, не имея предвзятости, он действительно может увеличить свою продуктивность чуть ли не на порядок.

Rustam комментирует...

@Евгений

Да согласен, субъективность сильнее всего и влияет.

Да кстати тут как раз читаю статейку http://queue.acm.org/detail.cfm?id=2038036 наоборот за OCaml :)
Все-таки настоящие функциональщики вообще очень шустро пишут код:
Six months and 80,000 lines of code later :)

Евгений Охотников комментирует...

@Rustam:

80K строк за 6 месяцев в одно рыло... Таким людям либо абсолютно пох на чем писать -- ибо гении. Либо такую х*ню пишут, что пох на чем писать :)

Не серьезно. У меня было пару продуктивных лет, когда я писал по 60K строк на C++. А ведь код на OCaml-е лаконичнее плюсового. Это значит, что человек написал где-то эквивалент 100K C++строк за полгода. Монстер.

Rustam комментирует...

@Евгений

Да у меня максимум тоже примерно те же 80000 строк, но на C++ и за год.
На OCaml, по моему достаточно куцому опыту, код в среднем в два раза лаконичней, но времени на написание тратится примерно одинаково. Преимущества проявляются в том что требуется гораздо меньше отладки, и при сопровождении, код который написал даже пару лет назад, и почти без комментариев, гораздо легче воспринимается чем тоже самое но на C++, тут компактность рулит.