tag:blogger.com,1999:blog-654279083390275842.post4776929859745782582..comments2024-03-19T12:22:43.654+03:00Comments on Размышлизмы eao197: [prog.work.flame] Следуя правилам чужого блогаeao197http://www.blogger.com/profile/17283739752119445290noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-654279083390275842.post-3759147734436946872012-03-23T18:24:42.764+03:002012-03-23T18:24:42.764+03:00С подавляющим большинством задач ООП стравляется п...<i>С подавляющим большинством задач ООП стравляется прекрасно</i><br /><br />У меня очень большие подозрения что хороший структурный + плюс какое-то средство обобщения + средство для полиморфизма будет в большинстве случаев справятся не менее прекрасно.<br /><br />Таких императивных языков пока не видно, есть golang, но в нем не хватает шаблонов/генериков. <br />Хотя на C++ вполне можно писать в таком стиле.<br />Из ФЯ ML семейство (особенно OCaml) все что нужно в принципе имеют.Rustamhttps://www.blogger.com/profile/17746482246614094380noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-53546122935745651912012-03-23T18:17:29.356+03:002012-03-23T18:17:29.356+03:00В любом случае нужно будет пойти на какие-то компр...<i>В любом случае нужно будет пойти на какие-то компромиссы.</i><br /><br />лучше быть богатым и здоровым, чем...<br /><br />в смысле: лучше иметь хороший язык, который не требует от людей компромиссов (точнее, требует меньше компромиссов, чем предшественник)<br /><br /><i> Если мы имеем команду из людей, которые умеют просто слушать и просто объяснять, то такой подход будет более чем объективным.</i><br /><br />нет, он ни разу не объективен<br /><br />Его Величество Случай может бросить монетку и она 4 раза упадет решкой - в результате заказчик изменит требования и случится то, что "лишняя сущность" окажется востребованной, и проект придется <b>пере</b>писывать (а не <b>до</b>писывать, как это было бы в случае наличия оной "лишней сущности")<br /><br />еще раз повторю - да, процедуры выработки решения группой людей интересны, но недостатки языка они лишь обходят, а не компенсируют полностьюимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-81852512418373841922012-03-23T17:58:28.570+03:002012-03-23T17:58:28.570+03:00@имя:
однако в бОльшей части случаев оно либо не ...@имя:<br /><br /><i>однако в бОльшей части случаев оно либо не потребуется, либо будет разрулено где-то (далеко) перед этим кодом</i><br /><br />Дык в том-то все и дело. С подавляющим большинством задач ООП стравляется прекрасно. Для узких ниш, конечно, нужны свои инструменты.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-81679863346077628542012-03-23T17:51:36.708+03:002012-03-23T17:51:36.708+03:00@Rustam
языком, который можно назвать "научн...@Rustam<br /><br /><i>языком, который можно назвать "научным" является Standard ML 97</i> <br /><br />соглашусь<br /><br />и именно к нему надо было приделывать фотку эйнштейна на обложке журнала "практика ФП", а не к хаскелюимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-88329876922947519482012-03-23T17:46:34.485+03:002012-03-23T17:46:34.485+03:00Нахрена на всем этом навешивать клюкву из систем т...<i>Нахрена на всем этом навешивать клюкву из систем типов, из чистых функций, из протаскивания через них состояний объекта?</i><br /><br />если тебе потребуется полноценная многопоточность/параллельность/конкурентность, то возможно наиболее естественным путем будет именно такая клюква<br /><br />собственно, потому и возник интерес у людей к хаскелю<br /><br />однако в бОльшей части случаев оно либо не потребуется, либо будет разрулено где-то (далеко) перед этим кодомимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-12785955603292222222012-03-23T17:38:04.352+03:002012-03-23T17:38:04.352+03:00@имя:
>рискну предположить, что для thesz-а ха...@имя:<br /><br /><i>>рискну предположить, что для thesz-а хаскель это не ФП, а скорее система типов (хотя, конечно, и ФП до некоторой степени тоже)</i><br /><br />Да в том-то и дело, что я не очень понимаю, чем же функциональщики занимаются. Страдают какой-то херней на типах.<br /><br />Вот, скажем, потребовался мне объект, который дозирует исходящий трафик исходя из предшествующей нагрузки и некоторых параметров. В ООП я определяю нужный мне интерфейс. Потом реализую его, упрятывая детали реализации под капот. При этом изначально понятно, что это будет объект с состоянием, с несколькими методами-мутаторами и несколькими методами-читателями. В обычном ОО-языке все это делается легко и непринужденно.<br /><br />Нахрена на всем этом навешивать клюкву из систем типов, из чистых функций, из протаскивания через них состояний объекта?<br /><br />И, что самое важная, такого рода задачка -- она ведь одна из десятков, а то и сотен задачек в рамках даже не очень большого проекта. Который нужно сделать с должным качеством и в срок.<br /><br />ООП с такими вещами справляется на ура. И смысла менять шило на мыло я не вижу. Пусть даже это мыло будет на системе типов :)eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-59256753596624815752012-03-23T17:19:02.262+03:002012-03-23T17:19:02.262+03:00@имя
решается субъективно, что не есть хорошо
Ну...@имя<br /><br /><i>решается субъективно, что не есть хорошо</i><br /><br />Ну... Тут как в чате по профильному предмету - есть слушающие, есть имеющие право голоса. Если подобрать отличную команду, то коллективное решение будет, всё-таки более или менее объективным. В любом случае нужно будет пойти на какие-то компромиссы. Если мы имеем команду из людей, которые умеют просто слушать и просто объяснять, то такой подход будет более чем объективным. Потому что в аргументах и контр-аргументах будет достаточная доля математики. И мое любимое выражение (UNIX разработчик как-никак) - KISS ("Keep It Simple, Stupid!").TheIvanhttps://www.blogger.com/profile/11931314459288488151noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-9474298944774146682012-03-23T17:13:34.236+03:002012-03-23T17:13:34.236+03:00Что-то я пока не видел, чтобы ФП в этом смысле ушл...<i>Что-то я пока не видел, чтобы ФП в этом смысле ушло дальше от структурного подхода.</i><br /><br />рискну предположить, что для thesz-а хаскель это не ФП, а скорее система типов (хотя, конечно, и ФП до некоторой степени тоже)<br /><br />в качестве доказательства вот: <a href="http://thesz.livejournal.com/1299356.html" rel="nofollow">http://thesz.livejournal.com/1299356.html</a>имяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-10596022705771916862012-03-23T17:11:42.354+03:002012-03-23T17:11:42.354+03:00@Евгений
В простом структурном есть один недостат...@Евгений<br /><br />В простом структурном есть один недостаток очень слабый полиморфизм. Он как раз и мешает модульности. В ФЯ такого недостатка нет, этого уже хватает чтобы ФЯ был не хуже чем ООП.Rustamhttps://www.blogger.com/profile/17746482246614094380noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-65326998454805406852012-03-23T17:09:42.987+03:002012-03-23T17:09:42.987+03:00... не плодить ненужных сущностей. Ответ на этот в...<i>... не плодить ненужных сущностей. Ответ на этот вопрос можно дать, я считаю, только с помощью коллективного обсуждения</i><br /><br />мои цели несколько иные - не научиться отвечать на этот вопрос ("сущность лишняя или нет?"), а спроектировать такой язык, где потребность в лишних сущностях "на вырост" не возникала бы<br /><br />дело в том, что сущность может быть лишняя сейчас, но потребоваться в будущем; и вопрос "а это нам будет нужно или нет" решается субъективно, что не есть хорошоимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-70118505347097406942012-03-23T17:05:06.466+03:002012-03-23T17:05:06.466+03:00@имя
Насколько я знаю единственным, более-менее р...@имя<br /><br />Насколько я знаю единственным, более-менее распространенным языком, который можно назвать "научным" является Standard ML 97, для него существует полное математическое формальное описание синтаксиса и семантики. Правда язык не чисто функциональный а гибридный.Rustamhttps://www.blogger.com/profile/17746482246614094380noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-27115643031714827392012-03-23T17:02:46.998+03:002012-03-23T17:02:46.998+03:00@имя:
Да не в Хаскелле дело, вообще-то. Просто я ...@имя:<br /><br />Да не в Хаскелле дело, вообще-то. Просто я пришел в ООП из простого структурного программирования. И видел, как ООП реально повышает и модульность, и разграничивает ответственность. Да и вообще позволяет бороться со сложностью путем наслоения обозримых и управляемых слоев абстракций.<br /><br />Что-то я пока не видел, чтобы ФП в этом смысле ушло дальше от структурного подхода.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-58259120411137137342012-03-23T16:59:10.717+03:002012-03-23T16:59:10.717+03:00@buffovich:
Проблема с UML в том, что он восприни...@buffovich:<br /><br />Проблема с UML в том, что он воспринимается (а может и преподносится) как инструмент для проектирования. Хотя на деле это не более чем форма записи. И как инструмент он такой же, как ручка или бумага.<br /><br />Но почему-то от UML-я ждут каких-то чудесных результатов.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-54001159862054711912012-03-23T16:56:40.414+03:002012-03-23T16:56:40.414+03:00@buffovich
т.е. не-опытные программисты будут выд...@buffovich<br /><br />т.е. не-опытные программисты будут выдавать слишком много такого шума "вот неудобство/недостаток языка!!1111", и с ними поэтому общаться бесполезноимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-15557420479450358082012-03-23T16:54:02.669+03:002012-03-23T16:54:02.669+03:00@имя
govnokod.ru - хороший тренинг сбивания собст...@имя<br /><br />govnokod.ru - хороший тренинг сбивания собственной спеси. Смех тоже бывает в профилактических целях. :-)<br /><br />overdesign - хорошее слово. Запомнить надо. (не ирония)<br /><br />А насчёт третьего этапа мне понравился совет, кажется, Гради Буча (или Бутча?) - не плодить ненужных сущностей. Ответ на этот вопрос можно дать, я считаю, только с помощью коллективного обсуждения. Вот дать на митинге ответ на вопрос "что это?". Можно с матами.<br /><br />И я немного скептически отношусь (ну - простите меня) к таким технологиям, как UML. Если не получается объяснить что-то на живом языке или хотя бы "игрой в крокодила" на митинге - сразу должно возникнуть подозрение на улёт в метафизику. В моих pet-projects и на работе сложилась именно такая практика для объяснения, например внешних интерфейсов моей части работы и идиом использования этих интерфейсов. Желательно в идеале описывать все односложными предложениями, или просто демонстрацией использования этих интерфейсов. Если где-то есть хитрые алгоритмы, то достаточно будет сказать о их математической сложности и как проводились стресс-тесты.<br /><br />Но безусловно достоинства UML я никак не принижаю и как-нибудь углублюсь в изучение этого предмета.TheIvanhttps://www.blogger.com/profile/11931314459288488151noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-63215223759516672752012-03-23T16:52:03.010+03:002012-03-23T16:52:03.010+03:00@buffovich
Я опытный программист? O_o. Надеюсь н...@buffovich <br /><br /><i>Я опытный программист? O_o. Надеюсь не ирония</i> <br /><br />"опытный" может пониматься в разных смыслах<br /><br />речь идет о том, что ты должен не генерить шум вида "вот неудобство/недостаток языка!!1111" когда на самом деле тут имеется удобный известный способ вопрос решить<br /><br />хотя конечно что понимать под удобством и общеизвестностью...<br /><br />паттер "визитор", например, общеизвестен, но с моей точки зрения - неудобный костыльимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-20550230205656703672012-03-23T16:44:20.047+03:002012-03-23T16:44:20.047+03:00@buffovich
недоговорил мысль:
полноценный язык ...@buffovich <br /><br />недоговорил мысль:<br /><br />полноценный язык должен давать возможность "нарастить" дизайн в любой точке (ну почти), примерно как ооп позволяет сделать потомка любого класса (за исключением финальных)<br /><br />а поскольку языки неполноценны, и возможности нарастить дизайн в любой точке у них нет, приходится создавать "точки роста" дизайна заранее<br /><br />вот этот вот код для создания "точки роста" на будущее как раз и является лишним, ибо *сейчас* он не нужен<br /><br />кстати, языки с динамической типизацией кое в чем лучше языков со статической именно в плане того, что "точки роста" там вовсе не обязательно закладывать заранее, а можно отложить на будущее, когда потребность возникнет<br /><br />если эти рассуждения кажутся слишком абстрактными, вот пример: форвардинг, т.е. "сохранить все аргументы некой функции и потом передать их другой функции в качестве аргументов"<br /><br />если нам нужен форвардинг, его обычно нужно запланировать заранееимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-77752686354936767702012-03-23T16:40:04.324+03:002012-03-23T16:40:04.324+03:00@имя:... (скажем ты, eao197, или другие)
Я опытны...<i>@имя:... (скажем ты, eao197, или другие)</i><br /><br />Я опытный программист? O_o. Надеюсь не ирония )TheIvanhttps://www.blogger.com/profile/11931314459288488151noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-71746867303610306992012-03-23T16:29:27.746+03:002012-03-23T16:29:27.746+03:00@еао197
количество малолетних далб!!бов, которые ...@еао197<br /><br /><i>количество малолетних далб!!бов, которые проходят через этот проект</i><br /><br />определенно да!<br /><br />приходится рассчитывать на них, т.к. им придется читать и модернизовать этот код<br /><br />вот мыщъх на рсдн вообще пишет о случае, когда из-за того, один из разрабов не понимал что такое callback, вместо коллбэков сделали итераторы<br /><br />ужасно конечно, но может быть и оправданоимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-36879978729652276952012-03-23T16:23:37.716+03:002012-03-23T16:23:37.716+03:00Третий - рассматриваю любую тривиальную задачу в п...<i>Третий - рассматриваю любую тривиальную задачу в перспективе на 15 лет - конструирую на века - в принципе из витания в абстракциях можно и не вернуться. Четвёртый (текущий) - всё тленно и всё рано или поздно будет переписываться</i><br /><br />третий этап -- это как надо было <b>бы</b> писать программы, будь языки программирования совершенны <br /><br />и переход к четвертому этапу -- это фактически осознание несовершенства языков и нарабатывание практического навыка несовершенства обходить, углы срезать, и/или использовать для задач другие языки, несовершенства которых находятся в основном *вне* той задачи, которую ты сейчас решаешь :-)<br /><br />теперь насчет govnokod.ru -- я думаю, туда ходят посмеяться, а не поанализировать код<br /><br />в то же время те случаи overdesign-a что ли, когда ты был приверженцем 3-го этапа, могут быть как следствиями недостатка опыта, так и следствиями неполноценности языка<br /><br />полноценный язык должен давать возможность "нарастить" дизайн в любой точке (ну почти), примерно как ооп позволяет сделать потомка любого класса (за исключением финальных)<br /><br />так вот именно случаи неполноценности языка меня очень интересуют<br /><br />меня интересуют не только случаи неполноценности, но и случаи неудобства, когда их высказывают опытные программисты (скажем ты, eao197, или другие)имяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-62946928483186666452012-03-23T16:07:57.996+03:002012-03-23T16:07:57.996+03:00@eao197 то, что хаскель научен, а ооп нет -- это г...@eao197 то, что хаскель научен, а ооп нет -- это городская легенда, и приверженцы хаскеля ее форсят<br /><br />на самом деле тайпклассы весьма похожи на интерфейсы (как в яве), а АлгТД юзаются в определенных случаях вместо классовых иерархий<br /><br />там, конечно, не 100% аналогия, и афайк (причем надо проверять) ни один из подходов не является строгим подмножеством другого<br /><br />да, хаскель в начале пути имел сильное влияние научного минимализма; это было бы позитивно, но сейчас хаскель (ghc haskell) оброс своими расширениями, и стал похож на с++<br /><br />так что гордиться им особо не чемимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-1078898299163345992012-03-23T15:48:31.098+03:002012-03-23T15:48:31.098+03:00@buffovich:
Если раскрывать скобки, то придется п...@buffovich:<br /><br />Если раскрывать скобки, то придется писать очень долго и много. Бертранд Мейер на тему ООП толмуд на тысячу страниц написал :)<br /><br />Если коротко, то ООП плохо работает на маленьких задачах. Поскольку первоначальные трудозатраты на разработку ОО-модели оказываются слишком большими для проектов. Но чем больше проект, чем дольше времени он идет, тем лучше проявляет себя ООП.<br /><br />Еще одна сторона медали. Динамическая vs статическая типизация. На маленьких задачах с небольшими коллективами динамические языки удобнее и быстрее в разработке, чем статические. Но стоит увеличить объем, стоит работать над проектом в течении 10-15 лет, стоит сменить большую часть проектной команды, как ситуация поменяется на обратную. И многословная дебильная Java будет много удобнее лаконичного и красивого Ruby.<br /><br />Как-то так.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-41625180919933323382012-03-23T15:37:38.402+03:002012-03-23T15:37:38.402+03:00Эммм... )) Теперь я не понял ) Можно раскрыть скоб...Эммм... )) Теперь я не понял ) Можно раскрыть скобки? Претензий никаких нет - просто не улавливаю релевантность.TheIvanhttps://www.blogger.com/profile/11931314459288488151noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-51540566637300700042012-03-23T15:13:46.309+03:002012-03-23T15:13:46.309+03:00@buffovich:
К этому нужно добавит еще и:
- объем ...@buffovich:<br /><br />К этому нужно добавит еще и:<br />- объем проекта;<br />- время активной жизни проекта;<br />- количество малолетних далб!!бов, которые проходят через этот проект;<br />- степень безнадежности проекта;<br />- (не)четкость и (не)стабильность требований к проекту...eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-40262612480679163502012-03-23T14:37:56.663+03:002012-03-23T14:37:56.663+03:00К ООП отношусь довольно спокойно. Как и к новомодн...К ООП отношусь довольно спокойно. Как и к новомодной функциональщине. Уже давно сделал очень интересное наблюдение. Чтобы пользоваться прелестями ООП недостаточно прочитать N книг по нему и пройти курс в университете на тему промышленной разработки ПО. Нужно очень много писать. Чаще и больше. Не стесняясь некоторые куски, которые писал два года назад на известный ресурс govnokod.ru (в целях профилактики здоровой самоиронии). Я лично преодолел несколько этапов (сейчас я буду их описывать, и не стесняйтесь говорить, что я ещё малолетний далб!!б - я принимаю конструктивную критику и ценю хороший юмор). <br /><br /><br />Первый - языки высокого уровня тормозят - пишу на асме. Второй - вот в этом языке есть большее число встроенных плюшек - пишу на нём. Третий - рассматриваю любую тривиальную задачу в перспективе на 15 лет - конструирую на века - в принципе из витания в абстракциях можно и не вернуться. Четвёртый (текущий) - всё тленно и всё рано или поздно будет переписываться, имеет значение НАСКОЛЬКО ты можешь на выбранном языке чётко рассказать машине что нужно делать по теме, цениться внимательность, локаничность и аскетизм. С языками первого этапа всё ясно. Второй этап - Object Pascal и С++. Третий - С++ и Ruby. Ну а четвёртый - неожиданно ловлю кайф и экономлю нервные клетки на Perl, C и Go.<br /><br /><br />Тема просто подтолкнула к излиянию. Прошу прощения за много букв.TheIvanhttps://www.blogger.com/profile/11931314459288488151noreply@blogger.com