[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Perl or Python?



On Thu, 19.03.2009 11:56:37 , Aleksey Cheusov wrote:
> 
> > Нет. Такие аргументы пошли в ответ на твои не менее сомнительные
> > заявления об императивности 99% алгоритмов "изначально от
> > рождения". Никакого подтверждения этим словам так и не было
> > предоставлено (т.к. такое подтверждение и не может быть предоставлено по
> > определению: это ведь в лучшем случае художественное преувеличесние).
> Достаточно открыть какого-нибудь Сэджвика и убедиться в этом наглядно.
> "На пальцах" посчитать так сказать.
> 
> functional algorithms - это активно исследуемая тема.  Ссылки я уже
> приводил.  В 95-м году построить систему почти всегда (но есть не для
> всех исследуемых в диссертации задач) эффективно реализует
> примитивнейшие алгоритмы, записанные в функциональном виде, придуманные
> в 60-х!  При всем уважении -- это очень странный подход.
> 
> > Более того, некоторые задачи можно алгоритмизировать гораздо красивее,
> > если не считать их "императивными от рождения".
> Некоторые - да. Например, когда речь идет о _примитивной_ обработке
> рекурсивной структуры данных, скажем, дерева или списка. Это и есть
> примерно 1%, хотя, если честно, гораздо меньше. ФП в лисповском
> понимании не представляет НИКАКИХ инструментов для обработки графов,
> например.  А графы - это я даже не знаю, сколько процентов задач.
Давай всё-таки не будем игнорировать разницу между утверждениями "99%
алгоритмов -- императивные" и "1% алгоритмов -- функциональные". Даже
если второе верно, то не станешь же ты утверждать, что других парадигм
вообще не существует или что они входят в этот же 1% алгоритмов?

Опять же: я не спорю, что 99% задач (и даже больше) можно решить
императивным подходом. Я лишь говорю, что далеко не для 99% именно
этот подход окажется оптимальным. Пример, который я лучше всего знаю:
тот самый внутренний язык ABBYY, о котором я говорил выше. Его
задача -- поиск плавающих полей на документе, с целью их последующего
распознавания. Изначально эта задача решалась на C/C++ (это было ещё
до меня). Со временем стало понятно, что нужен свой язык, который
реализовали, насколько я знаю, на тех же C/C++. Язык менялся на
протяжении времени, постепенно всё лучше затачиваясь под свои задачи;
я застал одно фундаментальное изменение и множество косметических. Но
ни в одной из реализаций я не назвал бы этот язык императивным даже
приблизительно.

> > А самая трудная категория обучаемых -- это как раз были люди,
> > испорченные императивным подходом (в данном случае я отвечаю за свои
> > слова).
> Ну вот опять, "испорченные императивным подходом"...  Может, они были
> просто испорченные, Безотносительно имеративного подхода?
Если бы ты при цитировании не проигнорировал мою классификацию, то
было бы видно, что корреляция достаточно убедительная. Повторюсь:
возможно проблема в том, _как_ их учили. Но вот в учебниках по
императивным языкам я эту проблему видел массово. Когда я преподавал
основы Си, я каждую свою лекцию писал с нуля, потому что то, что мне
дали, не удовлетворило меня ни в какой своей части. А вот лекции и
учебники по функциональному или логическому программированию, которые
я видел позже, не обладали этим недостатком за единственным
исключением.

> > Они настолько привыкли мыслить линейно, что подняться над задачей и
> > оценить картину в целом, а не только прокладывать отдельные маршруты,
> > были не в состоянии; а там без этого никак.
> Способность человека "подняться" над задачей - не зависит от того, что
> он предпочитает, функциональный или императивный подход. Я, например,
> предпочитаю декларативный, если это возможно. И это НИКАК не связано с
> функциональщиной в общем случае. Умею я подняться над задачей в этом
> случае?
Мы ведь говорим не о предпочтениях, а об обучении, верно? ФП же, снова
повторюсь, это только пример, и его многие советуют, на мой взгляд,
ещё и потому, что хороших книг по нему больше, чем по тому же
логическому. Но вот плохих по обоим этим подходам явно меньше, чем по
императивному, даже в процентном отношении. Да и по декларативному
тоже меньше, как бы этот термин ни понимать (а его в любом понимании
императивному противопоставляют в той или иной степени). Это, на мой
взгляд, тоже о чём-то говорит.

> > Могу согласиться, что дело
> > не столько в самом императивном подходе, сколько в том, _как_ их ему
> > обучали. Но эти люди действительно были испорчены таким обучением.
> Вопрос КАК преподавать программирование - это отдельный, гораздо более
> общий вопрос. Конечно, у меня есть по этому поводу мнение...
Более общий -- да, но не столь уж отдельный.

-- 
С уважением,
Тихон Тарнавский.
http://linuxforum.ru
http://posix.ru


Reply to: