черепахи всю дорогу
Mar. 28th, 2009 07:45 pmМного лет назад я заметил, что есть языки программирования, поклонники которых часто считают их не просто продуктивными, а волшебно-продуктивными - позволяющими им писать, скажем, на порядок больше полезного кода, чем за то же время на других языках, которые они хорошо знают.
У меня нет устойчивого мнения о том, насколько эти утверждения верны; и даже в случае, когда они верны, я подозреваю, что они не универсальны. Наверное, разным людям лучше подходят разные языки.
Тем не менее, само существование такого рода утверждений интересно и заслуживает внимания. У практически каждого языка найдутся поклонники, но далеко не в каждом случае они будут хвалить именно невероятную, волшебную продуктивность этого языка в сравнении с другими. Среди языков, о которых именно так говорят, мне попадались Forth, SmallTalk, Lisp... может быть, еще Хаскель, но на самом деле в этом последнем не уверен (он все же слишком академичен еще, так что информация о его продуктивности в реальном мире слишком шумная).
Я обратил внимание на то, что языки, о которых так говорят, оказываются как раз языками "одной идеи", доведенной до абсолюта, одной центральной парадигмы, которой все остальное подчиняется.
* SmallTalk доводит идею "все - объект" до абсолюта;
* Forth доводит идею "все - макро" до абсолюта;
* Lisp доводит идею "все - список, а код == данным" до абсолюта.
По-моему, это совпадение не случайно.
У меня нет устойчивого мнения о том, насколько эти утверждения верны; и даже в случае, когда они верны, я подозреваю, что они не универсальны. Наверное, разным людям лучше подходят разные языки.
Тем не менее, само существование такого рода утверждений интересно и заслуживает внимания. У практически каждого языка найдутся поклонники, но далеко не в каждом случае они будут хвалить именно невероятную, волшебную продуктивность этого языка в сравнении с другими. Среди языков, о которых именно так говорят, мне попадались Forth, SmallTalk, Lisp... может быть, еще Хаскель, но на самом деле в этом последнем не уверен (он все же слишком академичен еще, так что информация о его продуктивности в реальном мире слишком шумная).
Я обратил внимание на то, что языки, о которых так говорят, оказываются как раз языками "одной идеи", доведенной до абсолюта, одной центральной парадигмы, которой все остальное подчиняется.
* SmallTalk доводит идею "все - объект" до абсолюта;
* Forth доводит идею "все - макро" до абсолюта;
* Lisp доводит идею "все - список, а код == данным" до абсолюта.
По-моему, это совпадение не случайно.
no subject
Date: 2009-03-28 05:29 pm (UTC)Не случайно, тоталитарные языки, и поклонники - тоталитарные сектанты.
:)
no subject
Date: 2009-03-28 05:43 pm (UTC)no subject
Date: 2009-03-28 05:46 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2009-03-29 06:58 am (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-03-28 06:13 pm (UTC)no subject
Date: 2009-03-29 07:04 am (UTC)Если уж не все, то по крайней мере, "все что передается как параметр"
no subject
Date: 2009-03-28 06:37 pm (UTC)Возможно, идеология Perl более здоровая. Мир вокруг нас (и задачи, которые нужно рещать) - это mess, в нем нет "главной идеи", поэтому и язык должен быть messy :)
***
Кстати, еще один "одно-концептый" язык: Tcl - "everything is a string". Ну, почти everything. В начале-середине 90-х Tcl - это было круто, особенно в связке с Tk.
no subject
Date: 2009-03-28 07:35 pm (UTC)no subject
Date: 2009-03-28 06:41 pm (UTC)no subject
Date: 2009-03-28 08:13 pm (UTC)Сейчас мне кажется, что такое ощущение от перла 10 и даже еще 5 лет назад было во многом вызвано тем, что его знатоки сравнивали его в основном с C++/Java, от которых к нему "убежали". Сейчас, когда динамические языки отвоевали свою нишу, Питон с Руби заматерели и широко используются наряду с Перлом, Lua напирает вслед за ними, да и JS стал серьезным языком - мне кажется, трудно утверждать, что Перл на порядок их продуктивнее; все равно можно считать что лучше, но не на порядок.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-03-28 06:43 pm (UTC)no subject
Date: 2009-03-28 07:37 pm (UTC)(no subject)
From: (Anonymous) - Date: 2009-03-29 08:21 pm (UTC) - Expand(no subject)
From:no subject
Date: 2009-03-28 07:25 pm (UTC)В лиспе, обрати внимание, ты перечислил две идеи: 1. все список; 2. код имеет вид данных. Из второй, кстати, получаются замечательные лисповые макросы. Как бы язык преобразования синтаксических деревьев.
Я на лисп смотрю как на язык, позволяющий удобно написать программу в терминах описания проблемной области. Конечно, любой современный язык обладает механизмами для этого.
Мелкая придирка. Если в лиспе "всё список", то в форте тогда "всё в стеке". Макро уже отсюда вытекает (как и в лиспе из "код имеет формат данных").
no subject
Date: 2009-03-28 08:31 pm (UTC)Мне кажется, у Лиспа основных идей три: синтаксическая абстракция (с кодом можно работать как с данными), функции как объекты первого класса (лямбда) и интерактивная среда. Если вытащить первое, то получится, например, Смолток, если второе — ТеХ. Без интерактивной среды бывают всякие штуки типа WCL или Stalin-а, которые скорее Лисп, но не совсем.
(no subject)
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
Date: 2009-03-28 07:28 pm (UTC)Но вообще "экстремальные" языки -- это правильно. Если есть задачи (пусть даже этих задач 1% или меньше), которые очень продуктивно и/или эффективно решаются каким-то особым языком, то такой язык, очевидно, имеет право на существование. Что, впрочем, не отменяет потребности в "универсальном" языке.
Удобно дома иметь набор отверток разного размера. Однако в походных условиях лучше одна со сменными насадками.
re: Matlab...
Date: 2009-03-28 07:28 pm (UTC)Re: Matlab...
Date: 2009-03-28 07:54 pm (UTC)Re: Matlab...
From:Re: Matlab...
From:no subject
Date: 2009-03-28 07:52 pm (UTC)no subject
Date: 2009-03-28 07:57 pm (UTC)Алгоритм? Веб сайт? Бизнес логику? Инфраструктуру?
Быстро только писать или добавлять код в готовый продукт?
ИМХО все эти штуки (ну кроме, может смолтока) - от лукавого. От академии.
Производтсву нужен простой язык, расчитанный на то, что бы средний программист мог понять то, что написал другой средний программист.
no subject
Зато у программистов есть другие интересы: job security и skill scarcity.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-03-28 08:09 pm (UTC)и если perl вписывается в твою теорию, то руби вписывается в нее разве что на мета-уровне -- можно сказать, что "руби доводит мультипарадигменность до абсолюта" =)
у меня нет сомнений, что для определенных задач некоторые языки могут быть в разы (поостерегусь говорить "на порядки" =)) эффективнее
"универсальных""индустриальных" языков.no subject
Date: 2009-03-28 08:12 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-03-28 10:08 pm (UTC)no subject
Date: 2009-03-28 10:17 pm (UTC)no subject
Date: 2009-03-29 01:39 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2009-03-28 11:08 pm (UTC)no subject
Date: 2009-03-30 03:44 am (UTC)no subject
Date: 2009-03-28 11:28 pm (UTC)А Питон прикольный, ага.
no subject
Date: 2009-03-29 02:38 am (UTC)Обычно стрононники идейно чистых языков - полу-аутистичные нёрды, которые не понимают, что профессиональные программисты озабочены не столько техникой кодирования (это упражнение для пальцев - на любом языке), сколько психологической стороной (как делать код быстрее и с меньшим количеством ошибок - и как сделать так, чтобы этот код было легко понимать и использовать другим людям в команде), планированием (как сделать так, чтобы работающий продукт был отгружен вовремя), и экономикой.
no subject
Date: 2009-03-29 05:46 am (UTC)приземлю слегка
Date: 2009-03-29 03:52 am (UTC)Re: приземлю слегка
Date: 2009-03-29 04:54 am (UTC)Re: приземлю слегка
From:Re: приземлю слегка
From:Re: приземлю слегка
From:Re: приземлю слегка
From:Re: приземлю слегка
From:Re: приземлю слегка
From:Re: приземлю слегка
From:no subject
Date: 2009-03-29 04:07 am (UTC)Да, наверное это наличие явной идеологии в языке привлекает к нему людей определенного типа, т.е. таких, которые вообще любят идеологию и без неё не могут.
Я за собой это часто замечаю и даже помню момент, когда осознал, что это есть и с этим надо бороться, по крайней мере в технических областях: ещё в институте я слышал, как один студент объяснял другому, что такое Юникс. Он начал с такой фразы: "everything on Unix is a process". Услышав это, я поймал себя на мысли, типа "ух ты, как он это круто сформулировал". То есть вот человек (я) даже полную чушь готов хавать, лишь бы было просто и понятно и звучало умно. Потому что нужна Идея.
no subject
Date: 2009-03-29 04:55 am (UTC)no subject
Date: 2009-03-29 01:24 pm (UTC)Горячих питонистов почему-то приводит в экстаз то, что, по-моему, является как раз недостатком - отсутствие объявлений, прототипов, и всеобщее динамическое связывание имён.
no subject
Date: 2009-03-29 01:29 pm (UTC)(no subject)
From:no subject
Date: 2009-03-29 04:48 pm (UTC)По идее же JavaScript тоже из этих языков, не?
It's not that they just 'think' productivity is high, though
Date: 2009-03-29 06:10 pm (UTC)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
no subject
Date: 2009-03-30 03:48 am (UTC)no subject
Date: 2009-03-30 06:13 pm (UTC)no subject
Date: 2009-03-30 06:52 pm (UTC)это как?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: