Maslov, вы, конечно, неплохо противостоите провокациям, но если не будете внимательнее следить за моими словами и сопоставлять их с содержимым приводимых мной ссылок, то общение с вами будет мне более неинтересным - ни забавы, ни конструктива. Многие ваши вопросы по третьему разу аппелируют к тому, что я уже доказал, но так и быть, повторюсь, и даже специально набиру пост по-медленнее, чтобы вам было легче его прочесть.
Maslov писал(а):
Пока что вся Ваша широта кругозора сводится к незамысловатому утверждению "вы все … [лица нетрадиционной сексуальной ориентации], а я Д'Артаньян". ... Свои знания Вы, по-видимому, считаете неограниченными?
Себя я д'Артаньяном ни разу не позиционировал и вообще никакой похвальбы с моей стороны здесь не было и не будет. А всё знают только дураки.
Maslov писал(а):
Ни один нормальный профессионал никогда не позволит себе использовать терминологию типа "императивщина" (напоминает "пилатчину"), "попсовые быдлотехнологии", "ублюдочная Алголовская психосемантика"; это больше лексикон религиозных фанатиков от программирования.
Профессионал обращает внимание на семантику, закрывая глаза на синтаксис. Корявый синтаксис является у меня своего рода фильтром от людей плоских, не способных "видеть лес за деревьями".
Maslov писал(а):
Судя по ярко выраженному негативному оттенку Вашего термина "императивщина", Вы предлагаете заменить её "функциональщиной"/"декларативщиной". Я правильно Вас понял?
Нет, потому что не следите за мыслью. Читаем внимательно, следя за пальцем:
Postrelyonysh писал(а):
Это зависит от задачи. Универсальных языков в природе не бывает.
Иногда и низкоуровневая императивщина рулит, когда, например, есть тайм-лимит (хотя даже и в таких случаях нельзя однозначно заявлять, что она является неизбежностью - см., например,
http://www.bitc-lang.org/). Но для 90% задач программирования Premature optimization is the root of all evil, а проблем фон-Неймановское программирование приносит немало.
Maslov писал(а):
По стилю аргументации Вы сильно напоминаете некоторых фанатиков, у которых основное и единственное доказательство преимущества Linux заключается в том, что Windows -- это полное барахло, а все, кто на нём работают -- идиоты.
Если человек знает ровно один взгляд на некоторую проблему, то он не имеет права судить. Вообще. Корректное знание формируется только в результате индукции нескольких качественно различных семантических паттернов. И фанатичные крики линуксоидов - лишь доброжелательная попытка убедить виндовцев хотя бы провести сравнение (даже если некоторые неумные и неспособны так вот прямолинейно это из себя озвучить, то всё равно они подсознательно руководствуются именно этим). И всё, о чём я здесь говорил - тоже. Не важно, что уже написано на ФП - его надо знать просто для воспитания определённой культуры программирования, а не для того, чтобы "равняться на стадо". В частности, отвечая на это:
Maslov писал(а):
Другими словами, Вы хотите сказать, что если программиста плохо научили ООП, он будет писать плохие программы? Абсолютно с Вами согласен. Точно так же, если программиста плохо учить функциональному программированию, то результат его деятельности будет весьма плачевным.
- повторю ещё раз, что главная проблема российского образования в сфере CS - это именно однобокость. Притчей во языцах является один-единственный язык "VB/C++/Delphi/Java/C#", он же "Algol with Classes", а такие как вы не позволяют подрастающему поколению даже узнать о существовании альтернатив, т.к. слишком яростно кричат об "успешности" этого уродства.
Проблема же в том, что после лет пяти плотного на нём сидения изучать ФП уже бессмысленно, даже знание математики не спасёт. Да, математика - это тоже язык, со своей идеологией, но практика общения с компьютером на языке Алгола её влияние затмевает. Вы наверняка слышали такую пословицу: "Умелый автор сможет на любом языке написать программу на Фортране".
Maslov писал(а):
С точки зрения реализации, отображённая в браузере веб-страница -- это именно набор окошек (объектов), управляемых сообщениями. Если для Вас это что-то другое, поделитесь, пожалуйста, своим способом "промысливания".
Алгоритм деятельности оператора в системе "человек-машина" представляется прежде всего набором действий, т.е. реакций системы на сигналы человека. В зависимости от степени интегрированности человека в систему эти сигналы могут иметь разную природу - от клика по зоне на экране или нажатия клавиши до поворота в пространстве 3D-сенсора или съёма нейродатчика. Кодер может реализовать эти реакции как ему удобно - хоть прерыванием, хоть вызовом функции по указателю, хоть посылкой сообщения - но для проектировщика (прикладного специалиста, без которого кодер ничего толкового не сделает) они останутся именно действиями, и ничем иным.
Про собственно термин "посылка сообщения". В семантике Smalltalk'а (где он и появился) он означает именно формирование "объекта сообщения". А в семантике Си - всего лишь вызов функции с параметрами, размещёнными в стеке, и очень плохо, если программист ментально оборачивает этот вызов в посылку объекта сообщения. Для "освежения" головы предлагаю вам вспомнить детство - написать на голом Си графический "Hello, world" с реакцией на клики в заданных прямоугольниках на экране - а потом внимательно разобрать код на уровне ассемблера, попытаться отыскать там классы с сообщениями и ответить себе на вопрос, нужны ли они тут вообще.
Другой мой любимый пример, показывающий неудобство промысливания Си в терминах ООП - это передача указателя на функцию в качестве параметра (как в стандартной "qsort"). В терминах ФП это обычная функция высшего порядка, а в терминах ООП то же самое будет ненужными нагромождениями.
И Алана Кэя почитайте по-внимательнее.
Maslov писал(а):
Только сформулируйте, пожалуйста, своими словами (если, конечно, Вы в состоянии это сделать).
Зачем? Данные мной ссылки более чем содержательны. Тем более, что знание - это не то, что можно передать в двух строках, оно инкапсулируется в человеке, а любой текст - это лишь информация. Для того, чтобы вырастить в человеке знание, нужно и текста много, и обратная связь (практические упражнения). Повторяю медленно: я не выпендриваюсь, а даю ссылки на полезную информацию, из которой те, кто выбрал своей профессией программирование, смогут вырастить знания. Только и всего.
Maslov писал(а):
Однако никаких достоверных данных о том, что при массовом использовании функциональное программирование обеспечивает неоспоримые преимущества по сравнению с ООП или чисто процедурным подходом, у меня нет.
...
У Вас есть конкретные доказательства того, что, например, Lisp обеспечивает более высокий уровень абстракции, чем C++?
Ссылка на историю Yahoo! Stores как раз и была доказательством. Объясняю на пальцах: чем выше уровень абстракции, тем выше показатель Code Reuse, и тем легче вносить архитектурные изменения в код. Т.е. если есть две реализации - одна на очень хорошем С++, другая на абы каком Лиспе - то при появлении радикально новых требований, на которые никто не рассчитывал N лет назад при проектировании, выживет реализация на Лиспе, т.к. в ней будет гораздо больше кода, пригодного для повторного использования. Грэхэм с коллегой в течение дня реализовывали то, что другие анонсировали за месяц. Обратный пример, демонстрирующий низкую гибкость С++ных решений, я привёл ещё в первом своём посте в этой теме - история развития браузера Opera.
Maslov писал(а):
Maslov писал(а):
ООП используется и довольно успешно
Postrelyonysh писал(а):
Что именно подразумевается под "успешностью"? Сумели скомпилировать и продать? Это не те критерии, которые являются для меня показателями успешности.
...
Пол Грэхэм с коллегой наглядно продемонстрировали, как эта методология утирает нос всяким попсовым быдлотехнологиям, заработав на ней 50 млн. долларов.
Никаких противоречий не видите?
Нет. Грэхэм сделал КАЧЕСТВЕННУЮ работу, а заработок стал лишь СЛЕДСТВИЕМ этого. В ваших же словах я увидел обратный причинно-следственный порядок (типа "вы мне сперва цену обозначьте, а там тогда и качество обсудим") - потому и предложил вам дать ваше определение "успешности" (и не услышал его), на всякий случай заранее отбросив то, что бы мне не сгодилось. Ключевое слово для гугла - "совесть". Есть люди, которым небезразличны последствия их деятельности, и деньги стоят на второй позиции в шкале приоритетов после качества работы - их я называю "работающими по совести". А есть люди, "работающие" по принципу "главное зарплата, а после меня хоть трава не расти" - их я называю "капиталистической мразью".
Maslov писал(а):
Это Вы "had a prior exposure" как "имевших богатый опыт разработок" перевели?
"Exposure" означает "опыт, достаточный для формирования знания". Если человек лишь познакомился (получил информацию), то на английском это будет "meet" или "contact". Вы скорее всего просто не знаете, в чём разница между информацией и знаниями, и думаете, будто школа с ВУЗом дают знания - потому и не обращаете внимания на словарные тонкости.
Кстати, слово "average" переводится как "середнячок" лишь в литературном английском, а в бытовой речи оно является эквивалентом русскому слову "быдло" - так что претензии по поводу "непрофессиональности" этого конкретного термина сперва к Грэхэму, а уж потом ко мне.
Maslov писал(а):
Это 5! Зарываете талант: Вам бы в медиумы податься.
Вы уже прочитали про гипотезу Сепира-Уорфа? Прошли оттуда по доказательным ссылкам? Можете определить сколько-нибудь существенную семантическую разницу между VB и Delphi в сравнении с их разницей с Lisp'ом?
Пока из ваших реплик делается однозначный вывод: вы считаете себя знающим ФП на основании своей способности написать "VB/C++/Delphi/Java/C#-программу на Lisp/Tcl/Python" (такое же убожество, как и "Fortran-программа на С++"). Те, кто
ЗНАЮТ ФП, уже никогда не отзовутся об "Algol style OOP" положительно. С гарантией.
Maslov писал(а):
Реймонд просто грамотный специалист ... И не надо с него ничего сдувать ...
-- он написал так, как считал нужным написать
Это вы от него лично узнали? А вам не кажется, что если бы он написал это в моей формулировке, то его книгу просто не издали бы?
Maslov писал(а):
То, что код -- это данные, предназначенные для исполнения, знают все, кто хотя бы отдалённо представляет, что такое компилятор.
Нет, этого мало. Язык программирования должен предоставлять возможность развивать себя своими же конструкциями. Опять же на пальцах: представьте, что из Delphi выбросили все циклы - больше нет в языке ключевых слов while, for, repeat, until. Сможете заново реализовать в языке итеративную абстракцию, используя оставшиеся конструкции языка? Не сможете, придётся каждый массив вручную поэлементно обрабатывать. В лучшем случае будут извращения, жутко неэффективные и с нестерпимым количеством синтаксического мусора. И уж тем более не сможете реализовать более высокоуровневые абстракции - такие как list comprehensions - чтобы улучшить самодокументируемость и модифицируемость программ на Delphi. А всё потому, что язык не представляет собой целостную систему.
Maslov писал(а):
Приведите, пожалуйста, конкретный пример ""интерфейса на простом человеческом языке" к низкоуровневым функциям (на любом языке программирования по Вашему выбору). А то я просто не очень понимаю, о чём идёт речь.
Решето Эратосфена на Haskell:
Код:
primes = sieve [ 2.. ] where
sieve (p:x) = p : sieve [ n | n <- x, (mod n p) > 0 ]
Тупо математическое определение, никакого фон-Неймановского мусора и сайд-эффектов. Функция просто определена через рекурсивное множество - а всё благодаря тому, что list comprehensions фактически выражают обычную математическую нотацию для множеств (ну и плюс pattern matching для пущей элегантности). Весь низкоуровневый функционал, который разберёт этот код и выполнит его на i86, скрыт от глаз, так что на Хаскеле вполне может программировать человек, который так и не понял, почему в школьной информатике "x=y" не то же самое, что "y=x". В результате нет необходимости проводить грани между ТЗ и архитектурой, между архитектурой и каркасом кода, между каркасом и реализацией - прикладной специалист вовлекается в разработку напрямую, и его абстрактное видение задачи уже сразу является целевой реализацией.
arseniiv писал(а):
вы не умеете нормально общаться.
Определите, что для вас является "нормальностью" в общении. Для меня, например, "нормальностью" является формирование мнения на основании методологически корректного анализа и логических выкладок. Вы же только бросили в этот топик несколько априорных фраз (в том числе и данную фразу), и ни одно своё слово не обосновали - а это противоречит моим понятиям о "нормальности" в общении. Кроме того, было бы интересно узнать, с каких позиций можно считать "ненормальностью" мою щедроту на полезную информацию. Ну и про синтаксическую обфускацию я сказал выше.