четверг, 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#, они в настоящее время для разных ниш, для разных целей, удовлетворяют разные потребности.

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

Отправить комментарий