(no subject)
Jan. 22nd, 2021 03:12 pmКак программисту, мне должно быть стыдно, что я знаю мало языков и мало работал на разных языках.
Т.е. поначалу я их изучал достаточно много и вполне разных, были там и Лисп, и Плэннер, и Ада, и Пролог, и Форт (в сумме полтора десятка языков, вроде, было к окончанию института) но по молодости функциональное программирование я не оценил, не понял и не освоил нормально (не факт, что и мог бы по имеющимся тогда книгам), ну а потом, с появлением С++, он затмил всё и, казалось бы, более особо ничего было и не надо, ну разве что какой-нибудь ещё более навороченный ООП-язык. Выходит так, что моё изучение разнообразных языков в молодости так и не дало мне хорошего понимания парадигм даже простого "алгоритмического" программирования. Ну хорошо, смысл всякой экзотики типа Пролога понять можно, понятна и красота системы типов Ады, но вот приходит С++ богатый ООП и прочими фичами и, казалось бы, что ещё-то может быть нужно? Увы, но уже подсев до этого на С, я совершенно не понимал недостатков этого языка, в том числе и унаследованных С++, где смешались высокоуровневые парадигмы ООП и низкоуровная модель памяти и прочие низкоуровневые языковые конструкции. Не понимал я и тяжелого конфликта между объектной парадигмой и жесткой типизацией классов.
Опомнился я довольно поздно, но силёнок, повода и желания учить что-то типа java/C# как-то не нашлось, хоть и пытался. Может это и к лучшему, вряд ли я смог бы тогда найти что-то столь же интересное, как то, чем я занимался на С++, но даже и та ж любимая мной синхронизация, даже и неблокирующие синхронизации, на java/C# писались бы тогда куда как веселее, чем на С++ под Виндами. Всё же потратил какое-то время на знакомство с Хасклем (до уровня junior-programmer, пожалуй, всё ж не дотянул, но идей поднабрался и даже раза три выучил и раза три забыл, что такое монады).
Это я всё к тому, что недавно попробовал кой-что настрогать на Питоне (опять же стыдоба, не владеть хоть одним скриптовым языком нормально - я то, что мне надо, всегда писал на С++).
Поначалу впечатления самые приятные. Пишется легко, проблемы решаются элементарно гуглём, бежит сходу, проблемы чинятся элементарно. Через недельку вроде раскочегарился, стал писать всякие generator comprehension и в пару строк закрывать то, на что уходили до этого строк 10. Ну, конечно, это опять же уровень около джуниора, так как в два раза ужать весь свой код я вряд ли бы смог и в целом он был такой... без полёта фантазии и идейных наворотов.
А потом... потом наступило отрезвление, поскольку к моменту, когда программа наконец задышала, изрядно обросла фичами и даже оформилась во что-то вменяемое и легко читаемое, оказалось вдруг, что любое к ней ошибочное добавление потенциально её ломает и эта поломка в 50% случаев видна лишь в рантайме. Да, всё это по прежднему легко отлаживается в дебаггере, но вот, знаете ли, в некий момент, когда сам прогон начал занимать минут 10, мне это как-то надоело. Конечно, кто-то скажет, мол а где ж твои Unit-тесты, test-driven итд итп. Ну да, ну да. Но в языках со статическим типированием и с компиляцией подавляющая часть этих ошибок просто бы не случилась. А об одном годе, когда от меня требовали писать юнит-тесты, я вспоминаю с ужасом и слезами. И отнюдь не потому именно, что не могу и не умею их легко и хорошо писать, а потому, что под эти тесты приходилось прогибать весь девелопмент, и они вдруг начинали определять и (абсолютной порой безумный) дизайн классов, и даже возможность или невозможность добавить те или иные фичи и способ их добавления (скажем, соверешенно невинное и безопасное изменение интерфейса классов приводило к жуткому и абсолютно неадкватному перерасходу времени на переписывание тестов).
Короче, нахрен этот Пайтон. Следующий скрипт буду лабать на Скале или на Хаскеле, вот!
Т.е. поначалу я их изучал достаточно много и вполне разных, были там и Лисп, и Плэннер, и Ада, и Пролог, и Форт (в сумме полтора десятка языков, вроде, было к окончанию института) но по молодости функциональное программирование я не оценил, не понял и не освоил нормально (не факт, что и мог бы по имеющимся тогда книгам), ну а потом, с появлением С++, он затмил всё и, казалось бы, более особо ничего было и не надо, ну разве что какой-нибудь ещё более навороченный ООП-язык. Выходит так, что моё изучение разнообразных языков в молодости так и не дало мне хорошего понимания парадигм даже простого "алгоритмического" программирования. Ну хорошо, смысл всякой экзотики типа Пролога понять можно, понятна и красота системы типов Ады, но вот приходит С++ богатый ООП и прочими фичами и, казалось бы, что ещё-то может быть нужно? Увы, но уже подсев до этого на С, я совершенно не понимал недостатков этого языка, в том числе и унаследованных С++, где смешались высокоуровневые парадигмы ООП и низкоуровная модель памяти и прочие низкоуровневые языковые конструкции. Не понимал я и тяжелого конфликта между объектной парадигмой и жесткой типизацией классов.
Опомнился я довольно поздно, но силёнок, повода и желания учить что-то типа java/C# как-то не нашлось, хоть и пытался. Может это и к лучшему, вряд ли я смог бы тогда найти что-то столь же интересное, как то, чем я занимался на С++, но даже и та ж любимая мной синхронизация, даже и неблокирующие синхронизации, на java/C# писались бы тогда куда как веселее, чем на С++ под Виндами. Всё же потратил какое-то время на знакомство с Хасклем (до уровня junior-programmer, пожалуй, всё ж не дотянул, но идей поднабрался и даже раза три выучил и раза три забыл, что такое монады).
Это я всё к тому, что недавно попробовал кой-что настрогать на Питоне (опять же стыдоба, не владеть хоть одним скриптовым языком нормально - я то, что мне надо, всегда писал на С++).
Поначалу впечатления самые приятные. Пишется легко, проблемы решаются элементарно гуглём, бежит сходу, проблемы чинятся элементарно. Через недельку вроде раскочегарился, стал писать всякие generator comprehension и в пару строк закрывать то, на что уходили до этого строк 10. Ну, конечно, это опять же уровень около джуниора, так как в два раза ужать весь свой код я вряд ли бы смог и в целом он был такой... без полёта фантазии и идейных наворотов.
А потом... потом наступило отрезвление, поскольку к моменту, когда программа наконец задышала, изрядно обросла фичами и даже оформилась во что-то вменяемое и легко читаемое, оказалось вдруг, что любое к ней ошибочное добавление потенциально её ломает и эта поломка в 50% случаев видна лишь в рантайме. Да, всё это по прежднему легко отлаживается в дебаггере, но вот, знаете ли, в некий момент, когда сам прогон начал занимать минут 10, мне это как-то надоело. Конечно, кто-то скажет, мол а где ж твои Unit-тесты, test-driven итд итп. Ну да, ну да. Но в языках со статическим типированием и с компиляцией подавляющая часть этих ошибок просто бы не случилась. А об одном годе, когда от меня требовали писать юнит-тесты, я вспоминаю с ужасом и слезами. И отнюдь не потому именно, что не могу и не умею их легко и хорошо писать, а потому, что под эти тесты приходилось прогибать весь девелопмент, и они вдруг начинали определять и (абсолютной порой безумный) дизайн классов, и даже возможность или невозможность добавить те или иные фичи и способ их добавления (скажем, соверешенно невинное и безопасное изменение интерфейса классов приводило к жуткому и абсолютно неадкватному перерасходу времени на переписывание тестов).
Короче, нахрен этот Пайтон. Следующий скрипт буду лабать на Скале или на Хаскеле, вот!
no subject
Date: 2021-01-22 08:33 pm (UTC)То-то и оно насчет питона. Верное наблюдение. И да, скала более scalable. И я на ней любой скрипт наваляю (скрипты на ней только так пишутся).
Planner, надо же. Куда-то он делся, классный такой язык был, "для онтологий".
no subject
Date: 2021-01-22 08:58 pm (UTC)Мы в школе-универе тоже учили С++ (а еще всякие там бейсики и паскали), но я вообще уже ничего не помню, это было 20 лет назад. Правда, мне не стыдно, я не программист вообще, я максимум могу макрос в экселе написать на VBA.
no subject
Date: 2021-01-22 09:17 pm (UTC)Но вообще, на нём сейчас модно нейронные сети писать, ну и некоторые прочие весьма незаурядные люди писали на пайтоне вполне серьёзные вещи.
no subject
Date: 2021-01-22 09:35 pm (UTC)no subject
Date: 2021-01-23 04:47 am (UTC)rust?
no subject
Date: 2021-01-23 12:41 am (UTC)У Ð¼ÐµÐ½Ñ Ñак бÑло Ñ Ð Ñби когда-Ñо.
СейÑÐ°Ñ Ð²Ð¾Ð½ Скала 3 вÑÑ Ð¾Ð´Ð¸Ñ, где какие-Ñо ÑÑаÑÑе коÑÑки дизайна поÑбиÑали, а ниÑÑÑков подобавлÑли; Ñ Ð¾ÑоÑий повод попÑобоваÑÑ ÐµÐµ. (ÑÑÑ Ñ ÑеоÑеÑик, Ñам еÑе не пÑобовал)
no subject
Date: 2021-01-23 02:46 am (UTC)Т.е. не ÑÑжело, но как-Ñо непÑавилÑно ÑÑо.
no subject
Date: 2021-01-23 07:24 am (UTC)ÐиÑон - да, еÑли на нем пиÑаÑÑ ÐºÐ°Ðº на С++ вÑе бÑÑÑÑо ÑазваливаеÑÑÑ. РеÑли как на ÐейÑике - Ñоже. ÐÑжен какой-Ñо ÑмеÑанÑй Ð¿Ð¾Ð´Ñ Ð¾Ð´. ÐÑе Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð¿ÑогÑамм Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ ÑипизаÑиÑ, но она в ÐиÑоне полÑÐ´Ð¾Ñ Ð»Ð°Ñ.
Ð Ñак знаÑÑ Ð´ÐµÑÑÑок ÑзÑков - не ÑамоÑелÑ, они в иÑоге наÑинаÑÑ Ð¿ÑÑаÑÑÑÑ - в ÐиÑоне пиÑеÑÑ if-Ñ Ñо ÑкобоÑками, а на С++ забÑваеÑÑ Ð¿Ð¸ÑаÑÑ auto или вмеÑÑо auto пиÑеÑÑ var :)
no subject
Date: 2021-01-24 06:35 am (UTC)Ðо Ñ Ð¾ÑоÑемÑ, вÑе небезопаÑнÑе меÑÐ¾Ð´Ñ Ð½Ð°Ð´Ð¾ как-Ñо заизолиÑоваÑÑ, в ÑеоÑии Ð´Ð»Ñ ÑÑого многое Ñделано, но пÑакÑиÑеÑки во Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð¼ÐµÑÑÐ°Ñ Ð¿Ð¸ÑÑÑ Ð²ÑÑ ÑÐ¾Ñ Ð¶Ðµ небезопаÑнÑй код, ÑÑо и Ð»ÐµÑ 20 назад.
Ð ÑзÑÐºÐ°Ñ , конеÑно, инÑеÑеÑен не ÑÑолÑко ÑинÑакÑÐ¸Ñ (Ñ Ð¾ÑÑ ÑÑÑ Ñоже еÑÑÑ ÑÐµÐ¼Ñ Ð¿Ð¾ÑÑиÑÑÑÑ), но более, ÑÑо ли, конÑепÑÑалÑнÑе веÑи. Ðо Ð¸Ñ Ð½Ðµ вÑегда замеÑиÑÑ, поймеÑÑ Ð¸ оÑениÑÑ.
no subject
Date: 2021-01-24 10:19 pm (UTC)ÐÐ¾Ð´ÐµÐ»Ñ Ð¿Ð°Ð¼ÑÑи напÑÑÐ³Ð°ÐµÑ Ñем, ÑÑо нÑжно вÑе вÑÐµÐ¼Ñ Ð¿Ð¾Ð¼Ð½Ð¸ÑÑ, кÑо оÑвеÑÐ°ÐµÑ Ð·Ð° ÑиÑÑÐºÑ Ð¿ÐµÑеменнÑÑ . ÐлÑÑ, ÑаÑÑо Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð½ÐµÐ½Ñжное желание ÑÑиÑаÑÑ Ð±Ð°Ð¹Ñики Ñам, где ÑÑого делаÑÑ Ð½Ðµ надо. РмиÑÑиÑеÑкие вÑлеÑÑ Ð·Ð° гÑаниÑÑ Ð¿Ð°Ð¼ÑÑи Ñ Ð¼ÐµÐ½Ñ Ð±ÑваÑÑ Ñедко :) Т.е. миÑÑиÑеÑкие баги в С++ и во вÑÑÐºÐ¸Ñ Ñи-ÑаÑÐ¿Ð°Ñ ÑлÑÑаÑÑÑÑ Ð¿ÑимеÑно Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ð¹ ÑаÑÑоÑой. ÐÑобенно когда иÑполÑзÑеÑÑÑ ÑÑо-Ñо Ñипа System.Reactive: ÑÑо-Ñо кÑда-Ñо не пÑиÑло или пÑиÑло два Ñаза, и пойди пойми как же Ñак вÑÑло.
no subject
Date: 2021-01-23 08:29 am (UTC)PS
РиÑоговÑй код ÑлиÑком коÑоÑкий ÑÑо Ð±Ñ Ñам налажаÑÑ.
no subject
Date: 2021-01-23 10:50 am (UTC)РобоÑаÑиваÑÑ Ð»ÑбÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑÑ ÑÑÑноÑÑÑ Ð² клаÑÑÑ.
Ð Ñогда на нем можно пиÑаÑÑ Ð´Ð¾ÑÑаÑоÑно болÑÑие ÑиÑÑемÑ.
ЮниÑ-ÑеÑÑÑ Ð¸ пÑоÑие Ð¿Ð¾Ð´Ñ Ð¾Ð´Ñ Ð²Ð¸Ð´Ð° "1000 деÑевÑÑ Ð´Ð¶Ñнов в коÑпоÑейÑе, вÑÐµÐ¼Ñ ÐºÐ¾ÑоÑÑÑ ÑÑÐ¾Ð¸Ñ Ð½Ð°ÑÑолÑко деÑево, ÑÑо 75% вÑемени они могÑÑ Ð¿Ð¸ÑаÑÑ Ð½Ð°Ñиг ненÑжнÑе пÑодÑкÑÑ ÑÑÑоÑки кода" â в жопÑ.