tag:blogger.com,1999:blog-654279083390275842.post5092930251428631262..comments2024-03-19T12:22:43.654+03:00Comments on Размышлизмы eao197: [prog.flame] Каким же образом знание разных языков делает программиста лучше?eao197http://www.blogger.com/profile/17283739752119445290noreply@blogger.comBlogger32125tag:blogger.com,1999:blog-654279083390275842.post-69916500064838578982011-10-13T14:49:25.952+03:002011-10-13T14:49:25.952+03:00@jazzer:
Вполне возможно. Но мы сейчас закончили ...@jazzer:<br /><br />Вполне возможно. Но мы сейчас закончили двухдневный bug hunting в поисках ошибки, которая возникла из-за желания одного разработчика сделать красивую и стройную архитектуру. А второй из-за этого не смог затем разглядеть детали управления ресурсами, что и привело к ошибке.<br /><br />Хотя все можно было бы сделать намного проще.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-59703363228890783762011-10-13T14:48:58.505+03:002011-10-13T14:48:58.505+03:00> нужно наступить на горло собственным желаниям...> нужно наступить на горло собственным желаниям.<br /><br />А не надо наступать, надо юзать правильные библиотеки ;)<br />Тогда код будет выглядеть вот так:<br /><br />std::cout << join( foo_list | transformed(&Foo::description) | filtered(&std::string::size), "\n" );<br /><br />Имхо, даже читабельнее, чем хаскел и питон вместе взятые, по крайней мере тот код, который приведен в статье ;)jazzerhttps://www.blogger.com/profile/06868666121339270193noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-91492298464691541532011-10-13T14:45:17.345+03:002011-10-13T14:45:17.345+03:00> Это как раз код, который я из-за собственного...> Это как раз код, который я из-за собственного скудоумия предпочитаю не писать вообще.<br /><br />Ты бы посмотрел на тот прекрасный и чистый код, который получается у пользователя, который работает как надо независимо от того, что ты в него засовываешь, сразу взял бы свои слова обратно ;)jazzerhttps://www.blogger.com/profile/06868666121339270193noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-43560012421170512542011-10-13T14:44:05.529+03:002011-10-13T14:44:05.529+03:00@jazzer:
>Кстати, веселая статья в тему
В каж...@jazzer:<br /><br /><i>>Кстати, веселая статья в тему</i><br /><br />В каждой шутке есть доля шутки. Автор-то подметил важную вещь -- когда приобщаешься к языку, который тебе нравится (в моем случае это был Ruby), а потом возвращаешься на тот, за который платят (C++, Java, C#...), то нужно наступить на горло собственным желаниям. И писать так, как принято на "менее выразительном" языке. А не так, как хотелось бы.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-11644322499849765272011-10-13T14:41:38.565+03:002011-10-13T14:41:38.565+03:00@jazzer:
>http://www.rsdn.ru/forum/cpp/3722136...@jazzer:<br /><br /><i>>http://www.rsdn.ru/forum/cpp/3722136.1.aspx</i><br /><br />Это как раз код, который я из-за собственного скудоумия предпочитаю не писать вообще. Ну избегаю использовать библиотеки, написаные в таком стиле, особенно если есть более простые аналоги.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-65247623540957467722011-10-12T14:48:20.241+03:002011-10-12T14:48:20.241+03:00Кстати, веселая статья в тему:
http://lukeplant.me...Кстати, веселая статья в тему:<br />http://lukeplant.me.uk/blog/posts/why-learning-haskell-python-makes-you-a-worse-programmer/jazzerhttps://www.blogger.com/profile/06868666121339270193noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-30320987699782996672011-10-12T14:47:45.559+03:002011-10-12T14:47:45.559+03:00>О каком template pattern matching идет речь?
h...>О каком template pattern matching идет речь?<br />http://www.rsdn.ru/forum/cpp/3722136.1.aspx<br />Но это как раз тот случай, когда кишки наружу из-за синтаксической невозможности достаточно качественно все упрятать.jazzerhttps://www.blogger.com/profile/06868666121339270193noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-76541559772843209672011-09-26T17:45:10.646+03:002011-09-26T17:45:10.646+03:00@имя:
>при наличии в язке, подобном с++, конце...@имя:<br /><br /><i>>при наличии в язке, подобном с++, концептов и хорошего синтаксиса, ситуация должна быть совсем иной</i><br /><br />Не, тут дело в другом. Язык всегда рано или поздно начинает использоваться на грани своих возможностей. И, поскольку изменение языка -- дело не быстрое, его возможности будут пытаться расширять каким-то библиотечным образом. Через экстремальное шаблонное программирование в C++, через анотации или AspectJ в Java, через какие-нибудь трехэтажные монады в Хаскеле.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-56891122664655772882011-09-26T17:36:56.228+03:002011-09-26T17:36:56.228+03:00> Я, например, считаю, что не следует писать та...> Я, например, считаю, что не следует писать такой код, как Boost.Spirit или Boost.Phoenix, не говоря уже про Boost.Lambda. Однако, есть люди, которые придерживаются совершенно противоположного мнения и успешно используют эти вещи.<br /><br />это пример вынужденной субъективности, а не настоящей<br /><br />пока в с++ нет концептов и хорошего синтаксиса, достаточно мощные шаблонные библиотеки будут торчать "кишками наружу" и использовать кривой/кривоватый синтаксис<br /><br />и юзать их будут те, кто кишок не боится, или хотя бы не чурается метода научного тыка для выяснения того, почему вылетела простыня ошибок от компилятора<br /><br />при наличии в язке, подобном с++, концептов и хорошего синтаксиса, ситуация должна быть совсем инойимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-53642109306927387682011-09-26T10:03:31.521+03:002011-09-26T10:03:31.521+03:00@имя:
>хотя конечно нормальный ЯП был бы намно...@имя:<br /><br /><i>>хотя конечно нормальный ЯП был бы намного лучше</i><br /><br />"Нормальный язык" -- это понятие субъективное. А значит его никогда не будет. Поскольку у разных людей разные взгляды на одни и те же вещи.<br /><br />Я, например, считаю, что не следует писать такой код, как Boost.Spirit или Boost.Phoenix, не говоря уже про Boost.Lambda. Однако, есть люди, которые придерживаются совершенно противоположного мнения и успешно используют эти вещи.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-518169843063393152011-09-25T23:08:53.071+03:002011-09-25T23:08:53.071+03:00чтобы разговор был предметным (хотя это конечно от...чтобы разговор был предметным (хотя это конечно отнюдь не лучший пример):<br /><br />std::cout << "Hello, $username";<br /><br />можно транслировать в<br /><br />std::cout << _add2("Hello,", username);<br /><br />_add2, если лень, то может просто складывать строки, а если не лень, то выдавать объект с перегруженным оператором <<, который выводит по порядку обе части и таким образом не создает лишний оверхед проца и памятиимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-51342118702797868682011-09-25T22:25:46.994+03:002011-09-25T22:25:46.994+03:00и насчет жгучести не знаю, но вообще желание приме...и насчет жгучести не знаю, но вообще желание применить некую фишку может приводить к относительно приемлемым вариантам, если жертвовать некоторой частью фишки, или ее универсальной применимостью, или включать сюда предобработку исходника перловым скриптом, и т.д.<br /><br />хотя конечно нормальный ЯП был бы намного лучшеимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-68746080707711510692011-09-25T22:06:03.201+03:002011-09-25T22:06:03.201+03:00вот это:
b) отсутствие жгучего желания воплотить ...вот это:<br /><br />b) отсутствие жгучего желания воплотить в X вот эту классную фишку из Y<br /><br />означает лишь то, что нынешняя индустрия IT находится в говнеимяhttps://www.blogger.com/profile/17115793398497396330noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-37013953883407369602011-09-25T19:16:45.374+03:002011-09-25T19:16:45.374+03:00@Easy:
>И сдается мне, что это будет повторятс...@Easy:<br /><br /><i>>И сдается мне, что это будет повторятся неоднократно, хотя может это только я такой неорганизованный.</i><br /><br />Точно не один.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-59042452896514589012011-09-25T18:52:56.873+03:002011-09-25T18:52:56.873+03:00@Евгений Охотников
>> А цена овладения ими ...@Евгений Охотников<br /><br />>> А цена овладения ими совсем не так велика, как кажется.<br /><br />> я думаю, что хорошая степень владения инструментом обходится не дешево.<br /><br />Да, хорошая степень -- не дешево, да и средняя степень тоже. Но это умеренная цена, если человек собирается долго заниматься программированием, а не мечтает через тройку-пяток годов переметнуться в менеджеры.<br /><br />И, кстати, вы с @NN верно говорите по поводу того, что новые языки могут "мешать". На определенном этапе развития, когда мышление не совсем перестроилось к новым концепциям, это здорово мешает: по-новому еще не можешь, а по старому уже не хочешь, руки не поднимаются. И сдается мне, что это будет повторятся неоднократно, хотя может это только я такой неорганизованный.Anonymoushttps://www.blogger.com/profile/09160844231586983437noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-80870975107037013812011-09-25T10:49:31.290+03:002011-09-25T10:49:31.290+03:00@NN:
Есть такое дело. При этом то, что ты считаеш...@NN:<br /><br />Есть такое дело. При этом то, что ты считаешь правльным (исходя из предпочтений к языку X) в языке Y может оказаться вовсе не правильным. Не смотря на твое собственное к этому отношение.<br /><br />Помнится, Страуструп в "Дизайн и эволюция языка C++" много об этом писал. В частности, о попытках перетаскивания в C++ объектных иерархий с единым корнем наследования.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-34926923557691404632011-09-25T10:31:07.166+03:002011-09-25T10:31:07.166+03:00Знание разных языков так же "мешает", зн...Знание разных языков так же "мешает", знаешь как сделать правильно, а не можешь :)NNhttps://www.blogger.com/profile/16823052781877891385noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-80479659625314366712011-09-25T10:02:15.449+03:002011-09-25T10:02:15.449+03:00@Easy:
> А цена овладения ими совсем не так ве...@Easy:<br /><br /><i>> А цена овладения ими совсем не так велика, как кажется.</i><br /><br />Ну вот вопрос цены меня очень интересует. По собственному опыту -- мне потребовалось около года, чтобы почувствовать т.н. Ruby way и начать программировать на Ruby именно на Ruby. При этом в то время на Ruby я писал даже больше, что на C++.<br /><br />Язык C++ приходится изучать постоянно.<br /><br />Т.е. я думаю, что хорошая степень владения инструментом обходится не дешево.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-82326128921232414392011-09-25T00:30:42.490+03:002011-09-25T00:30:42.490+03:00> Мне кажется, что вы ведете речь о том же, о ч...> Мне кажется, что вы ведете речь о том же, о чем сказал и я -- расширение арсенала разработчика дает ему возможность решать задачу наиболее подходящим инструментом.<br /><br />Если обобщить, то да. Но хотел бы отдельно выделить мысль об увеличении умения подбирать и оценивать новые инструменты, выяснять что они, при некотором обучении, соответствуют текущим потребностям, которые привычными инструментами в данный момент могут и не покрываться. А цена овладения ими совсем не так велика, как кажется.Anonymoushttps://www.blogger.com/profile/09160844231586983437noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-13973425441531309722011-09-24T22:11:44.383+03:002011-09-24T22:11:44.383+03:00@Easy:
Мне кажется, что вы ведете речь о том же, ...@Easy:<br /><br />Мне кажется, что вы ведете речь о том же, о чем сказал и я -- расширение арсенала разработчика дает ему возможность решать задачу наиболее подходящим инструментом.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-44233675204319198872011-09-24T20:13:06.832+03:002011-09-24T20:13:06.832+03:00> Ведь не знание другого языка вас толкнуло на ...> Ведь не знание другого языка вас толкнуло на создание прототипа.<br /><br />Инструментальные средства, в качестве другого языка, могут помочь мне сделать прототип быстрее, или же более ясно понять и проверить разные аспекты идеи. А могут и не помочь (не в той мере, как расчитывал), если я неверно выбрал средство. Удачный выбор средств обусловлен опытом, т.е. для этого нужен опыт в работе с достаточно широким кругом средств выражения.<br /><br />> То, что для прототипа используется другой язык не так важно.<br /><br />Для прототипа -- может и да. Хотя.<br /><br />Когда-то давно нужно было спроектировать и реализовать средней сложности протокол. Диаграмму конечного автомата рисовать вручную не хотелось (я текст лучше воспринимаю), и для макета и описания использовался graphviz, который рисует диаграмы по чистому графу. Получилось очень понятно и компактно, поддерживать было легко. И посмотреть на картинку каждый мог, кто так лучше воспринимает.<br /><br />Но если бы я тогда взял питон или лисп, написал бы на нем генератор законченного модуля, который еще и документацию рисует, было бы получше. Но небольшая была задачка, не стоила она того (как мне казалось).<br />Если бы вместо них я тогда взял хаскель, то за счет мощной типизации получилось бы избежать пары существенных ошибок, которые отлавливались уже в процессе тестирования у клиента, и это только за счет выбора инструмента.<br />Вроде бы язык и не важен, а могло бы быть и несколько удачнее. Если бы я заранее уже знал этот язык в достаточной мере, и имел с ним опыт работы. Зато на будующее я примерно представляю, какие проблемы может для меня решить то или иное средство (и какими затратами это обойдется). Не учи я потихоньку новые языки, фиг бы я даже подозревал об этом.Anonymoushttps://www.blogger.com/profile/09160844231586983437noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-60934056969802095472011-09-24T18:19:14.601+03:002011-09-24T18:19:14.601+03:00@Easy
Огромное спасибо за развернутый ответ.
>...@Easy<br /><br />Огромное спасибо за развернутый ответ.<br /><br /><i>>Но мы понимаем, что вырожденные случаи рассматривать незачем: таким людям и знание одного языка мешает (пытаются навернуть с его помощью такое, что волосы дыбом).</i><br /><br />Просто у меня складывается впечатление, что таких случаев намного больше.<br /><br /><i>>Роди мысль, и никто не мешает потом перевести ее на средства, адекватные повседневным рабочим инструментам заказчика.</i><br /><br />Опять у меня есть впечатление, что ситуация не совсем такая. Упор я бы сделал на саму попытку создания прототипа для проверки идеи -- это уже показатель качества программиста. То, что для прототипа используется другой язык не так важно. Ведь не знание другого языка вас толкнуло на создание прототипа.<br /><br />Как бы то ни было, в арсенале программиста должно быть несколько языков -- один основной (вроде C++, C# или Java), второй из класса скриптовых (Ruby, Python, Perl). Если к этому во время обучения было добавлено еще что-нибудь вроде Prolog, Scheme или Mathematica, то у человека уже приличный кругозор для выбора адекватного задаче инструмента.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-3590221742793685172011-09-24T18:12:00.922+03:002011-09-24T18:12:00.922+03:00@jazzer:
>(см например мой template pattern ma...@jazzer:<br /><br /><i>>(см например мой template pattern matching - казалось бы, какое отношение ПМ имеет к шаблонам, но сам изученный ПМ-подход уже выстраивает мозги в новом направлении и твой арсенал возможных подходов автоматически расширяется).</i><br /><br />О каком template pattern matching идет речь?eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-14609919725810649832011-09-24T17:40:05.539+03:002011-09-24T17:40:05.539+03:00Я поддерживаю мнение, что знание разных языков дел...Я поддерживаю мнение, что знание разных языков делают программиста лучше.<br />В посте уместно затронут момент о глубине знания языка, опыт работы с ним, знание приемов -- это достаточно важно.<br />Говорилось еще о здравом смысле. Прочитав пост, складывается впечатление, что если человек знает разные языки, то он этот смысл теряет (пытается тянуть в один язык из другого ненужные элементы, приемы, итд). Но мы понимаем, что вырожденные случаи рассматривать незачем: таким людям и знание одного языка мешает (пытаются навернуть с его помощью такое, что волосы дыбом).<br /><br />Тут вообще встают вопросы:<br /> - кому помогает изучение языков;<br /> - когда помогает (сразу лекарство действует, или постепенно, или через продолжительное время), а считается ли поздний эффект помощью?<br /> - в чем именно помогает.<br />Ответы не такие простые, требуют хороших примеров. Когда будет свободное время (жаль что не скоро), я постараюсь написать пост об этом, и поделиться ссылкой.<br /><br />Насчет последнего (в чем именно помогает).<br />Вот очень грубая аналогия. Функциии из школьной алгебры можно рассматривать как график, и как уравнение, а еще иногда им принято сопоставлять "физический смысл" (как в школе любили). Некоторые считают, что рассмотрение абстракции в разных представлениях позволяет лучше их понимать. Я скорее с этим согласен, чем нет.<br /><br />Так же и с языками, которые кардинально отличаются друг от друга. Они дают возможность посмотреть на разные подходы к вычислениям. С разных сторон взглянуть на алгоритмическую сложность, на варианты композиции кусков программы, на формирование структур данных и способы работы с ними. Человек лучше ощущает trade-off в достижении одного результата разными способами, как средствами одного языка, так и при использовании разных. При использовании разных языков в уме выделяютс абстракции, которыми раньше не мыслил. Например, вместо "толстеньких" блоков с циклами, внутри которых куча "ручных" вычислений, люди начинают использовать итераторы: новая абстракция изменила композицию. А потом люди понимают, что интерфейс итератора дает маловато.<br /><br />Только считается ли это за помощь? Мне кажется, что под помощью понимают немного разные вещи, в зависимости от желаний. Если человек хочет через пару лет уйти в менеджеры, то ему такая помощь нафиг не нужна, абсолютно. И это логично.<br /><br />Кроме того, человек получает новый инструмент хотя бы только для себя: сделать прототип (или его часть) на более выразительном и удобном языке -- это хорошее подспорье. Если проблема (или ее часть) на нем лучше выражается и понимается, то это уже не мало. Я пока не нарисую, или не опишу -- фиг пойму. А если есть язык, который мне дает возможность коротко и просто сконструировать идею в зародыше, так это вообще чудесно (такую помощь карандашу и бумаге я сильно ценю). Так что, работодатель не оставляет мне выбора? Он что, следит за тем, как я думаю, чем рисую у себя на столе, как проверяю результат? Роди мысль, и никто не мешает потом перевести ее на средства, адекватные повседневным рабочим инструментам заказчика.<br /><br />Как-то сумбурно получилось.Anonymoushttps://www.blogger.com/profile/09160844231586983437noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-18727420025595055362011-09-24T11:46:13.628+03:002011-09-24T11:46:13.628+03:00@Евгений Охотников
Да буст местами сильно радует ...@Евгений Охотников<br /><br />Да буст местами сильно радует :)<br />Но независимо от этого мейнстрим сейчас много впитывает от функциональщины, даже в C++ появились лямбды, так что знания, даже не очень глубокие, функциональных языков большой плюс даже для тех кто пишет только на одном языке.Rustamhttps://www.blogger.com/profile/17746482246614094380noreply@blogger.com