Здравствуйте, VladD2, Вы писали:
VD>Ты просто не понимаешь. Он идейный несогласный. Его вообще все в моих подходах не устраивает. Мы с ним представители разных мировоззрений. Скажем я не понимаю как можно читать большой проект с бумаги, а он не пнимает зачем нужна навороченная IDE с интеллисенсом, рефакторингом и прочими излишествами вроде навигации по коду. VD>Он считает, что С++ отличный язык программирования, а меня от него тошнит. Он считает, что средство повышения производительности программиста — это скрипты вроде Руби, а я не уважаю динамически-типизированные языки. И так далее, и тому подобное. В общем, практически нет вещей в программировании на которые у нас были бы похожие взгляды. Ну, разве что на необходимость автоматизированного тестирования. В прочем, и тут у нас разная степень радикализма. Например, я не считаю юнит-тесты панацеей.
VD>В общем, разные мы люди. Не ясно только почему это должно приводить к вот такому вот маниакальному преследованию.
Поскольку тут мне было ошибочно приписано много заблуждений, да и по ходу темы ты пытаешься приписывать мне разные грехи (вроде маниакального преследования), то я счел необходимым попытаться объяснить, что я не верблюд. Просто не вписываюсь в стреднестатистическое большинство.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, kochetkov.vladimir, Вы писали:
E>> -- снобизм и попытка закосить под элитарность.
KV>Скорее, суровая правда жизни.
Еще никто не привел каких-нибудь вменяемых данных, подтверждающих тезис о том, что только небольшой процент программистов, начавших изучение функционального программирования, достигает успеха.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Прямо во введении:
"Думаю, что практически все слышали о существовании функционального подхода в программировании. Многие даже пытались понять, что это такое и чем он отличается от привычного народным массам императивного подхода. Однако только немногие решились реально разобраться в нем, и уж совсем немногие действительно разобрались и освоили функциональный подход."
-- снобизм и попытка закосить под элитарность.
Это не снобизм и не закос под элитарность. Это оговорка по фрейду, вероятно, ктото Влада отвлёк и он на секунду утраьтил контроль над изложением.
Выделеное означает, что сам VladD2 считает что ФП сложен и боится сам себе в этом признаться, по этой причине он переносит свои интиутивныне ощущения на других, мол, это они виноваты, думают, поганцы, на своём блабе.
E>Там же:
"Цель этой статьи максимально просто объяснить императивному программисту основы функционального программирования (далее ФП)."
-- императивный программист такой тупой, что ему нужно объяснять все максимально просто.
Почему сразу тупой ? Не нужно этих проекций. Тем не менее объяснять нужно очень просто. Что бы даже самый тупой мог понять. Иначе эффекта не будет.
Если тупой не поймет — то удешевления разработки не произойдет, секюрность работы девелопера не уменьшится а стало быть подход останется фенькой для ограниченого топов.
E>>>>Откуда информация о том, что у большого количества императивных программистов несложная обработка преобразуется в плохочитаемому коду и т.д.? VD>>>Из практики чтения чужого кода. Поверь, не малой практики. T>>Наша практика говорит об обратном. А у нас она, пожалуй, одна из самых крупных, и ФЯ почище некоторых. VD>Сам себе противоречишь. Если у вас "ФЯ почище некоторых", то код уже не императивный.
Программисты-то были — императивные! Хаскеля в глаза не видели.
T>>Всё нормально у императивщиков при переходе на ФЯ. VD>У кого как. Но я еще не видел людей которым не пришлось бы перестраивать сознание и которые бы без изучения идей ФЯ сами бы писали функциональный код.
Вся перестройка сознания — это прекратить считать список односвязным, и начать думать, что список индуктивно определённый.
То же самое — про остальные структуры данных.
Это что касается перестройки мышления программиста-программиста.
Что касается перестройки мышления программиста-управленца-своими-проектами, то надо перестать постоянно думать о производительности. С этим проблемы у всех.
VD>>>Скажу больше. Я сам бы очень хотел бы наткнуться на подобную статью году эдак в 2005-ом или 2006. А лучше еще раньше. Вместо этого я нарывался на трехколенные выпендрежи, понты и замуности которые мало что давали с точки зрения понимания принципов ФП. По сути только попытка разобраться с Немерле позволила мне понять принципы ФП. И, о чудо, все оказалось совсем просто. Оказывается проблемы были не в моем скудном уме, а в неумении других объяснять весьма простые вещи. Вот эта статья и есть попытка объяснить эти простые вещи для таких же простых парней как я. T>>Перевод этой сентенции на русский язык настолько ярок, "it can blind you by pure awesomness". T>>Если я его опубликую, то меня забанят, да. T>>Этот параграф очень, очень показателен. VD>Ничего не понял.
*рвёт на груди тельняшку*
Параграф этот переводится так: "я тупил и ничего не желал делать, считая, что мне должны всё преподнести так, чтобы я понял. Успехи других я считал выпендрёжем и понтами, а их объяснения — замутностью. А потом я взялся и попытался разобраться на интересной задаче самостоятельно и всё получилось!"
Вот.
Не надо считать свою лень недостатком других.
*срывает с мощного торса остатки тельняшки и принимается за брюки-клёш*
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
E>Это сильно упростит восприятие функционального кода на начальном этапе. Данное мысленное преобразование требуется потому, что императивный программист за долгие годы привык думать низкоуровневыми понятиями (паттернами кодирования) циклов и простейших операций. ФП же предлагает думать бее крупными операциями, такими как отображение, фильтрация и свертка/агрегация.
E>Откуда информация о том, о чем привык думать императивный программист?
Это же просто — разговариваешь с начинающим, он объясняет мелкомасштабными операцями. Чем выш уровень уровень(опыт), тем выше масштаб операций и это видно в разговоре.
На определенном уровне человек оперирует ч.з. "отображение, фильтрация и свертка/агрегация", вот тут ему можно и дать ФП. Вернее, он или сам его возьмет или изобретёт велосипед.
Как сократить время формирования вот такого мышления — неясно.
T>>Если палец указует на меня, то я открещусь — я не разбирался, и даже не пытался. Я просто использую Хаскель, по прямым моим обязанностям вот уже пятый год, а так — с конца 1998 года. VD>Молодец. Но прямо вот этими словами ты доказал, что можно зная русский язык не понимать что тебе на нем пишут. VD>Понимаешь ли в чем дело? Может ты и лучше разобрался "в теме", но при этом ты зазнался и напрочь перестал понимать тех кто еще "не в теме". Отсюда такую же статью ты написать в принципе не в силах. Ну, по крайней мере без чужой помощи.
Главное, я могу применять ФП и получать от этого удовольствие и свободное время. И рассказывать про конкретные успехи (и неуспехи) в своём ЖЖ, что я, обычно, и делаю. Или рассказывать здесь, но тут это тяжелее по объективным причинам.
VD>А вообще забавнешая ситуация получается. Когда я спорю с представителями разных лагерей, то все они моментально записывают меня в радикалов, маргиналов и т.п. Но вот что странно! Каждый раз меня записывают в другой лагерь. Говоришь с опупевшим императивщиком который всюду видит операции над битами и ты вдруг злостный функциональщик/декларативщик не понимающий ток в написании реально быстрых программ. Говоришь с фнункциональщиком и ты вдруг чудесным образом переносишся в другую сторону спектра. И те и другие называют меня фанатиком и т.п.
Если честно, то я тебя считаю просто упёртым человеком, совершенно не желающим вставать на точку зрения других и упорствующим в своих заблуждениях. Единственное, что тебя может сдвинуть с места, это твой собственный опыт. Ты в принципе не способен учиться на чужих ошибках и успехах.
И я разговариваю с тобой, как с таковым человеком.
Кстати, то, что ты записал меня в упёртые функциональщики, которые записывают тебя в императивщики, как раз говорит об узости классификации и нежелании разобраться в явлении. Да и другие люди тоже никуда тебя не записывают. Всё их сопротивление сводится к "не мешай мне учитывать проблемы, которые я считаю важными", вот они тебя и отпихивают "отойди и не мешай своим ФП/ИП", всё остальное происходит в твоём мозгу.
Ты всем стараешься навязать важность твоих проблем и их решений. Да чуть выше — "написать статью ты в принципе не в силах". А оно мне надо, писать статью? Мне пост в ЖЖ важнее статьи, поскольку чаще. Про важность для других, то мой короткий рассказ про лямбда исчисления использовали при подготовке к экзамену. Мне достаточно.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
EC>>>>>А на них разве пишут "обычные" программы? T>>>>define "обычные". Why should I ask in first place? EC>>>Для более-менее конечного пользователя, а не для computer scienetist'ов. T>>CompCert подойдёт? EC>Вполне. EC>Этот компилятор используется для решения практических задач или это чисто исследовательский проект?
Наверняка им пользуется кто-то из французских военных и/или космических товарищей.
При разработке Бурана был этап верификации ПО на Фортране. Программа обратно восстанавливалась до исходного кода на Фортране путём дизассемблирования и два текста сверялись. Так были выявлены ошибки в компиляторе, которые, потом, обходили.
Здесь этого этапа не нужно.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Здравствуйте, VladD2, Вы писали:
VD>В "мастер-классе ФП" я высказал две мысли: VD>1. Что утверждение: VD>
VD>я часто сталкиваюсь с двумя точками зрения — первая "я знаком с ФП, но оно никакой выгоды в программировании не даёт", и вторая "я знаком с ФП, но так и не научился использовать его для повышения эффективности программирования".
VD>высосана из пальца. Если человек реально разобрался в предмете, то таких вопросов уже не возникает.
Совершенно верно. Но это мнения людей, которые реально не разобрались в предмете.
VD>2. Примеры в этом "мастер-классе ФП" слишком примитивные.
Тоже верно. Потому что они для людей, которые не разобрались в предмете.
Ветка "Мастер-класс" была создана Булатом как раз для этого — чтобы люди, которые разобрались помогли и потренировали людей, которые не разобрались. Примитивные задачки нужны для того, чтобы они с одной стороны не заняли много времени, с другой, чтобы не было использовано слишком много приёмов в их решении — поэтому маленькие задачки обычно более выразительны.
То, что ты говоришь, возможно, абсолютно справедливо, но так же абсолютно бесполезно. Смотри, как это выглядит со стороны (лишний раз подчеркну, что с моей, а то ведь... мнэ.. съедят). Есть задачки, люди хотят отточить на них свои навыки, кто-то им помогает, они обсуждают друг с другом различные решения. Тут приходишь ты, прикапываешься к словам (точки зрения, практичность задач), совершенно несущественным в рамках данного топика, говоришь — задачки ваша фигня, сам между тем ничего не предлагаешь Как к этому можно отнестись?
VD>Как из этого можно было вывести искажения чьих то слов и бросания в крайности я не понимаю. VD>В прочем, в некоторых случаях может быть так и происходит. Вот только не думаю, что в этом только моя вина. Крайности как раз присущи приверженцам одной "true мысли".
В этом треде и так много перехода на личности, не хочу это обсуждать
P.S. Насчёт выразительности/гипертрофированности в обучающих примерах и их непрактичности (т.е. несоответствия реальным ситуациям) очень хорошо сказал А.И.Нимцович в "Моей системе". Это не к тебе, просто очень нравятся слова, а тут такой шанс их запостить
Приведенная жертва пешки (желающей в наступлении погибнуть) весьма типична, но при этом, конечно, необязательно, чтобы оживали сразу три фигуры. Нередко удается ввести таким образом в игру только одну фигуру, но и этого достаточно. Почему же мы приводим три фигуры? Да с тем же правом примерно, что и Ибсен, который в заключительной сцене своих "Привидений" сгущает медленное развитие болезнен-ного процесса в один драматический эпизод. И, подобно тому как критика ожесточенно нападала на бедного Ибсена за то, что он исказил картину болезни (!!), так же, вероятно, шахматные критики будут обвинять и нас в тяжком преувеличении.
Здравствуйте, Ikemefula, Вы писали:
I>Выделеное означает, что сам VladD2 считает что ФП сложен и боится сам себе в этом признаться
ФП не сложен. Просто писатели книг по ФП слишком любят канцелярски-формальный язык, за что ФП и не любят
На эту тему кстати есть забавный рассказ "Доклад о вероятности А"... совершенно бесчеловечный эксперимент над читателем
Здравствуйте, VladD2, Вы писали:
T>>Наша практика говорит об обратном. А у нас она, пожалуй, одна из самых крупных, и ФЯ почище некоторых.
VD>Сам себе противоречишь. Если у вас "ФЯ почище некоторых", то код уже не императивный.
Как здесь недавно совершенно верно заметили на чистом ФЯ вполне можно программировать императивно.
now playing: Maximilian Skiba — Randez-Vous (Jens Zimmermann Remix)
Здравствуйте, Andrei F., Вы писали:
AF>ФП не сложен. Просто писатели книг по ФП слишком любят канцелярски-формальный язык, за что ФП и не любят AF>На эту тему кстати есть забавный рассказ "Доклад о вероятности А"... совершенно бесчеловечный эксперимент над читателем
Здравствуйте, EvilChild, Вы писали:
EC>Здравствуйте, VladD2, Вы писали:
T>>>Наша практика говорит об обратном. А у нас она, пожалуй, одна из самых крупных, и ФЯ почище некоторых.
VD>>Сам себе противоречишь. Если у вас "ФЯ почище некоторых", то код уже не императивный.
EC>Как здесь недавно совершенно верно заметили на чистом ФЯ вполне можно программировать императивно.
Более того, на чистом ФЯ нужно программировать императивно (нужно == приходится). Вопрос — нахрена тогда чистый ФЯ.
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Здравствуйте, LaPerouse, Вы писали:
LP>Более того, на чистом ФЯ нужно программировать императивно (нужно == приходится). Вопрос — нахрена тогда чистый ФЯ.
Угу, и код при этом получается ужасный
Вот понадобилось мне тут числа от 1 до 5 вывести...
{-# LANGUAGE PostfixOperators, NewQualifiedOperators #-}
import Prelude hiding ((++), init, (<=))
import qualified Prelude as P
import Data.IORef (IORef, newIORef, readIORef, writeIORef)
import Control.Monad (when)
import qualified Text.Printf as Pf (printf)
printf s r = readIORef r >>= Pf.printf s
newInt = newIORef 0
infixr 1 =:
(=:) = writeIORef
rx <= y = do
x <- readIORef rx
return (P.(<=) x y)
(++) :: IORef Int -> IO ()
(++) = \r -> do
i <- readIORef r
r =: i + 1
for (init, cond, post) act = do
init
loop
where
loop = do
b <- cond
when b $ act >> post >> loop
main = do
i <- newInt
for (i =: 1, i <= 5, (i++)) $
printf "%i\n" i
А ещё говорят, что на Haskell код меньше, чем на С получается!
Здравствуйте, LaPerouse, Вы писали:
EC>>Как здесь недавно совершенно верно заметили на чистом ФЯ вполне можно программировать императивно.
LP>Более того, на чистом ФЯ нужно программировать императивно (нужно == приходится). Вопрос — нахрена тогда чистый ФЯ.
Ты перед словом "нужно" забыл поставить иногда.
now playing: Frank Martiniq — Adriano (Michael Mayer Remix)
Здравствуйте, EvilChild, Вы писали:
EC>Здравствуйте, LaPerouse, Вы писали:
EC>>>Как здесь недавно совершенно верно заметили на чистом ФЯ вполне можно программировать императивно.
LP>>Более того, на чистом ФЯ нужно программировать императивно (нужно == приходится). Вопрос — нахрена тогда чистый ФЯ.
EC>Ты перед словом "нужно" забыл поставить иногда.
Если я могу получить все, что мне требуется получить от хаскеля, от какого-нибудь другого языка, в котором можно программировать императивно легко и без усилий, то соответственно предпочтение я буду отдавать именно этому языку, а не хаскелю.
PS Впрочем, я не против Хаскеля. Хаскель — идеальный язык. Жалко, на нем нельзя писать программы.
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Здравствуйте, LaPerouse, Вы писали:
LP>Если я могу получить все, что мне требуется получить от хаскеля, от какого-нибудь другого языка, в котором можно программировать императивно легко и без усилий, то соответственно предпочтение я буду отдавать именно этому языку, а не хаскелю.
А "требуется" как правило определяется мышлением, привязанным к тому самому другому языку.
Здравствуйте, VoidEx, Вы писали:
VE>Здравствуйте, LaPerouse, Вы писали:
LP>>Если я могу получить все, что мне требуется получить от хаскеля, от какого-нибудь другого языка, в котором можно программировать императивно легко и без усилий, то соответственно предпочтение я буду отдавать именно этому языку, а не хаскелю.
VE>А "требуется" как правило определяется мышлением, привязанным к тому самому другому языку.
Наверное, а разве это плохо? Например, я жалею, что в java нет чего-то навроде LINQ. Почитал статью, очень понравилось. Я уже вижу, насколько я мог бы сократить код,который пишу в данный момент.
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Здравствуйте, LaPerouse, Вы писали:
>>>main = do >>> i <- newInt >>> for (i =: 1, i <= 5, (i++)) $ >>> printf "%i\n" i
LP>Все равно неестественно и не натурально
А я о чём! Хрень какая то...
Если серьёзно, то программировать императивно иногда приходится. Ничего в этом страшного нет, а самое главное, происходит это не так часто, как думают. Причина этого в том, что на ФЯ легко оперировать акциями, т.к. они являются первоклассной сущностью.
Например, представим, что нам надо выйти из программы, как только пользователь нажал q
qPressed = do
mb <- getUserInput
return (mb == Just 'q') -- представим, что getUserInput неблокирующее чтение, для этого Maybe Char
main = loop
where
loop = do
quitCond <- qPressed
unless quitCond loop
Далее, представим, что нам надо выходить также, если пришло соответстувющее сообщение по сети
netQuit = do
mb <- readFromNet
return (mb == CmdQuit)
main = loop
where
loop = do
q1 <- qPressed
unless q1 $ do
q2 <- netQuit
unless q2 loop
Вспомнив, что наши акции первоклассны определим над ними операцию:
-- если первая акция не прошла, применяем вторую.
orM act1 act2 = do
b <- act1
unless b q2
main = loop
where
loop = do
q <- qPressed `orM` netQuit
unless q loop
Тут нам понадобилось ещё третье условие выхода. Мы написали