?

Log in

черепахи всю дорогу - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

черепахи всю дорогу [мар. 28, 2009|07:45 pm]
Anatoly Vorobey
Много лет назад я заметил, что есть языки программирования, поклонники которых часто считают их не просто продуктивными, а волшебно-продуктивными - позволяющими им писать, скажем, на порядок больше полезного кода, чем за то же время на других языках, которые они хорошо знают.

У меня нет устойчивого мнения о том, насколько эти утверждения верны; и даже в случае, когда они верны, я подозреваю, что они не универсальны. Наверное, разным людям лучше подходят разные языки.

Тем не менее, само существование такого рода утверждений интересно и заслуживает внимания. У практически каждого языка найдутся поклонники, но далеко не в каждом случае они будут хвалить именно невероятную, волшебную продуктивность этого языка в сравнении с другими. Среди языков, о которых именно так говорят, мне попадались Forth, SmallTalk, Lisp... может быть, еще Хаскель, но на самом деле в этом последнем не уверен (он все же слишком академичен еще, так что информация о его продуктивности в реальном мире слишком шумная).

Я обратил внимание на то, что языки, о которых так говорят, оказываются как раз языками "одной идеи", доведенной до абсолюта, одной центральной парадигмы, которой все остальное подчиняется.

* SmallTalk доводит идею "все - объект" до абсолюта;
* Forth доводит идею "все - макро" до абсолюта;
* Lisp доводит идею "все - список, а код == данным" до абсолюта.

По-моему, это совпадение не случайно.
СсылкаОтветить

Comments:
[User Picture]From: gaus
2009-03-28 05:29 pm
По-моему, это совпадение не случайно.

Не случайно, тоталитарные языки, и поклонники - тоталитарные сектанты.

:)
(Ответить) (Thread)
[User Picture]From: cmm
2009-03-28 05:46 pm
в каждой шутке.
(Ответить) (Parent) (Thread)
[User Picture]From: gaz_v_pol
2009-03-28 06:13 pm
Вообще-то, самый лучший язык - это Maple... Поскольку доводит идею "всё, даже приближённое, может быть описано "в буковках" - до абсолюта!!
(Ответить) (Thread)
From: (Anonymous)
2009-03-29 07:04 am
20 лет назад я не мог заслать 1.0 как параметр в фортрановскую подпрогамму, потому что она меняла внутри соответствующий параметр (в фортране все передается как ссылка) без того, чтобы 1.0 не превращался в 2.0.

Если уж не все, то по крайней мере, "все что передается как параметр"
(Ответить) (Parent) (Thread)
[User Picture]From: raindog_2
2009-03-28 06:37 pm
Еще одна деталь - при том, что у каждого языка небольшая группа ярых сторонников, ни один из них не стал мейнстримовым. В частности, почему так (не) получилось со Смолтоком - мне не совсем понятно. Вроде бы, были все предпосылки. Я спрашивал об этом у Василия Б., он говорит, из за политики лицензирования и других "социальных факторов".

Возможно, идеология Perl более здоровая. Мир вокруг нас (и задачи, которые нужно рещать) - это mess, в нем нет "главной идеи", поэтому и язык должен быть messy :)

***

Кстати, еще один "одно-концептый" язык: Tcl - "everything is a string". Ну, почти everything. В начале-середине 90-х Tcl - это было круто, особенно в связке с Tk.
(Ответить) (Thread)
[User Picture]From: onodera
2009-03-28 07:35 pm
Тикль из-за своей концепции и пострадал. Пока от неё в восьмой, кажется, версии не отказались на уровне реализации, он заметно уступал по скорости работы другим скриптовым языкам.
(Ответить) (Parent) (Thread)
[User Picture]From: lee_bey
2009-03-28 06:41 pm
Э-э-э-э... а Perl ???
(Ответить) (Thread)
[User Picture]From: avva
2009-03-28 08:13 pm
Пять лет назад я бы в этот список добавил и Perl, и назвал бы его интересным исключением, в том смысле, что он не язык одной идеи, но вместе с тем тоже исключительно продуктивен.

Сейчас мне кажется, что такое ощущение от перла 10 и даже еще 5 лет назад было во многом вызвано тем, что его знатоки сравнивали его в основном с C++/Java, от которых к нему "убежали". Сейчас, когда динамические языки отвоевали свою нишу, Питон с Руби заматерели и широко используются наряду с Перлом, Lua напирает вслед за ними, да и JS стал серьезным языком - мне кажется, трудно утверждать, что Перл на порядок их продуктивнее; все равно можно считать что лучше, но не на порядок.

(Ответить) (Parent) (Thread) (Развернуть)
(Удалённый комментарий)
[User Picture]From: shurz
2009-03-28 06:43 pm
tcl - "все строка" до абсолюта, но мне не попадались подобные утверждения про него =)
(Ответить) (Thread)
[User Picture]From: baramin
2009-03-28 07:37 pm
Простите за off-top. На аватаре проходные дворы около Сенной? :)
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: cema
2009-03-28 07:25 pm
Только что я был на конференции по лиспу. Народ там горевал, что не все ещё поняли, какой лисп замечательный язык. Но при этом вполне себе говорили и о хаскеле, и о том, чего можно позаимствовать из "практических" языков, даже из джавы (скорее из JVM, но неважно).

В лиспе, обрати внимание, ты перечислил две идеи: 1. все список; 2. код имеет вид данных. Из второй, кстати, получаются замечательные лисповые макросы. Как бы язык преобразования синтаксических деревьев.

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

Мелкая придирка. Если в лиспе "всё список", то в форте тогда "всё в стеке". Макро уже отсюда вытекает (как и в лиспе из "код имеет формат данных").
(Ответить) (Thread)
[User Picture]From: smilga
2009-03-28 08:31 pm
«Всё список» — это попросту неверно, на самом деле. В Смолтоке действительно «всё объект», т. е. штука, которой можно послать сообщение. В Лиспе есть дофига неатомарных объектов, недопустимых в качестве аргументов CAR и CDR.

Мне кажется, у Лиспа основных идей три: синтаксическая абстракция (с кодом можно работать как с данными), функции как объекты первого класса (лямбда) и интерактивная среда. Если вытащить первое, то получится, например, Смолток, если второе — ТеХ. Без интерактивной среды бывают всякие штуки типа WCL или Stalin-а, которые скорее Лисп, но не совсем.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: janatem
2009-03-28 07:28 pm
У меня дежа-вю: совсем недавно я читал (или думал?!) в точности про это.

Но вообще "экстремальные" языки -- это правильно. Если есть задачи (пусть даже этих задач 1% или меньше), которые очень продуктивно и/или эффективно решаются каким-то особым языком, то такой язык, очевидно, имеет право на существование. Что, впрочем, не отменяет потребности в "универсальном" языке.

Удобно дома иметь набор отверток разного размера. Однако в походных условиях лучше одна со сменными насадками.
(Ответить) (Thread)
[User Picture]From: roman_kr
2009-03-28 07:28 pm

re: Matlab...

Matlab!
(Ответить) (Thread)
[User Picture]From: ltwood
2009-03-28 07:54 pm

Re: Matlab...

Все на свете — матрицы комплексных чисел? ;))
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: baramin
2009-03-28 07:52 pm
Особое извращение - все есть boost и template. Эти опаснее всех :)
(Ответить) (Thread)
[User Picture]From: javax_slr
2009-03-28 07:57 pm
Что такое продуктивный язык? Быстро писать целый продукт? Фичер в готовом продукте?
Алгоритм? Веб сайт? Бизнес логику? Инфраструктуру?
Быстро только писать или добавлять код в готовый продукт?

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

(Ответить) (Thread)
[User Picture]From: trurle
2009-03-28 08:07 pm

Производтсву нужен простой язык, расчитанный на то, что бы средний программист мог понять то, что написал другой средний программист.
Зато у программистов есть другие интересы: job security и skill scarcity.
(Ответить) (Parent) (Thread)
[User Picture]From: pingva
2009-03-28 08:09 pm
есть еще как минимум три языка, про которые я такое часто слышу: perl, erlang и ruby.

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

у меня нет сомнений, что для определенных задач некоторые языки могут быть в разы (поостерегусь говорить "на порядки" =)) эффективнее "универсальных" "индустриальных" языков.
(Ответить) (Thread)
[User Picture]From: avva
2009-03-28 08:12 pm
перл как раз не вписывается по-моему - пишу об этом выше; а руби разве не "смоллток в процедуральной записи для бедных"? *ducks* :-)

(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: iratus
2009-03-28 10:08 pm
Единственный продуктивный язык, который я знаю - это чистый С. Ну или с извращениями, то Objective C. Все остальные - это так...
(Ответить) (Thread)
[User Picture]From: kouzdra
2009-03-28 10:17 pm
Довольно продуктивный язык это ML (в инкарнации OCaml) - но в нем нет вообще никакой парадингмы. Просто набор удачно найденных конструкций и неплохой дизайн (в Haskell на самом деле "парадигмы" тоже нет - но это менее очевидно - в него проще вчитать какую-нибудь "концепцию")
(Ответить) (Thread)
From: captain_tylor
2009-03-29 01:39 am
"Все функция". Он как раз самый монопарадигмальный.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: eterevsky
2009-03-28 11:08 pm
(Ответить) (Thread)
[User Picture]From: cema
2009-03-30 03:44 am
(Ответить) (Parent) (Thread)
[User Picture]From: pigmeich
2009-03-28 11:28 pm
Кстати, есть мнение, что это продуктивность относится к throw-away коду. То есть всякя документация, архитектура и вылавливание в них багов занимают столько, что от языка мало что зависит.

А Питон прикольный, ага.
(Ответить) (Thread)
[User Picture]From: averros
2009-03-29 02:38 am
Новые поколения упорно наступают на старые грабли.

Обычно стрононники идейно чистых языков - полу-аутистичные нёрды, которые не понимают, что профессиональные программисты озабочены не столько техникой кодирования (это упражнение для пальцев - на любом языке), сколько психологической стороной (как делать код быстрее и с меньшим количеством ошибок - и как сделать так, чтобы этот код было легко понимать и использовать другим людям в команде), планированием (как сделать так, чтобы работающий продукт был отгружен вовремя), и экономикой.
(Ответить) (Thread)
[User Picture]From: onodera
2009-03-29 05:46 am
Боюсь, что даже не все профессиональные программисты это понимают, особенно те, которые работают в компаниях, где их братия исчисляется штуками, а не командами. Там у них зачастую нет руководителя, который пресекает все попытки написать новую программу на новом cool языке, потому что поддерживать её никто, кроме них, не сможет. Он-то и озабочен больше самих программистов перечисленными Вами проблемами.
(Ответить) (Parent) (Thread)
[User Picture]From: meshko
2009-03-29 03:52 am

приземлю слегка

С тех пор как я стал работать программистом, охота такие споры вести у меня пропала. И вообще я заметил, что на мою продуктивность реально влияет только одно -- IDE. Вот Elcipse, например, несусветное говно. А Visual Studio -- вполне приличный продукт. И в результате я на C# пишу в полтора раза быстрее, чем на Java, при том, что как язык последняя мне более симпатична и библиотеки её я знаю гораздо лучше, чем .NET.
(Ответить) (Thread)
[User Picture]From: kuchin
2009-03-29 04:54 am

Re: приземлю слегка

А можно основные пункты тезиса "Eclipse говно, VS приличный продукт"? Потому как я использую оба (правда, Eclipse не для Java, а для PHP и Python) и меня оба вполне устраивают. Хотелось бы понять :)
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: meshko
2009-03-29 04:07 am
Понял, что написал комментарий не совсем по теме поста.
Да, наверное это наличие явной идеологии в языке привлекает к нему людей определенного типа, т.е. таких, которые вообще любят идеологию и без неё не могут.
Я за собой это часто замечаю и даже помню момент, когда осознал, что это есть и с этим надо бороться, по крайней мере в технических областях: ещё в институте я слышал, как один студент объяснял другому, что такое Юникс. Он начал с такой фразы: "everything on Unix is a process". Услышав это, я поймал себя на мысли, типа "ух ты, как он это круто сформулировал". То есть вот человек (я) даже полную чушь готов хавать, лишь бы было просто и понятно и звучало умно. Потому что нужна Идея.
(Ответить) (Thread)
[User Picture]From: grur
2009-03-29 04:55 am
Эта волшебная продуктивность действительно существует, но является артефактом процесса обучения. Когда начинаешь писать на языке "одной идеи", интенсивность открытия красивых новых идей и сопутствующие положительные эмоции приводят к значительному росту мотивации и работоспособности. Я у себя замечал это несколько раз - в том числе с Хаскелем и с Перлом. В этом смысле, Перл для меня тоже был языком одной идеи - "все можно сделать регулярными выражениями".
(Ответить) (Thread)
From: lazyreader
2009-03-29 01:24 pm
Да нет, не всегда - фанаты питона совершенно фанатичны, однако нельзя сказать, что это язык одной идеи. Лет десять назад, правда, пытались подавать его как "язык функционального программирования", но, увидев, что на нём ничего особенно такого нет, быстро притворились, что никто такого не говорил. Ван Россум даже, наоборот, сгоряча захотел было выкинуть lambda из языка, обосновывая это новым лозунгом "Python - не язык функционального программирования".

Горячих питонистов почему-то приводит в экстаз то, что, по-моему, является как раз недостатком - отсутствие объявлений, прототипов, и всеобщее динамическое связывание имён.
(Ответить) (Thread)
[User Picture]From: avva
2009-03-29 01:29 pm
они фанатичны, но, по моему опыту, они не утверждают, что на питоне в 10 раз быстрее, продуктивнее, bug-free выходит, чем на других языках. Они скорее подчеркивают эстетику языка, и то, что его естественность и красота позволяют им работать лучше (но не на порядок).
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: alex_inside
2009-03-29 04:48 pm
Грубо говоря плюсы их — в динамической типизации?

По идее же JavaScript тоже из этих языков, не?
(Ответить) (Thread)
From: (Anonymous)
2009-03-29 06:10 pm

It's not that they just 'think' productivity is high, though

well, high productivity of some languages is not just a claim, as your wording suggests. I'd say it's a fact well-observed in a experiments with coders.

Luckily, one does not need to translate the articles for you, so here is a reference: Peter Norvig.

    In the October 1999 Communications of the ACM Lutz Prechelt had an interesting article entitled Comparing Java vs. C/C++ Efficiency Issues to Interpersonal Issues which asked 38 programmers to implement versions of a program in C, C++, or Java. The conclusions showed that Java was 3 or 4 times slower than C or C++, but that the variance between programmers was larger than the variance between languages, suggesting that one might want to spend more time on training programmers rather than arguing over language choice. (Or, suggesting that you should hire the good programmers and avoid the bad ones.) The variance for Java was lower than for C or C++. (Cynics could say that Java forces you to write uniformly slow programs.) I applaud this line of work, and hope that more studies of this kind will be done.

    It turns out my hopes were answered. First, Prechelt published another article that covers Tcl, Python, Perl, and Rexx. Also, Ron Garret (nee Erann Gat) did a follow-up study in which he asked programmers to write Prechelt's test program in Lisp. His results show that the resulting Lisp programs ran faster on average than C, C++ or Java programs (although the fastest Lisp program was not as fast as the fastest C program), and that Lisp programs took less development time than the other languages.

    I did not participate in the study, but after I saw it, I wrote my version in Lisp. It took me about 2 hours (compared to a range of 2 to 8.5 hours for the other Lisp programmers in the study, 3 to 25 for C/C++ and 4 to 63 for Java) and I ended up with 45 non-comment non-blank lines (compared with a range of 51 to 182 for Lisp, and 107 to 614 for the other languages). (That means that some Java programmer was spending 13 lines and 84 minutes to provide the functionality of each line of my Lisp program.)

This text is followed by the script.
Please click on the links to get to the two original publications (the second one comparing productivity and code quality in a number of languages including modern scripting ones is better) for the detailed results and the test problem.

Actually, the test problem is quite simple, and there is a link to the test datasets and the full dataset used to estimate correctness of the solution. You (or any readers of this blog) could try their hand at it, in any of their favourite languages: http://norvig.com/java-lisp.html
(Ответить) (Thread)
[User Picture]From: cema
2009-03-30 03:48 am
Yeah, I just read it when preparing (mentally) for the conference, about two weeks ago. Nice lisp advocacy read.
(Ответить) (Parent) (Thread)
[User Picture]From: ltwood
2009-03-30 06:13 pm
Очень странно, что никто не упомянул GC, который повышает продуктивность очень сильно, но который одновременно вряд ли можно считать частью какого-либо языка. Соответственно, надо было бы вычитать из повышения производительности долю, пришедшуюся на GC — если он есть и если сравнение идет с языками без оного.
(Ответить) (Thread)
[User Picture]From: cmm
2009-03-30 06:52 pm
Очень странно, что никто не упомянул GC, который повышает продуктивность очень сильно, но который одновременно вряд ли можно считать частью какого-либо языка.

это как?
(Ответить) (Parent) (Thread) (Развернуть)