2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Проектирование и эволюция программ
Сообщение27.10.2010, 14:48 
Аватара пользователя


22/09/09

1907
Postrelyonysh в сообщении #366655 писал(а):

bin в сообщении #366409 писал(а):
В то же время пора бы вспомнить забытое многими старое. Прежде всего, это принципы защитного программирования, наиболее полно реализованные в языке Паскаль.
С какими "стырами" подходами и с какими "забытыми" языками в сравнении? С фортрано-ассемлерной кашей из GOTO?


Я же четко написал Паскаль. Причем здесь каша из goto?

-- Ср окт 27, 2010 15:58:43 --

Postrelyonysh в сообщении #366655 писал(а):
bin в сообщении #366409 писал(а):
Я, можно сказать, программист "старой школы" - окончил МГУ в 1980
Уточню, что я имел ввиду "старую школу" стран СНГ. На западе зачастую учат нормально. На русском языке литературы по хорошему программированию аццки мало.


На русский переведена практически вся классика: Кнут, Вирт, Ахо и т.д. Но, не зная английского, дисциплину программирования профессионально не освоить, поэтому все проф.программисты знают у нас английский хотя бы на уровне технической литературы. Таким образом, переводная литература ни причем. И в целом у нас учили не хуже, а может иногда и лучше, чем на Западе.

-- Ср окт 27, 2010 16:08:20 --

Postrelyonysh в сообщении #366655 писал(а):
bin в сообщении #366409 писал(а):
Когда и если AI достигнет таких высот, что пользователь сможет скомандовать компьютеру "напиши мне программу, рещающую следующую задачу...", то такой генератор, может, будет полезен.
Такая команда (или, правильнее сказать, не одна команда, я система инструкций, изложенных простым человеческим языком) называется метапрограммированием, и AI тут совершенно ни при чём (тем более, что для полностью автоматической разработки нужен не ИИ, а ИР).


Что в точности называется метапрограммированием, стоит прочитать, например, в Википедии. Я имел ввиду ТЗ в словесной (разговорной) форме. Например, "написать программу, решающую задачу 8 ферзей. Оптимизировать по скорости выполннеия."

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение30.10.2010, 10:04 


25/10/10
17
Maslov писал(а):
Ваше пафосное обличение ООП страдает полным отсутствием аргументации и какой бы то ни было конкретики.
Я вполне конкретно указываю на отсутствие аргументации и ограниченность знаний у пропонентов ООП. Вы в ответ пытаетесь защить своё право на узость кругозора: "а на фиг нам что-то ещё, мы и с ООП справляемся". Кто из нас пафосен?

Maslov писал(а):
ООП, в его традиционном понимании, включает в себя инкапсуляцию, наследование и полиморфизм.
Это определение не объектного моделирования, а namespace-кружев и прочего синтаксического сахара над низкоуровневой императивщиной - т.е. языка "Algol with Classes" со всеми его диалектами (VB/C++/Delphi/Java/C#/Php/etc...). Крайне прискорбно, что именно эта хрень стала "традиционной".

Определение же "настоящего ООП" дал его изобретатель Алан Кэй:
http://c2.com/cgi/wiki?ObjectOrientedProgramming
http://c2.com/cgi/wiki?AlanKaysDefiniti ... ctOriented

Maslov писал(а):
Уточните, пожалуйста, как именно высказался Дейкстра по поводу Delphi?
Цитата старая, так что в ней фигурировал только Бейсик. Если бы дельфя в то время уже существовала - она бы заняла достойное место рядом с ним.

Викицитатник (http://en.wikiquote.org/wiki/Edsger_W._Dijkstra):
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
(Практически невозможно обучить хорошему программированию студентов, имевших богатый опыт разработок на Бейсике: их мышление как потенциальных программистов неизлечимо искалечено без надежды на восстановление.)

Maslov писал(а):
Отображаемая веб-страница -- это набор окошек и других объектов, получающих сообщения и определённых образом на них реагирующих. Что здесь такого "не-ООПного"?
Повторяю ещё раз для тех, кто в танке: есть другие, кроме ООП, способы реализовать тот же функционал, более близкие к естественному человеческому пониманию. Если же для вас "естественным" является промысливать всё подряд в терминах объектов - то это просто подтверждает мои слова. Как опытные Фортран-программисты умудряются писать Фортран-программы на любом языке (даже если в этом языке напрочь отсутствует GOTO) - так же и вы везде по-Алголовски писать будете.

Поинтересуйтесь, что такое гипотеза Сепира-Уорфа.

Кстати, в пых-пыхе концепция ООП реализована столь же убого и уродливо, сколь и в С++.

Maslov писал(а):
ООП используется и довольно успешно
Что именно подразумевается под "успешностью"? Сумели скомпилировать и продать? Это не те критерии, которые являются для меня показателями успешности. Напротив, я с презрением воспринимаю людей, которые имеют наглость выдавать заведомо некачественный продукт за "профессиональное творение".

Maslov писал(а):
И опять же -- полное отсутствие аргументов.
Если у вас приведённые примеры аргументами не считаются, то говорить не о чем. Али я тут должен проводить семантический анализ стилей написания программ с исследованием корреляции этих стилей с кругозором и опытом их разработчиков?

Maslov писал(а):
А что он об этом писал? Кстати, возможно Вас это удивит, но Реймонд вовсе не для всех является таким же непререкаемым авторитетом , как для Вас.
Возможно вас это удивит, но в мире существуют люди, для которых в принципе не существует такого понятия как "авторитет", вроде меня. Рэймонд просто грамотный специалист в сфере Computer Science, и его слова соответствуют моему мнению, если сдуть с них пыль тонкой политкорректности. Если бы я верил "авторитетам", я был бы сторонником ООП, поскольку оно своим пафосом (лавиной "авторитетных" заявлений о всесильности) затмевает все нормальные подходы к программированию.

Эрик Рэймонд "Искусство программирования для Unix" (The Art of Unix):
стр.130-131 писал(а):
Все ОО-языки ... поддерживают создание структур с большим количеством связующего кода и сложными уровнями. ...такой подход может обернуться неприятностями, если программисты реализуют простые вещи сложными способами, просто потому что им известны эти способы и они умеют ими пользоваться.

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

Данная тенденция, вероятно, усугубляется тем, что множество курсов по программированию преподают громоздкую иерархию как способ удовлетворения правила представления. С этой точки зрения множество классов приравнивается к внедрению знаний в данные. Проблема данного подхода заключается в том, что слишком часто "развитые данные" в связующих уровнях фактически не относятся у какому-либо естественному объекту в области действия программы - они предназначены только для связующего уровня.
стр.43-44 писал(а):
Программисты - это зачастую яркие люди, которые гордятся ... своей способностью справляться со сложностями. ... Часто они состязаются друг с другом, пытаясь выяснить, кто может создать "самые замысловатые и красивые сложности".
...
... соперники полагают, что должны соревноваться с чужими "украшательствами" путём добавления собственных. Довольно скоро "массивная опухоль" становится индустриальным стандартом, и все используют большие, переполненные ошибками программы, которые не способны удовлетворить даже их создателей.



Maslov писал(а):
Что можете предложить взамен?
Это зависит от задачи. Универсальных языков в природе не бывает. Надо просто знать, что вообще бывает, чтобы было из чего выбирать. У тех, кому есть из чего выбирать, выбор редко станет падать на ООП, будь то "традиционная" или "настоящая" его форма.

Maslov писал(а):
Каким образом строгая семантика языка и система типов может помочь в предотвращении появления дублирующих фрагментов кода?
За счёт абстракции необходимость многократно решать даже похожие (не говоря уже о семантически идентичных) задачи снижается в разы и на порядки. На хорошем языке программист имеет возможность практически любую абстракцию реализовать лишь единожды - это и есть высокий показатель Code Reuse.

Maslov писал(а):
Можете предложить что-нибудь реально работающее с интерфейсом на "простом человеческом языке"?
Классический, заезженный пример - история появления Yahoo! Stores. Пол Грэхэм с коллегой наглядно продемонстрировали, как эта методология утирает нос всяким попсовым быдлотехнологиям, заработав на ней 50 млн. долларов. Грэхэм прямо так эту историю и озаглавил: "Beating the Averages":
http://www.paulgraham.com/avg.html

В NASA эти вещи используются. Учебных же примеров много в книге Зибеля "Practical Common Lisp". Если сразу страшно - то сначала "SICP" Абельмана & Сассмана.

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

Maslov писал(а):
Это какие элементарные математические принципы?
Ну теория множеств хотя бы. В базовых учебниках по C++ и Delphi учат выстраивать иерархию классов, руководствуясь сугубо ремесленным опытом, а не по науке. И на практике это приводит к постыдным противоречиям с наукой - идеология компонентности выстраивается по принципу "фрукт - это частный случай яблока", а то и того хуже. Вследствие этого программа даже снаружи (с т.з. пользователя) имеет совершенно непостижимые причинно-следственные связи между сущностями. Я знаю много докторов наук, которые предпочитают работать в досовском "лексиконе", а потом на оформление в ttf отдают работу ассистентам - наглядная демонстрация неадекватности современных программ, которая в свою очередь, является следствием ублюдочной Алголовской психосемантики.

Maslov писал(а):
Что конкретно вызывает такое негодование с Вашей стороны?
Конкретно: так называемые "программные системы" не являются системами в понятиях системологии. Следствия этого я назвал выше.

-- Сб окт 30, 2010 11:06:32 --

bin писал(а):
Sonic86 писал(а):
Теоретически интересно, насколько глубока аналогия жизни программы с живыми организмами.
Аналогия, безусловно, есть, т.к. существует и широко применяется понятие "жизненный цикл программы".
Да, синергетика - это тоже приложение системологии, как и теория решения инженерных задач, так что и её знать для формирования системного склада мышления будет полезно.

bin писал(а):
Я же четко написал Паскаль. Причем здесь каша из goto?
Это не так уж и сильно отличается - та же императивщина с сайд-эффектами без механизмов абстрагирования.

bin писал(а):
На русский переведена практически вся классика: Кнут, Вирт, Ахо и т.д. Но, не зная английского, дисциплину программирования профессионально не освоить, поэтому все проф.программисты знают у нас английский хотя бы на уровне технической литературы. Таким образом, переводная литература ни причем. И в целом у нас учили не хуже, а может иногда и лучше, чем на Западе.
Математика программисту, бесспорно, необходима. Но она составляла 99% от CS лишь в эпоху мейнфреймов, когда компьютеры использовались исключительно как мощные калькуляторы, рассчитывая однозначные, проработанные алгоритмы, не предполагающие модификаций. Со второй половины 90-х годов доля системологии в CS начала расти, и сейчас конструктивная сложность программ зачастую представляет бОльшую проблему, нежели сложность алгоритмическая. И тогда встаёт вопрос о гибкости языка, а с ней и вопрос умения эффективно использовать семантически иные языки.

Переводной литературы по функциональному программированию аццки мало, но ещё хуже то, что в ВУЗах её либо не изучают вообще, либо изучают как какую-то экзотику из сферы десятимерных евклидовых пространств, абсолютно бесполезную для практических задач. А потом получаются "Delphi-программы на Python'е" вроде скриптов к 3D-Компасу.

bin писал(а):
Я имел ввиду ТЗ в словесной (разговорной) форме. Например, "написать программу, решающую задачу 8 ферзей. Оптимизировать по скорости выполннеия."
Ну оно практически так и получается, если инструмент правильный выбрать:
http://en.wikipedia.org/wiki/Constraint_programming
8 ферзей - пример не показательный, а на составлении расписаний констрейны уже всерьёз рулят.

Только речь немного не о том. Далеко не всегда в языке уже есть семантические элементы, позволяющие описать задачу чисто декларативно. И метапрограммирование как раз для того и нужно, чтобы внедрить требуемые в данной конкретной задаче фичи в используемый язык, не дожидаясь новой версии языка. В данном случае показательным примером будет Schelog:
http://www.ccs.neu.edu/home/dorai/schelog/schelog.html

bin писал(а):
Что в точности называется метапрограммированием, стоит прочитать, например, в Википедии.
Там детский сад. Хотя сейчас статья, безусловно, улучшилась по сравнению с тем, что я видел там пару лет назад, что не может не радовать.

Приставка "мета-" означает "переход к следующему", что в применении к термину "программирование" означает "программирование того, что запрограммирует целевую программу за программиста". Для этого как минимум нужно, чтобы язык представлял код как данные, хотя бы частично.

То, что "код" - это "данные, предназначенные для исполнения", знают как те, кто пишет на Лиспе и Прологе, так и те, кто пишет на Форте и Ассемблере. Алгольщики же зачастую понимание этой прописной истины безвозвратно утрачивают - и это составляет бОльшую часть сути проклятия Дейкстры.

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение30.10.2010, 12:10 
Заслуженный участник


27/04/09
28128

(Оффтоп)

Postrelyonysh, вы не умеете нормально общаться.

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение30.10.2010, 17:04 
Заслуженный участник


09/08/09
3438
С.Петербург
Postrelyonysh в сообщении #367899 писал(а):
Я вполне конкретно указываю на отсутствие аргументации и ограниченность знаний у пропонентов ООП. Вы в ответ пытаетесь защить своё право на узость кругозора: "а на фиг нам что-то ещё, мы и с ООП справляемся". Кто из нас пафосен?
Пока что вся Ваша широта кругозора сводится к незамысловатому утверждению "вы все …, а я Д'Артаньян". Я нигде не писал "нафиг нам что-то ещё" и, в частности, не имею ничего против функционального подхода. Просто хочу заметить, что программирование -- деятельность глубоко практическая, и для того чтобы утверждать о безусловном преимуществе (или о безусловной пагубности) какого-то одного подхода, нужны достоверные статистические данные, а не голословные заявления об "ограниченности знаний". Свои знания Вы, по-видимому, считаете неограниченными?

Postrelyonysh в сообщении #367899 писал(а):
Maslov писал(а):
ООП, в его традиционном понимании, включает в себя инкапсуляцию, наследование и полиморфизм.
Это определение не объектного моделирования, а namespace-кружев и прочего синтаксического сахара над низкоуровневой императивщиной - т.е. языка "Algol with Classes" со всеми его диалектами (VB/C++/Delphi/Java/C#/Php/etc...). Крайне прискорбно, что именно эта хрень стала "традиционной".
Хорошо, предложите свою "хрень". А то непонятно, с чем Вы, собственно, бьётесь. Только сформулируйте, пожалуйста, своими словами (если, конечно, Вы в состоянии это сделать).

Судя по ярко выраженному негативному оттенку Вашего термина "императивщина", Вы предлагаете заменить её "функциональщиной"/"декларативщиной". Я правильно Вас понял?

Postrelyonysh в сообщении #367899 писал(а):
Maslov писал(а):
Уточните, пожалуйста, как именно высказался Дейкстра по поводу Delphi?
Цитата старая, так что в ней фигурировал только Бейсик. Если бы дельфя в то время уже существовала - она бы заняла достойное место рядом с ним.
Это 5! Зарываете талант: Вам бы в медиумы податься.

(Оффтоп)

Postrelyonysh в сообщении #367899 писал(а):
Викицитатник (http://en.wikiquote.org/wiki/Edsger_W._Dijkstra):
It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
(Практически невозможно обучить хорошему программированию студентов, имевших богатый опыт разработок на Бейсике: их мышление как потенциальных программистов неизлечимо искалечено без надежды на восстановление.)
Это Вы "had a prior exposure" как "имевших богатый опыт разработок" перевели? :-)


Postrelyonysh в сообщении #367899 писал(а):
Maslov писал(а):
Отображаемая веб-страница -- это набор окошек и других объектов, получающих сообщения и определённых образом на них реагирующих. Что здесь такого "не-ООПного"?
Повторяю ещё раз для тех, кто в танке: есть другие, кроме ООП, способы реализовать тот же функционал, более близкие к естественному человеческому пониманию. Если же для вас "естественным" является промысливать всё подряд в терминах объектов - то это просто подтверждает мои слова.
С точки зрения реализации, отображённая в браузере веб-страница -- это именно набор окошек (объектов), управляемых сообщениями. Если для Вас это что-то другое, поделитесь, пожалуйста, своим способом "промысливания". Было бы также очень здорово, если бы Вы наконец привели пример реализации того же функционала, более близкой к "естественному человеческому пониманию".

Postrelyonysh в сообщении #367899 писал(а):
Maslov писал(а):
ООП используется и довольно успешно
Что именно подразумевается под "успешностью"? Сумели скомпилировать и продать? Это не те критерии, которые являются для меня показателями успешности.
...
Пол Грэхэм с коллегой наглядно продемонстрировали, как эта методология утирает нос всяким попсовым быдлотехнологиям, заработав на ней 50 млн. долларов.
Никаких противоречий не видите?

Postrelyonysh в сообщении #367899 писал(а):
Учебных же примеров много в книге Зибеля "Practical Common Lisp". Если сразу страшно - то сначала "SICP" Абельмана & Сассмана.
Спасибо, конечно. Возможно Вас это удивит, но я довольно хорошо знаю, что такое функциональное программирование, и признаю за ним массу достоинств. Однако никаких достоверных данных о том, что при массовом использовании функциональное программирование обеспечивает неоспоримые преимущества по сравнению с ООП или чисто процедурным подходом, у меня нет. Если у Вас есть такая статистика, поделитесь, пожалуйста.

Postrelyonysh в сообщении #367899 писал(а):
Али я тут должен проводить семантический анализ стилей написания программ с исследованием корреляции этих стилей с кругозором и опытом их разработчиков?
До тех пор пока нет достоверных доказательств подобной корреляции, все Ваши утверждения -- это просто изложение собственных религиозных убеждений.

Postrelyonysh в сообщении #367899 писал(а):
Рэймонд просто грамотный специалист в сфере Computer Science, и его слова соответствуют моему мнению, если сдуть с них пыль тонкой политкорректности.
Реймонд просто грамотный специалист, и его утверждения сводятся к тому, что ООП, как и любой другой подход, не свободен от недостатков, особенно, если ему неправильно учить. И не надо с него ничего сдувать (с Дейкстры Вы уже "сдули") -- он написал так, как считал нужным написать: "такой подход может обернуться неприятностями", "ОО-языки несколько склонны "втягивать" программистов в ловушку" и т.п. Ни один нормальный профессионал никогда не позволит себе использовать терминологию типа "императивщина" (напоминает "пилатчину"), "попсовые быдлотехнологии", "ублюдочная Алголовская психосемантика"; это больше лексикон религиозных фанатиков от программирования.

Postrelyonysh в сообщении #367899 писал(а):
За счёт абстракции необходимость многократно решать даже похожие (не говоря уже о семантически идентичных) задачи снижается в разы и на порядки. На хорошем языке программист имеет возможность практически любую абстракцию реализовать лишь единожды - это и есть высокий показатель Code Reuse.
И опять пустые слова. У Вас есть конкретные доказательства того, что, например, Lisp обеспечивает более высокий уровень абстракции, чем C++?

Postrelyonysh в сообщении #367899 писал(а):
Кстати, под "интерфейсом на простом человеческом языке" понимается не какая-нибудь GUIня, а интерфейс к низкоуровневым функциям, который программисты предоставляют прикладным специалистам, чтобы те могли сосредоточиться на своей задаче.
Приведите, пожалуйста, конкретный пример ""интерфейса на простом человеческом языке" к низкоуровневым функциям (на любом языке программирования по Вашему выбору). А то я просто не очень понимаю, о чём идёт речь.

Postrelyonysh в сообщении #367899 писал(а):
В базовых учебниках по C++ и Delphi учат выстраивать иерархию классов, руководствуясь сугубо ремесленным опытом, а не по науке. И на практике это приводит к постыдным противоречиям с наукой - идеология компонентности выстраивается по принципу "фрукт - это частный случай яблока", а то и того хуже.
Другими словами, Вы хотите сказать, что если программиста плохо научили ООП, он будет писать плохие программы? Абсолютно с Вами согласен. Точно так же, если программиста плохо учить функциональному программированию, то результат его деятельности будет весьма плачевным.

Postrelyonysh в сообщении #367899 писал(а):
То, что "код" - это "данные, предназначенные для исполнения", знают как те, кто пишет на Лиспе и Прологе, так и те, кто пишет на Форте и Ассемблере.
То, что код -- это данные, предназначенные для исполнения, знают все, кто хотя бы отдалённо представляет, что такое компилятор.

(Оффтоп)

По стилю аргументации Вы сильно напоминаете некоторых фанатиков, у которых основное и единственное доказательство преимущества Linux заключается в том, что Windows -- это полное барахло, а все, кто на нём работают -- идиоты.

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение01.11.2010, 10:21 


25/10/10
17
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 писал(а):
вы не умеете нормально общаться.
Определите, что для вас является "нормальностью" в общении. Для меня, например, "нормальностью" является формирование мнения на основании методологически корректного анализа и логических выкладок. Вы же только бросили в этот топик несколько априорных фраз (в том числе и данную фразу), и ни одно своё слово не обосновали - а это противоречит моим понятиям о "нормальности" в общении. Кроме того, было бы интересно узнать, с каких позиций можно считать "ненормальностью" мою щедроту на полезную информацию. Ну и про синтаксическую обфускацию я сказал выше.

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение01.11.2010, 12:45 
Админ форума
Аватара пользователя


19/03/10
8952
 !  Postrelyonysh, предупреждение за недопустимые формы ведения дискуссии, оскорбляющие (явно и неявно) участников форума, придерживающихся взглядов, отличных от Ваших. У нас принята вполне определённая манера обсуждения, и если Вы не выключите свой "обфускационный" фильтр и не скорректируете "корявый" синтаксис, то я буду вынужден воспользоваться своим фильтром (модераторским).

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение01.11.2010, 20:55 
Заслуженный участник


09/08/09
3438
С.Петербург
Postrelyonysh в сообщении #368701 писал(а):
Иногда и низкоуровневая императивщина рулит, когда, например, есть тайм-лимит (хотя даже и в таких случаях нельзя однозначно заявлять, что она является неизбежностью - см., например, http://www.bitc-lang.org/).
На мой взгляд, это не очень удачный пример. Во-первых, судить о перспективности подхода по проекту, которому пара месяцев от роду, несколько преждевременно. Во-вторых, принцип "Preserve mutability as a first-class notion in the language" довольно трудно совместить с функциональным программированием с его декларируемым отсутствием побочных эффектов.

Postrelyonysh в сообщении #368701 писал(а):
главная проблема российского образования в сфере CS - это именно однобокость. Притчей во языцах является один-единственный язык "VB/C++/Delphi/Java/C#", он же "Algol with Classes"
Не знаю, как в других местах, но в Питере во многих ВУЗах программистам преподают, в том числе, и функциональный подход. Другое дело, что когда они приходят на работу в компании, занимающиеся практической разработкой ПО, знания эти применить особенно негде. И дело тут не в чьём-то злом умысле или консерватизме. Коллектив и опыт разработки в компаниях складывался годами, и отказ от традиционного и привычного ООП в пользу ФП или другого альтернативного подхода, не поддерживаемого, к тому же, производителями использующихся базовых программных средств, в некотором роде граничит с авантюрой. И здесь, на мой взгляд, весьма интересным является опыт Microsoft, включившей F# в комплект стандартной поставки Visual Studio и таким образом сделавшей функциональный язык полноправным членом экосистемы .Net. В результате появляется возможность постепенного включения функционального программирования в набор применяющихся программных технологий.

Postrelyonysh в сообщении #368701 писал(а):
Проблема же в том, что после лет пяти плотного на нём сидения изучать ФП уже бессмысленно, даже знание математики не спасёт.
Насчёт пяти лет есть достоверные данные? Осталось только понять, как в условиях абсолютного господства процедурного подхода на заре программирования вообще могли появиться функциональные языки. Но тем не менее, раз они все-таки появились, и разрабатывали их люди, неплохо владеющие процедурным подходом, то не всё так ужасно.

Postrelyonysh в сообщении #368701 писал(а):
для проектировщика (прикладного специалиста, без которого кодер ничего толкового не сделает) они останутся именно действиями, и ничем иным
Это к вопросу о гипотезе Сепира — Уорфа и "If all you have is a hammer, everything looks like a nail". Любой анализ проектировщиком предметной области начинается вовсе не с действий, а с составления словаря и онтологии, т. е. как раз таки с описания объектов и их взаимосвязей. А действия -- это уже вторично.

Postrelyonysh в сообщении #368701 писал(а):
Для "освежения" головы предлагаю вам вспомнить детство - написать на голом Си графический "Hello, world" с реакцией на клики в заданных прямоугольниках на экране - а потом внимательно разобрать код на уровне ассемблера, попытаться отыскать там классы с сообщениями и ответить себе на вопрос, нужны ли они тут вообще.
Замечательное предложение. В ответ предлагаю Вам
1) Написать на голом C в оконном окружении (хоть Windows, хоть Linux) программу "Hello, world" с реакцией на клики, и попытать обойтись при этом без отправки и перехвата оконных сообщений
2) Разобрать на уровне ассемблера код какой-нибудь программы на Хаскеле и попытаться отыскать там следы функционального подхода и дедуктивной системы типов. Ну а потом на основании этого анализа ответить себе на тот же вопрос.

Postrelyonysh в сообщении #368701 писал(а):

Другой мой любимый пример, показывающий неудобство промысливания Си в терминах ООП - это передача указателя на функцию в качестве параметра (как в стандартной "qsort"). В терминах ФП это обычная функция высшего порядка, а в терминах ООП то же самое будет ненужными нагромождениями.
Не вижу никакого противоречия между использованием функций высших порядков и ООП. Да, в функциональных языках они смотрятся естественнее, но это дело привычки.

Postrelyonysh в сообщении #368701 писал(а):
Т.е. если есть две реализации - одна на очень хорошем С++, другая на абы каком Лиспе - то при появлении радикально новых требований, на которые никто не рассчитывал N лет назад при проектировании, выживет реализация на Лиспе, т.к. в ней будет гораздо больше кода, пригодного для повторного использования.
Есть какая-нибудь статистика, подтверждающая подобные заявления? (Отдельные примеры успешного/провального использования того или иного подхода доказательством статистически значимой разницы не являются).

Postrelyonysh в сообщении #368701 писал(а):
Грэхэм сделал КАЧЕСТВЕННУЮ работу, а заработок стал лишь СЛЕДСТВИЕМ этого.
Ну да, как хотим, так и переворачиваем. У Грэхэма заработок -- следствие качественной работы, а, например, у разработчиков PostgresQL (процедурный подход, самый "чистый" код в истории разработок OpenSource) высокое качество -- это счастливая случайность.

Postrelyonysh в сообщении #368701 писал(а):
"Exposure" означает "опыт, достаточный для формирования знания".
Не надо ничего придумывать. Это у наших современных студентов к пятому курсу может сложиться "опыт, достаточный для формирования знания", потому что многие из них с 3-го курса работают над реальными (а не учебными) проектами. "Exposure" означает "подвергаться воздействию", и писал Дейкстра о том, что студентов, которые начинали обучение CS с Бейсика, практически невозможно переучить на нормальные языки. При этом нет никаких указаний на то, что под нормальными языками Дейсктра понимал что-то Lisp-подобное. Вы можете привести какие-то его негативные высказывания относительно Паскаля?

Postrelyonysh в сообщении #368701 писал(а):
Пока из ваших реплик делается однозначный вывод: вы считаете себя знающим ФП на основании своей способности написать "VB/C++/Delphi/Java/C#-программу на Lisp/Tcl/Python"
Не имею ни малейшего желания Вас переубеждать. Со своей стороны, мое мнение о Ваших профессиональных данных, составленное из Ваших реплик, оставлю при себе.

Postrelyonysh в сообщении #368701 писал(а):
В ваших же словах я увидел обратный причинно-следственный порядок (типа "вы мне сперва цену обозначьте, а там тогда и качество обсудим") - потому и предложил вам дать ваше определение "успешности" (и не услышал его), на всякий случай заранее отбросив то, что бы мне не сгодилось.
Каждый видит в первую очередь то, что хочет увидеть. Моё определение успешности -- чисто утилитарное: успешный проект -- это проект, в котором удалось решить поставленную задачу в согласованные сроки в рамках согласованного бюджета при взаимной удовлетворённости сторон. Ну а влияние бюджета и сроков проекта на качество -- это аксиома. "Быстро, качественно, дёшево -- выберите любые два".

Postrelyonysh в сообщении #368701 писал(а):
Есть люди, которым небезразличны последствия их деятельности, и деньги стоят на второй позиции в шкале приоритетов после качества работы - их я называю "работающими по совести". А есть люди, "работающие" по принципу "главное зарплата, а после меня хоть трава не расти" - их я называю "капиталистической мразью".
На Ваш взгляд, есть прямая корреляция между используемыми программными средствами и наличием совести?

Postrelyonysh в сообщении #368701 писал(а):

Maslov писал(а):
Реймонд просто грамотный специалист ... И не надо с него ничего сдувать ...
-- он написал так, как считал нужным написать
Это вы от него лично узнали? А вам не кажется, что если бы он написал это в моей формулировке, то его книгу просто не издали бы?
А Вы лично от него узнали, что дай ему волю, он бы начал, подобно Вам, плеваться и кидаться банановой кожурой?

Postrelyonysh в сообщении #368701 писал(а):
Опять же на пальцах: представьте, что из Delphi выбросили все циклы - больше нет в языке ключевых слов while, for, repeat, until. Сможете заново реализовать в языке итеративную абстракцию, используя оставшиеся конструкции языка? Не сможете, придётся каждый массив вручную поэлементно обрабатывать.
Ну зачем же вручную поэлементно? GOTO в Паскале никто не запрещал :-) И потом, я не очень понимаю, что Вы пытаетесь доказать. Что Хаскель хороший язык? Так кто ж с этим спорит?

Postrelyonysh в сообщении #368701 писал(а):
И уж тем более не сможете реализовать более высокоуровневые абстракции - такие как list comprehensions .
Какое отношение list comprehension имеет к ФП? Ruby, Python и (не побоюсь этого слова) c# -- это, по-Вашему, тоже функциональные языки?

Postrelyonysh в сообщении #368701 писал(а):
на Хаскеле вполне может программировать человек, который так и не понял, почему в школьной информатике "x=y" не то же самое, что "y=x".
Есть примеры? По моему мнению, человек, умственных способностей которого не хватило на понимание семантики оператора присваивания, вряд ли способен разобраться со всякими ката-, ана- и прочими морфизмами и монадами.

Postrelyonysh в сообщении #368701 писал(а):
В результате нет необходимости проводить грани между ТЗ и архитектурой, между архитектурой и каркасом кода, между каркасом и реализацией - прикладной специалист вовлекается в разработку напрямую, и его абстрактное видение задачи уже сразу является целевой реализацией.
Открою Вам страшную тайну: не все разработчики ПО занимаются разработкой программ для построения решета Эратосфена и прочими высокими материями. Довольно многим приходится разрабатывать системы документооборота, финансового учёта, управления оборудованием и другие прозаические вещи. Каким образом в подобных проектах Хаскель поможет устранить необходимость проводить грань "между ТЗ и архитектурой"? Предлагаете общаться на Хаскеле с персоналом финансового отдела или инженером по автоматизации? ТЗ -- это же, в первую очередь, документ, гарантирующий единое понимание стоящих задач заказчиком и исполнителем. И составлять его приходится на языке, который одинаково хорошо понимают обе стороны процесса.

Postrelyonysh в сообщении #368701 писал(а):
Для меня, например, "нормальностью" является формирование мнения на основании методологически корректного анализа и логических выкладок.
Ни методологически корректного анализа, ни логических выкладок не обнаружил.
Основой методологически корректного сравнения эффективности разных подходов, на мой взгляд, является анализ статистически значимой разницы в производительности, качестве, сопровождаемости и других характеристиках разработанного программного обеспечения. Вы где-то приводили такие данные?
Логические выкладки предполагают какие-то взаимоприемлемые посылки и переход от них к заключениям через последовательность шагов, корректность которых опять же признаётся всеми заинтересованными сторонами. Где выкладки-то?

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

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение03.11.2010, 12:08 


25/10/10
17
Maslov, вы мыслите слишком стереотипно.

Во-первых, вы как-то зациклились на термине "ФУНКЦИОНАЛЬНОЕ программирование", и даже меня в эту степь уволокли. А вообще-то Lisp и Python - языки императивные. Не в присваиваниях счастье, и не в их полном отсутствии. Да, улучшение возможности верификации хотя бы частично - уже вещь полезная, но далеко не первостепенная. Первостепенна абстракция.

Во-вторых, не знаю, до чего сейчас доросло обучение программированию в Питерских ВУЗах, но тенденции к смене стереотипов в обществе не наблюдается ни разу - народ по-прежнему считает ФП "академическим", т.е., в переводе на восприятие большинства народонаселения - "витиеватой заумностью, без которой вполне можно обойтись на практике". И в ваших словах это вполне хорошо ощущается: у вас получается, что "программирование - это либо высшая математика от выпускников хороших ВУЗов, которые действительно вольны выбирать инструмент, и потому может быть исполнено на хорошем языке, который этой математикой напичкан по самое небалуйся;- либо кодирование дрессированными обезьянками индийского происхождения на ООП по книгам серии для чайников". Вы никак не можете понять, что для того, чтобы программировать на нормальных языках, вовсе необязательно быть семи пядей во лбу и знать наизусть всю дискретку. Напротив, чем выше уровень абстракции - тем проще оно для нормального человеческого восприятия, предельно далёкого от математики и вычислительной техники.

С чего вы решили, что для программирования на Хаскеле нужно обязательно владеть теорией категорий и прочим? Неумелых кодеров-самоучек на С++ и Delphi полно, и вреда от них ещё больше, потому как языки позволяют писать как угодно (при том, что они понятия не имеют, как нужно). Им как раз нужны более строгие языки, чтобы выкручивали им руки всеми возможными способами. Да, порог вхождения там будет несколько повыше, но таки он как раз и находится на том уровне, ниже которого пускать в программирование в принципе нельзя, ибо техника в руках папуаса - металлолом.

Важно, что "абы какая программа на Haskell" - это не то же самое, что "абы какая программа на Delphi". Очень сильно не то же самое. Прежде всего в плане психосемантики.

Я говорю вовсе не о том, что "императивщина напрочь устарела, все бегом на функциональщину", как вы пытались и продолжаете пытаться интерпретировать мои слова,- а об изменении стереотипов в IT-индустрии. На данный момент школьник, желающий набросать "Hello, world", устанавливает у себя не что-нибудь, а именно С++, Delphi или Java - поскольку только эти названия он и знает, поскольку в книжных магазинах не стоят книжки с названиями вроде "Лисп для чайников" (пардон за аллегорию). В итоге базовым, образующим мышление языком является именно Algol style OOP, т.е. язык без средств абстрагирования. А если человек не усвоил с пелёнок, что такое абстрагирование, то хорошим программистом он не станет даже после 20 лет опыта - у него будут устойчивые, ничем не вышибаемые кодерские замашки. Статистики не будет по такой банальной причине как "научная новизна", так что вам придётся довольствоваться Сепиром-Уорфом и педией.

В-третьих, не путайте Виртовский Pascal и язык Delphi. Вирт сделал всего лишь учебный язык, предназначенный для изучения первым, в предположении, что он не станет и последним. Дельфя же выросла из него по той причине, что народ поленился изучать что-либо другое - дескать, есть у нас "универсальный" язык, надо его просто немного "подраздраконить" под веяния моды - и незачем загружать голову лишней информацией. С++ развивался так же, и даже термин "common language" стали переводить как "универсальный язык". И ваши вопросы о том, "что же конкретно выбрать?" - тому подтверждение.

И вообще вернитесь к первой странице - человек спросил, что можно сделать для улучшения процесса разработки, для повышения степени адекватности проектных решений требованиям предметной области. Я сказал, что есть ДРУГИЕ, кроме модно-распространённых, являющихся притчей во языцех, де-факто-стандартом, методы проектирования. В ответ я получил поток самоуверенных выпадов по схеме "ООП рулит" и "ваши высказывания говорят о том, что вы религиозный фанатик". Не поставить на место людей с таким узким кругозором с моей стороны было бы просто неэтичным.

P.S. Решето Эратосфена - естественно, пример уровня детского сада. А вы ждали листинга Yahoo! Stores, что ли? :)

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение03.11.2010, 13:44 


25/10/10
17
P.P.S.
Maslov в сообщении #368980 писал(а):
Любой анализ проектировщиком предметной области начинается вовсе не с действий, а с составления словаря и онтологии, т. е. как раз таки с описания объектов и их взаимосвязей.
Это и есть "низкоуровневая императивщина". Вы, видимо, прозевали всё, что я тут говорил об абстрагировании, поэтому опять же объясню на пальцах. Фраза "Вася сгонял в магазин за пивом" является высокоуровневой, и если бы в нашем языке не были предусмотрены механизмы абстрагирования, то сказать её не получилось бы. Вам, видимо, понятнее, когда тот же смысл передан через простыни UML: "Вася сделал шаг левой, потом сделал шаг правой, потом сделал шаг левой..." и пока он до пива доберётся, уже крыша съедет.

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение03.11.2010, 15:38 
Заслуженный участник
Аватара пользователя


01/08/06
3049
Уфа
Postrelyonysh писал(а):
На данный момент школьник, желающий набросать "Hello, world", устанавливает у себя не что-нибудь, а именно С++, Delphi или Java - поскольку только эти названия он и знает, поскольку в книжных магазинах не стоят книжки с названиями вроде "Лисп для чайников" (пардон за аллегорию). В итоге базовым, образующим мышление языком является именно Algol style OOP, т.е. язык без средств абстрагирования. А если человек не усвоил с пелёнок, что такое абстрагирование, то хорошим программистом он не станет даже после 20 лет опыта - у него будут устойчивые, ничем не вышибаемые кодерские замашки.
Вы немножко недооцениваете современных школьников. По ощущениям, в среде изучающих программирование молодых людей упомянутые Вами языки (Haskell, *ML, Lisp, ... не говоря уже про Python, это вообще мейнстрим) весьма популярны и модны. Что касается изучения в школах или вузах — то как 20 лет назад, так и сейчас талантливые школьники и студенты изучают программирование в основном самостоятельно, без оглядки на программу. Хотя... мне рассказывали, что и преподаватели одного уфимского вуза продвигают Хаскель, не исключаю даже, что он в официальной программе есть...
Остаётся только немого подождать, чтобы увидеть, как эта молодая шпана сметёт нас с лица земли :D
А по поводу того, что книжные магазины формируют вкусы, это Вы напрасно. Спрос определяет предложение, а не наоборот (хотя предложение несколько отстаёт, конечно). И вообще, причём здесь книжные магазины, в век интернета-то?

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение03.11.2010, 15:52 


16/06/10
199

(Оффтоп)

Postrelyonysh в сообщении #367899 писал(а):
Грэхэм прямо так эту историю и озаглавил: "Beating the Averages":http://www.paulgraham.com/avg.html
Прочитал Примечание 1. Не понял, возвращение к истокам? :-(

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение03.11.2010, 18:10 
Заслуженный участник


09/08/09
3438
С.Петербург
Postrelyonysh,
психосемантика -- это, конечно, очень здорово, но хотелось бы всё-таки понять, чем именно Вы предлагаете заменить Delphi, Java, C++, C# и другие "ненормальные" языки. Какие конкретно языки в Вашем понимании являются "нормальными"?

Postrelyonysh в сообщении #369477 писал(а):
Важно, что "абы какая программа на Haskell" - это не то же самое, что "абы какая программа на Delphi". Очень сильно не то же самое.
Согласен, "абы какая программа на Haskell" -- это будет нечто существенно более ужасное.

Postrelyonysh в сообщении #369477 писал(а):
С чего вы решили, что для программирования на Хаскеле нужно обязательно владеть теорией категорий и прочим?
Потому что без этого хаскелевские моноиды, функторы и монады остаются абстракциями, непонятно откуда взявшимися и для чего нужными.

Postrelyonysh в сообщении #369477 писал(а):
Статистики не будет по такой банальной причине как "научная новизна"
Это у Лиспа-то "научная новизна"? Ему ж 50 лет уже. Если бы всё было безоблачно, то за это время ООП умерло бы, не успев родиться (просто не выдержало бы конкуренции).

У недостаточной распространённости функциональных языков есть вполне объективные причины, весьма неплохо сформулированные 10 лет назад: Philip Wadler. Why no one uses functional langauges (русский перевод). В отличие от Вас, автор не возлагает всю вину на человеческую глупость, узость кругозора и ограниченность знаний:
Цитата:
Hope. This long list of reasons why no one uses functional languages may look depressing, but I prefer to look on the bright side. People do not reject functional languages because of stupidity, rather they reject them for a variety of good reasons. Stupidity is famously resistant to attack -- these other problems are something we can tackle.


Postrelyonysh в сообщении #369477 писал(а):
И вообще вернитесь к первой странице - человек спросил, что можно сделать для улучшения процесса разработки, для повышения степени адекватности проектных решений требованиям предметной области. Я сказал, что есть ДРУГИЕ, кроме модно-распространённых, являющихся притчей во языцех, де-факто-стандартом, методы проектирования.
А можно на вопросе проектирования остановиться немного подробнее? Для проектирования больших программных систем в терминах объектов и их взаимосвязей есть куча методик и инструментов. Можете ли Вы порекомендовать какие-нибудь разработки подобного плана для проектирования больших многокомпонентных систем на функциональных языках?
У Вас лично есть опыт успешной разработки чего-нибудь большого?

Postrelyonysh в сообщении #369502 писал(а):
Фраза "Вася сгонял в магазин за пивом" является высокоуровневой
Не, не является. У Васи была цель перейти из трезвого состояния в нетрезвое, а уж сгонял он для этого в магазин сам или послал жену -- это низкоуровневые детали реализации.

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение04.11.2010, 15:51 
Аватара пользователя


06/08/09
165
Поддерживаю Postrelyonysh по существу. После поверхностного ознакомления с функциональным программированием стал лучше программировать. Хотя по прежнему пишу по фортрановски (фортран давно забыл). ФП - оно в голове. Помогает правильней организовать код. Фактическое отсутствие образования - катострофа.

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение04.11.2010, 18:04 
Заслуженный участник


15/05/05
3445
USA
alien308 в сообщении #370022 писал(а):
Поддерживаю Postrelyonysh по существу. После поверхностного ознакомления с функциональным программированием стал лучше программировать. Хотя по прежнему пишу по фортрановски (фортран давно забыл). ФП - оно в голове. Помогает правильней организовать код. Фактическое отсутствие образования - катострофа.
Основной тезис Postrelyonysh'а не "функциональное программирование полезно" (против этого никто никогда и не возражал) а "ТОЛЬКО функциональное программирование полезно".
Если бы Вы поддерживали Postrelyonysh по существу, то отказались бы от Фортрана и перешли на Common Lisp или Haskell.
Например, разработчик одной из версий ФОРТа писал на ФОРТе бухгалтерские задачи.

 Профиль  
                  
 
 Re: Проектирование и эволюция программ
Сообщение04.11.2010, 18:51 
Аватара пользователя


06/08/09
165
Цитата:
Если бы Вы поддерживали Postrelyonysh по существу, то отказались бы от Фортрана и перешли на Common Lisp или Haskell.

Даже Postrelyonysh этого не предлагает :)
Речь идёт именно о начальном образовании информатике, даже не о программировании как таковом. Когда формируются способы мышления. Информатика естественно не в том смысле как понимают деятели от "образования".

Ограниченность доминирующей традиции показывает топикстартер говоря о невозможности более-менее правильного развития программных продуктов. Существующая процедурная изоляция, так или иначе усиленная в реализациях в OOП, принципиально недостаточна.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу Пред.  1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group