yigal_s: (Default)
[personal profile] yigal_s
Как программисту, мне должно быть стыдно, что я знаю мало языков и мало работал на разных языках.

Т.е. поначалу я их изучал достаточно много и вполне разных, были там и Лисп, и Плэннер, и Ада, и Пролог, и Форт (в сумме полтора десятка языков, вроде, было к окончанию института) но по молодости функциональное программирование я не оценил, не понял и не освоил нормально (не факт, что и мог бы по имеющимся тогда книгам), ну а потом, с появлением С++, он затмил всё и, казалось бы, более особо ничего было и не надо, ну разве что какой-нибудь ещё более навороченный ООП-язык. Выходит так, что моё изучение разнообразных языков в молодости так и не дало мне хорошего понимания парадигм даже простого "алгоритмического" программирования. Ну хорошо, смысл всякой экзотики типа Пролога понять можно, понятна и красота системы типов Ады, но вот приходит С++ богатый ООП и прочими фичами и, казалось бы, что ещё-то может быть нужно? Увы, но уже подсев до этого на С, я совершенно не понимал недостатков этого языка, в том числе и унаследованных С++, где смешались высокоуровневые парадигмы ООП и низкоуровная модель памяти и прочие низкоуровневые языковые конструкции. Не понимал я и тяжелого конфликта между объектной парадигмой и жесткой типизацией классов.

Опомнился я довольно поздно, но силёнок, повода и желания учить что-то типа java/C# как-то не нашлось, хоть и пытался. Может это и к лучшему, вряд ли я смог бы тогда найти что-то столь же интересное, как то, чем я занимался на С++, но даже и та ж любимая мной синхронизация, даже и неблокирующие синхронизации, на java/C# писались бы тогда куда как веселее, чем на С++ под Виндами. Всё же потратил какое-то время на знакомство с Хасклем (до уровня junior-programmer, пожалуй, всё ж не дотянул, но идей поднабрался и даже раза три выучил и раза три забыл, что такое монады).

Это я всё к тому, что недавно попробовал кой-что настрогать на Питоне (опять же стыдоба, не владеть хоть одним скриптовым языком нормально - я то, что мне надо, всегда писал на С++).

Поначалу впечатления самые приятные. Пишется легко, проблемы решаются элементарно гуглём, бежит сходу, проблемы чинятся элементарно. Через недельку вроде раскочегарился, стал писать всякие generator comprehension и в пару строк закрывать то, на что уходили до этого строк 10. Ну, конечно, это опять же уровень около джуниора, так как в два раза ужать весь свой код я вряд ли бы смог и в целом он был такой... без полёта фантазии и идейных наворотов.

А потом... потом наступило отрезвление, поскольку к моменту, когда программа наконец задышала, изрядно обросла фичами и даже оформилась во что-то вменяемое и легко читаемое, оказалось вдруг, что любое к ней ошибочное добавление потенциально её ломает и эта поломка в 50% случаев видна лишь в рантайме. Да, всё это по прежднему легко отлаживается в дебаггере, но вот, знаете ли, в некий момент, когда сам прогон начал занимать минут 10, мне это как-то надоело. Конечно, кто-то скажет, мол а где ж твои Unit-тесты, test-driven итд итп. Ну да, ну да. Но в языках со статическим типированием и с компиляцией подавляющая часть этих ошибок просто бы не случилась. А об одном годе, когда от меня требовали писать юнит-тесты, я вспоминаю с ужасом и слезами. И отнюдь не потому именно, что не могу и не умею их легко и хорошо писать, а потому, что под эти тесты приходилось прогибать весь девелопмент, и они вдруг начинали определять и (абсолютной порой безумный) дизайн классов, и даже возможность или невозможность добавить те или иные фичи и способ их добавления (скажем, соверешенно невинное и безопасное изменение интерфейса классов приводило к жуткому и абсолютно неадкватному перерасходу времени на переписывание тестов).

Короче, нахрен этот Пайтон. Следующий скрипт буду лабать на Скале или на Хаскеле, вот!

Date: 2021-01-22 08:33 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

То-то и оно насчет питона. Верное наблюдение. И да, скала более scalable. И я на ней любой скрипт наваляю (скрипты на ней только так пишутся).

Planner, надо же. Куда-то он делся, классный такой язык был, "для онтологий".

Date: 2021-01-22 08:58 pm (UTC)
ratomira: (Default)
From: [personal profile] ratomira
Pyton - это разве не для детей? (сейчас дети в школах такой язык учат)
Мы в школе-универе тоже учили С++ (а еще всякие там бейсики и паскали), но я вообще уже ничего не помню, это было 20 лет назад. Правда, мне не стыдно, я не программист вообще, я максимум могу макрос в экселе написать на VBA.
Edited Date: 2021-01-22 08:59 pm (UTC)

Date: 2021-01-22 09:35 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
я всю жизнь прожил и до сих пор не понял зачем это жонглирование языками программирования? Когда С заменил ассемблер и появился Юникс - это было логично и понятно. Когда появился этот монстр С++, от которого я честно говоря охренел и понял, что модель фон Неймана - мертва, так как мы двигаемся не туда! Все эти заумствования с монадами, функциональным программированием, скалой и хаскелем, необходимы по моему глубокому убеждению всего лишь для надувания щек и спекуляции на повышении зарплаты программиста. Как-то, работя в Sun Microsystems, я задал вопрос одному Java профессору вопрос, мол что я понимаю, что С++ - это полный кранец, но зачем упрощая его, Java ничего не сделала, чтобы его заменить? И он мне ответил, а что Вы хотите, чтобы любой школьник с индийской деревни, после окончания средней школы мог программировать на Java? Нет и еще раз нет... и тут появился Python! Поезд прибыл и Бобик сдох!
Edited Date: 2021-01-22 09:38 pm (UTC)

Date: 2021-01-23 04:47 am (UTC)
From: [personal profile] dsfhjkl
ammonite.io?
rust?

Date: 2021-01-23 12:41 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Да, это типичная история, многими пережитая и озвученная: если привык к типизированным языкам, то на динамике вроде питона писать что-то больше 200 строк уже очень тяжело. При этом другие люди как-то умеют, и много всего понаписали вплоть до ютюба.
У меня так было с Руби когда-то.

Сейчас вон Скала 3 выходит, где какие-то старые косяки дизайна поубирали, а ништяков подобавляли; хороший повод попробовать ее. (тут я теоретик, сам еще не пробовал)

Date: 2021-01-23 07:24 am (UTC)
From: [identity profile] yatur.livejournal.com
На С++ все очень медленно получается по сравнению с C#, раза в три примерно. Хедер файлы сильно замедляют дело, необходимость прописывать (и менять) сигнатуры методов в двух местах, необходимость вручную следить за временем жизни объектов...

Питон - да, если на нем писать как на С++ все быстро разваливается. И если как на Бейсике - тоже. Нужен какой-то смешаный подход. Еще для больших программ помогает типизация, но она в Питоне полудохлая.

А так знать десяток языков - не самоцель, они в итоге начинают путаться - в Питоне пишешь if-ы со скобочками, а на С++ забываешь писать auto или вместо auto пишешь var :)

Date: 2021-01-24 10:19 pm (UTC)
From: [identity profile] yatur.livejournal.com
Я имел в виду именно скорость написания нового кода. Когда все нужно писать по два раза, плюс помнить, что std::foreach() сидит в , а std::in_range() - . В других языках для этого достаточно просто сказать что-то типа import std.

Модель памяти напрягает тем, что нужно все время помнить, кто отвечает за чистку переменных. Плюс, часто возникает ненужное желание считать байтики там, где этого делать не надо. А мистические вылеты за границы памяти у меня бывают редко :) Т.е. мистические баги в С++ и во всяких си-шарпах случаются примерно с одинаковой частотой. Особенно когда используется что-то типа System.Reactive: что-то куда-то не пришло или пришло два раза, и пойди пойми как же так вышло.

Date: 2021-01-23 08:29 am (UTC)
From: [identity profile] p2004r.livejournal.com
Только R подойдет. Это Схема с нормальным синтаксисом и кучей сахара имитирующем APL(J). Ну и батареек немерено.

PS

А итоговый код слишком короткий что бы там налажать.
Edited Date: 2021-01-23 08:30 am (UTC)

Date: 2021-01-23 10:50 am (UTC)
From: [identity profile] digest.livejournal.com
В Питоне надо заставлять себя самостоятельно следить за типами.
И оборачивать любую минимальную сущность в классы.
И тогда на нем можно писать достаточно большие системы.
Юнит-тесты и прочие подходы вида "1000 дешевых джунов в корпорейте, время которых стоит настолько дешево, что 75% времени они могут писать нафиг ненужные продукту строчки кода" — в жопу.