Re[6]: "LINQ как шаг к ФП". Стиль изложения.
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.01.09 09:25
Оценка: 14 (5)
Здравствуйте, VladD2, Вы писали:

VD>Ты просто не понимаешь. Он идейный несогласный. Его вообще все в моих подходах не устраивает. Мы с ним представители разных мировоззрений. Скажем я не понимаю как можно читать большой проект с бумаги, а он не пнимает зачем нужна навороченная IDE с интеллисенсом, рефакторингом и прочими излишествами вроде навигации по коду.

VD>Он считает, что С++ отличный язык программирования, а меня от него тошнит. Он считает, что средство повышения производительности программиста — это скрипты вроде Руби, а я не уважаю динамически-типизированные языки. И так далее, и тому подобное. В общем, практически нет вещей в программировании на которые у нас были бы похожие взгляды. Ну, разве что на необходимость автоматизированного тестирования. В прочем, и тут у нас разная степень радикализма. Например, я не считаю юнит-тесты панацеей.

VD>В общем, разные мы люди. Не ясно только почему это должно приводить к вот такому вот маниакальному преследованию.


Поскольку тут мне было ошибочно приписано много заблуждений, да и по ходу темы ты пытаешься приписывать мне разные грехи (вроде маниакального преследования), то я счел необходимым попытаться объяснить, что я не верблюд. Просто не вписываюсь в стреднестатистическое большинство.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: "LINQ как шаг к ФП". Стиль изложения.
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.01.09 09:28
Оценка: +2
Здравствуйте, kochetkov.vladimir, Вы писали:

E>> -- снобизм и попытка закосить под элитарность.


KV>Скорее, суровая правда жизни.


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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: "LINQ как шаг к ФП". Стиль изложения.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.01.09 09:50
Оценка: :)))
Здравствуйте, eao197, Вы писали:

E>Прямо во введении:

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

-- снобизм и попытка закосить под элитарность.


Это не снобизм и не закос под элитарность. Это оговорка по фрейду, вероятно, ктото Влада отвлёк и он на секунду утраьтил контроль над изложением.

Выделеное означает, что сам VladD2 считает что ФП сложен и боится сам себе в этом признаться, по этой причине он переносит свои интиутивныне ощущения на других, мол, это они виноваты, думают, поганцы, на своём блабе.

E>Там же:

"Цель этой статьи максимально просто объяснить императивному программисту основы функционального программирования (далее ФП)."

-- императивный программист такой тупой, что ему нужно объяснять все максимально просто.


Почему сразу тупой ? Не нужно этих проекций. Тем не менее объяснять нужно очень просто. Что бы даже самый тупой мог понять. Иначе эффекта не будет.

Если тупой не поймет — то удешевления разработки не произойдет, секюрность работы девелопера не уменьшится а стало быть подход останется фенькой для ограниченого топов.
Re[6]: "LINQ как шаг к ФП". Стиль изложения.
От: thesz Россия http://thesz.livejournal.com
Дата: 22.01.09 09:51
Оценка:
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)
Re[3]: "LINQ как шаг к ФП". Стиль изложения.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.01.09 10:07
Оценка:
Здравствуйте, eao197, Вы писали:

E>

E>Это сильно упростит восприятие функционального кода на начальном этапе. Данное мысленное преобразование требуется потому, что императивный программист за долгие годы привык думать низкоуровневыми понятиями (паттернами кодирования) циклов и простейших операций. ФП же предлагает думать бее крупными операциями, такими как отображение, фильтрация и свертка/агрегация.

E>Откуда информация о том, о чем привык думать императивный программист?

Это же просто — разговариваешь с начинающим, он объясняет мелкомасштабными операцями. Чем выш уровень уровень(опыт), тем выше масштаб операций и это видно в разговоре.

На определенном уровне человек оперирует ч.з. "отображение, фильтрация и свертка/агрегация", вот тут ему можно и дать ФП. Вернее, он или сам его возьмет или изобретёт велосипед.

Как сократить время формирования вот такого мышления — неясно.

Эмпирическая оценка — 10 лет.

http://www.williamspublishing.com/21-days.html
Re[5]: "LINQ как шаг к ФП". Стиль изложения.
От: thesz Россия http://thesz.livejournal.com
Дата: 22.01.09 10:24
Оценка: +2
T>>Если палец указует на меня, то я открещусь — я не разбирался, и даже не пытался. Я просто использую Хаскель, по прямым моим обязанностям вот уже пятый год, а так — с конца 1998 года.
VD>Молодец. Но прямо вот этими словами ты доказал, что можно зная русский язык не понимать что тебе на нем пишут.
VD>Понимаешь ли в чем дело? Может ты и лучше разобрался "в теме", но при этом ты зазнался и напрочь перестал понимать тех кто еще "не в теме". Отсюда такую же статью ты написать в принципе не в силах. Ну, по крайней мере без чужой помощи.

Главное, я могу применять ФП и получать от этого удовольствие и свободное время. И рассказывать про конкретные успехи (и неуспехи) в своём ЖЖ, что я, обычно, и делаю. Или рассказывать здесь, но тут это тяжелее по объективным причинам.

VD>А вообще забавнешая ситуация получается. Когда я спорю с представителями разных лагерей, то все они моментально записывают меня в радикалов, маргиналов и т.п. Но вот что странно! Каждый раз меня записывают в другой лагерь. Говоришь с опупевшим императивщиком который всюду видит операции над битами и ты вдруг злостный функциональщик/декларативщик не понимающий ток в написании реально быстрых программ. Говоришь с фнункциональщиком и ты вдруг чудесным образом переносишся в другую сторону спектра. И те и другие называют меня фанатиком и т.п.


Если честно, то я тебя считаю просто упёртым человеком, совершенно не желающим вставать на точку зрения других и упорствующим в своих заблуждениях. Единственное, что тебя может сдвинуть с места, это твой собственный опыт. Ты в принципе не способен учиться на чужих ошибках и успехах.

И я разговариваю с тобой, как с таковым человеком.

Кстати, то, что ты записал меня в упёртые функциональщики, которые записывают тебя в императивщики, как раз говорит об узости классификации и нежелании разобраться в явлении. Да и другие люди тоже никуда тебя не записывают. Всё их сопротивление сводится к "не мешай мне учитывать проблемы, которые я считаю важными", вот они тебя и отпихивают "отойди и не мешай своим ФП/ИП", всё остальное происходит в твоём мозгу.

Ты всем стараешься навязать важность твоих проблем и их решений. Да чуть выше — "написать статью ты в принципе не в силах". А оно мне надо, писать статью? Мне пост в ЖЖ важнее статьи, поскольку чаще. Про важность для других, то мой короткий рассказ про лямбда исчисления использовали при подготовке к экзамену. Мне достаточно.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[15]: "LINQ как шаг к ФП". Стиль изложения.
От: thesz Россия http://thesz.livejournal.com
Дата: 22.01.09 10:29
Оценка: 3 (2)
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)
Re[7]: "LINQ как шаг к ФП". Стиль изложения.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 22.01.09 10:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В "мастер-классе ФП" я высказал две мысли:

VD>1. Что утверждение:
VD>

VD>я часто сталкиваюсь с двумя точками зрения — первая "я знаком с ФП, но оно никакой выгоды в программировании не даёт", и вторая "я знаком с ФП, но так и не научился использовать его для повышения эффективности программирования".

VD>высосана из пальца. Если человек реально разобрался в предмете, то таких вопросов уже не возникает.

Совершенно верно. Но это мнения людей, которые реально не разобрались в предмете.

VD>2. Примеры в этом "мастер-классе ФП" слишком примитивные.


Тоже верно. Потому что они для людей, которые не разобрались в предмете.

Ветка "Мастер-класс" была создана Булатом как раз для этого — чтобы люди, которые разобрались помогли и потренировали людей, которые не разобрались. Примитивные задачки нужны для того, чтобы они с одной стороны не заняли много времени, с другой, чтобы не было использовано слишком много приёмов в их решении — поэтому маленькие задачки обычно более выразительны.

То, что ты говоришь, возможно, абсолютно справедливо, но так же абсолютно бесполезно. Смотри, как это выглядит со стороны (лишний раз подчеркну, что с моей, а то ведь... мнэ.. съедят). Есть задачки, люди хотят отточить на них свои навыки, кто-то им помогает, они обсуждают друг с другом различные решения. Тут приходишь ты, прикапываешься к словам (точки зрения, практичность задач), совершенно несущественным в рамках данного топика, говоришь — задачки ваша фигня, сам между тем ничего не предлагаешь Как к этому можно отнестись?

VD>Как из этого можно было вывести искажения чьих то слов и бросания в крайности я не понимаю.

VD>В прочем, в некоторых случаях может быть так и происходит. Вот только не думаю, что в этом только моя вина. Крайности как раз присущи приверженцам одной "true мысли".

В этом треде и так много перехода на личности, не хочу это обсуждать

P.S. Насчёт выразительности/гипертрофированности в обучающих примерах и их непрактичности (т.е. несоответствия реальным ситуациям) очень хорошо сказал А.И.Нимцович в "Моей системе". Это не к тебе, просто очень нравятся слова, а тут такой шанс их запостить

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

Re[2]: "LINQ как шаг к ФП". Стиль изложения.
От: Andrei F.  
Дата: 22.01.09 13:05
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Выделеное означает, что сам VladD2 считает что ФП сложен и боится сам себе в этом признаться


ФП не сложен. Просто писатели книг по ФП слишком любят канцелярски-формальный язык, за что ФП и не любят
На эту тему кстати есть забавный рассказ "Доклад о вероятности А"... совершенно бесчеловечный эксперимент над читателем
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[6]: "LINQ как шаг к ФП". Стиль изложения.
От: EvilChild Ниоткуда  
Дата: 22.01.09 13:42
Оценка:
Здравствуйте, VladD2, Вы писали:

T>>Наша практика говорит об обратном. А у нас она, пожалуй, одна из самых крупных, и ФЯ почище некоторых.


VD>Сам себе противоречишь. Если у вас "ФЯ почище некоторых", то код уже не императивный.


Как здесь недавно совершенно верно заметили на чистом ФЯ вполне можно программировать императивно.
now playing: Maximilian Skiba — Randez-Vous (Jens Zimmermann Remix)
Re[3]: "LINQ как шаг к ФП". Стиль изложения.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.01.09 14:52
Оценка:
Здравствуйте, Andrei F., Вы писали:

AF>ФП не сложен. Просто писатели книг по ФП слишком любят канцелярски-формальный язык, за что ФП и не любят

AF>На эту тему кстати есть забавный рассказ "Доклад о вероятности А"... совершенно бесчеловечный эксперимент над читателем

Для кого не сложен, для новичка или топа ?
Re[7]: "LINQ как шаг к ФП". Стиль изложения.
От: LaPerouse  
Дата: 22.01.09 15:16
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Здравствуйте, VladD2, Вы писали:


T>>>Наша практика говорит об обратном. А у нас она, пожалуй, одна из самых крупных, и ФЯ почище некоторых.


VD>>Сам себе противоречишь. Если у вас "ФЯ почище некоторых", то код уже не императивный.


EC>Как здесь недавно совершенно верно заметили на чистом ФЯ вполне можно программировать императивно.


Более того, на чистом ФЯ нужно программировать императивно (нужно == приходится). Вопрос — нахрена тогда чистый ФЯ.
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[8]: "LINQ как шаг к ФП". Стиль изложения.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 22.01.09 15:24
Оценка: 14 (2) :))) :))
Здравствуйте, 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 код меньше, чем на С получается!
Re[8]: "LINQ как шаг к ФП". Стиль изложения.
От: EvilChild Ниоткуда  
Дата: 22.01.09 15:34
Оценка: +1
Здравствуйте, LaPerouse, Вы писали:

EC>>Как здесь недавно совершенно верно заметили на чистом ФЯ вполне можно программировать императивно.


LP>Более того, на чистом ФЯ нужно программировать императивно (нужно == приходится). Вопрос — нахрена тогда чистый ФЯ.


Ты перед словом "нужно" забыл поставить иногда.
now playing: Frank Martiniq — Adriano (Michael Mayer Remix)
Re[9]: "LINQ как шаг к ФП". Стиль изложения.
От: LaPerouse  
Дата: 22.01.09 15:38
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Здравствуйте, LaPerouse, Вы писали:



L>А ещё говорят, что на Haskell код меньше, чем на С получается!


>>main = do

>> i <- newInt
>> for (i =: 1, i <= 5, (i++)) $
>> printf "%i\n" i

Все равно неестественно и не натурально
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[9]: "LINQ как шаг к ФП". Стиль изложения.
От: LaPerouse  
Дата: 22.01.09 15:42
Оценка: :)
Здравствуйте, EvilChild, Вы писали:

EC>Здравствуйте, LaPerouse, Вы писали:


EC>>>Как здесь недавно совершенно верно заметили на чистом ФЯ вполне можно программировать императивно.


LP>>Более того, на чистом ФЯ нужно программировать императивно (нужно == приходится). Вопрос — нахрена тогда чистый ФЯ.


EC>Ты перед словом "нужно" забыл поставить иногда.


Если я могу получить все, что мне требуется получить от хаскеля, от какого-нибудь другого языка, в котором можно программировать императивно легко и без усилий, то соответственно предпочтение я буду отдавать именно этому языку, а не хаскелю.

PS Впрочем, я не против Хаскеля. Хаскель — идеальный язык. Жалко, на нем нельзя писать программы.
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[10]: "LINQ как шаг к ФП". Стиль изложения.
От: VoidEx  
Дата: 22.01.09 15:54
Оценка: +1
Здравствуйте, LaPerouse, Вы писали:

LP>Если я могу получить все, что мне требуется получить от хаскеля, от какого-нибудь другого языка, в котором можно программировать императивно легко и без усилий, то соответственно предпочтение я буду отдавать именно этому языку, а не хаскелю.


А "требуется" как правило определяется мышлением, привязанным к тому самому другому языку.
Re[11]: "LINQ как шаг к ФП". Стиль изложения.
От: LaPerouse  
Дата: 22.01.09 16:08
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>Здравствуйте, LaPerouse, Вы писали:


LP>>Если я могу получить все, что мне требуется получить от хаскеля, от какого-нибудь другого языка, в котором можно программировать императивно легко и без усилий, то соответственно предпочтение я буду отдавать именно этому языку, а не хаскелю.


VE>А "требуется" как правило определяется мышлением, привязанным к тому самому другому языку.


Наверное, а разве это плохо? Например, я жалею, что в java нет чего-то навроде LINQ. Почитал статью, очень понравилось. Я уже вижу, насколько я мог бы сократить код,который пишу в данный момент.
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[10]: "LINQ как шаг к ФП". Стиль изложения.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 22.01.09 16:09
Оценка: 2 (1)
Здравствуйте, 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


Тут нам понадобилось ещё третье условие выхода. Мы написали

q <- qPressed `orM` netQuit `orM` someQuitCond


Затем четвёртое, пятое...

q <- foldr orM [qPressed, netQuit, someQuitCond, ...]


В общем не всё так плохо в императивном программировании на чистях ФЯ.
Re[10]: "LINQ как шаг к ФП". Стиль изложения.
От: thesz Россия http://thesz.livejournal.com
Дата: 22.01.09 16:10
Оценка:
LP>Если я могу получить все, что мне требуется получить от хаскеля,

А что требуется?
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.