Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.3K subscribers
1.19K photos
24 videos
933 links
ЛаМПовое с Бобровским
Download Telegram
P.S. Неожиданно заспрашивали "а что это за поисковики?"
Ребята, ну вы чего? Дальше гугла не заходите? :)
Вот правильная подборочка например.
Две важные и неявно связанные проблемные точки в проектировании, характерные для 98% "проектировщиков" -- это скрытая связность/coupling (когда поверхностный выбор конкретного дизайна тонко влияет на множество вещей в проекте), и расползание по коду ваших предположений "как это всё должно работать", которые никак формально не обоснованы (потому что вы не умеете думать на третьем логическом уровне).

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

Однако они находят всё с первой попытки.

Женский кошелёк -- это чёрная дыра (которая внутри ещё больше), и это интересный объект исследования разве что для физика. Но для неё этот хаос имеет тайный смысл. "Это просто! - говорит она, - мужчины просто не могут ничего найти".

То же самое верно и для кода. То, что кажется очевидным для вас, может вообще не иметь никакого смысла для других.

Код -- это прямое выражение того, как вы понимаете проблему, и продолжение вашего образа мышления. Читать чужой код -- это всё равно что изучать, как другой человек мыслит.
(в продолжение вчерашнего)
Однако оказывается, что количество соответствующих стилей мышления у разработчиков очень невелико, для этого с лихвой хватит пальцев одной руки (при условии, что человек не увлекается математической логикой или формальной философией :).

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

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

Ещё в 80-х годах SmallTalk пытался дать нам свободу думать о коде в абстрактных терминах. Больше никаких файлов, только зависимости. Перемещайте что угодно куда угодно, а компилятор сам разберётся.
На то время такой чрезмерно прогрессивный подход не прижился потому, что компьютеры были слишком слабыми. Но вот почему он не возродился сегодня, большой вопрос к "трендсеттерам" ИТ.

Сегодня лучше всего работает сочетание подходов: используйте раскладку файлов по категориям, но не делайте этих категорий слишком много, достаточно по основным функциям и темам предметной области.
Это поразительно: министр цифры обсуждает в госдуме тему отечественного игрового движка! Я совсем не в плане критики, Шадаеву в целом огромный респект за всё, я про то, что сам факт этой детсадовской темы ухитрился добраться до такого уровня! Какие же тайные силы стоят за этой темкой? :)

Напомню, что бесплатных опенсорсных игровых движков полным полно, и на них делают великолепные игры, которые отлично продаются. Ну например, я сам на днях купил в стиме Dome Keeper и Brotato, которые сделаны на очень классном бесплатном Godot. Планы поддержать отечественный геймдев понятны, но ведь и "свой движок" тоже надо сперва заслужить. Сделайте хотя бы сотню игр уровня бротаты, которые будут пользоваться спросом на мировом рынке, потом и просите.

Стоимость создания доморощенного движка оценивается в многие миллиарды рублей. Для сравнения, все проектирование, вся техническая документация американского подводного extra-large (длина 26 метров) боевого робота Orca XLUUV с автономной навигацией обошлись в 43 млн. долл. (пара миллиардов рублей). Даже если найдутся спонсоры для геймдева, не лучше ли эти деньги направить на что-то явно более полезное?
Сильно недооценённый аспект мастерства таится в микро-скиллах ("микрах"). В программировании это например отличное знание генераторов коллекций в Python и флажков grep, отладка специфических видов ошибок, продуктивное использование far/mc, шорткаты vim и т. п.
Мы можем (и должны) целенаправленно тренироваться в подобных микрах.
Заказывал из дома жене со своего аккаунта такси из тэцэ )
Яндекс-такси просит номер телефона "другого" чела, который реально поедет, ввожу без начальной цифры 7/8 (ну и так это должно быть программе понятно), а сервис пишет "неверный формат телефона", и даже не даёт повторной попытки ввода.

Ну, ребята, "на дворе 21-й век", а вы так и не научились валидировать данные в своих клиентах? :)

Почитайте про алгебраические эффекты в TypeScript например, будет крайне полезно всем фронтендерам, всем разработчикам GUI.
Если вы пишете код, чтобы снять стресс, то, вероятно, вам суждено стать разработчиком.
👍1
Грустная закулисная история, как попытки стандартизации UML2 потерпели грандиозный провал из-за бюрократов. Но тогда лучшие специалисты хотя бы пытались добиться глобального прогресса.
Сейчас же весь ИТ-мир отказался вообще от всего передового, кроме косметических улучшений. С другой стороны, это отличный шанс для прорывного развития в парадигме импортозамещения.
А глобально надежда сохраняется в основном в тренде web3, в поколении совсем молодых ребят.
1
Лаборатория Математики и Программирования Сергея Бобровского pinned «Грустная закулисная история, как попытки стандартизации UML2 потерпели грандиозный провал из-за бюрократов. Но тогда лучшие специалисты хотя бы пытались добиться глобального прогресса. Сейчас же весь ИТ-мир отказался вообще от всего передового, кроме косметических…»
Получал ЭЦП для ИП в ИФНС, народу было много, однако весь процесс от получения талончика до получения пропатченного токена занял менее 10 минут: рабочие процессы отлажены идеально. Если бы не одно но: до получения талончика я тоже потратил минут 10 просто на выяснение, а куда вообще нажимать?

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

Как правильно: консультанты собирают в течение дня 5-10 самых частых вопросов, и вечером или с утра айтишники патчат схему меню, чтобы ответы на эти вопросы (дословно, буквально как люди спрашивают - это важно) появлялись сразу на 1-2 уровнях меню.
1
Не перестаю удивляться тому безвыходному тупику, в который ИТ загнало само себя. Например, свежая книга "Linux Kernel Debugging" -- 638 страниц плотного текста. Сколько месяцев её изучать? И это учебник только по одной узкой теме, коих насчитываются в ИТ уже многие сотни, если не тысячи.

Подготовка каждого грамотного специалиста в ИТ обходится сегодня обществу очень дорого, это буквально штучный процесс. И дальше — с учётом всех печальных трендов в ИТ и не только — цена спецов продолжит ещё сильнее расти.
С 1 ноября 2022 г. по 30 апреля 2024 г. начнётся, экспериментальное(!) создание национального репозитория ПО с открытым кодом (аналога GitHub).
А чего экспериментировать-то? Берите и делайте сразу нормально, совершенно ничего уникального тут нету, шаблонный проект.

Найти опенсорсный клон гитхаба на гитхабе и задеплоить его -- работа для миддла на неделю максимум. Даже если делать "своё" с полного нуля, для сеньора с хорошим опытом веб-проектов подобная работа до действующего прототипа на пару месяцев. Сколько будет там храниться доморощенных проектов -- сотни? Ну пускай тысяча. Вполне потянет статический пыхапы-хостинг за 500 рублей.

P.S. Как бы я делал, подобное? :)
Ну, однозначно ориентировался бы прежде всего на то, чтобы сделать не унылый клон сервиса 10-летней давности, пусть и норм работающий, а чтобы объективно вышел мировой топчик, чтобы сразу делать стратегически очень круто, SotA.
Это кстати абсолютно ко всем темам импортозамещения относится: поясните, какие наукоёмкие идеи закладываете? Увы.

Взял бы например за основу DataHub -- продвинутый проект Массачусетского технологического института:

... an experimental hosted platform (GitHub-like) for organizing, managing, sharing, collaborating, and making sense of data. The hosted platform provides easy to use tools/interfaces for:
- Managing your data (ingestion, curation, sharing, collaboration)
- Using others' data (discovering, linking)
- Making sense of data (query, analytics, visualization)
Иммигранты основали более половины американских стартапов стоимостью 1+ миллиард долларов (которых около 600).

Но только это совсем не "призыв к активности", потому что даже в самом лучшем случае "свой ИТ-стартап" выливается примерно в такое: вы пашете три года по 120 часов в неделю, наконец запускаете своё приложение по доставке какой-нибудь фигни по подписке, потом его приобретает компания "Proval & Co", вы получаете единоразовую выплату в размере 50,000 долларов (после того, как инвесторы и налоговики забрали свою долю), и теперь вы пожизненный лидер в своём стартапе, который невозможно продать и который теперь на многие годы превратился в тяжёлую гирю на вашей ноге. Стоит того.

Как правильно? Я бы например поэкспериментировал в web3 -- в течение года сделал бы несколько десятков маленьких приложений в разных профильных темах, и посмотрел на реальный интерес + получился бы отличный нетворк.А стратегически, кто у меня занимается, поизучайте материал курса карьеры "Какой будет следующая большая возможность в ИТ?"
Как же быть, как создать стартап на миллиард долларов? Ну если вы уверены в своей очередной "гениальной" идее... Ко мне раньше каждый месяц цифровые сумасшедшие обращались с просьбами оценить их идею на миллион долларов (которую рассказывают осторожными намёками, вдруг я её украду )))); теперь я таких просто сразу баню.

Дорогие, цена абсолютно любой вашей идеи ноль рублей ноль копеек; сделайте прототип и получите реальную обратную связь. Есть классическое А/Б тестирование. Создаёте пробную версию не более чем за две недели (80..100% обещанной функциональности можете пока выполнять вручную), после чего даёте рекламу и смотрите, будет ли интерес к вашей идее хотя бы немного отличен от нуля. Если конверсия в рекламе хотя бы 1% будет (скорее всего нет), то дальше уже легко смасштабировать расходы (на рекламу и разработку) на возможный доход. Но всё равно следующая итерация не должна превышать 2 месяца, и т. п.

Первый шаг -- создайте стартап хотя бы на тысячу рублей. Это вообще элементарно, но даже на это авторы гениальных идей не способны, как показывает практика :) Поэтому и говорить с ними не о чем.
В vk забросали вопросами "а как это, стартап хотя бы на тысячу рублей?"
Дорогие, ну вы чего? :)
Ну ок. Алгоритм 5 шагов.

1. Определитесь с тематикой, в которой вы шарите: например, GameFi, или машинное обучение, или прозаический классический бэкенд.

2. Ищете по этой теме не менее двух заказчиков на сайтах фриланса, демпингуя по любым заказам до уровня 1000 рублей. Ничего страшного, если работы за такую цену будет куда больше: просто начьните :)
Если получится за большую цену, тоже хорошо; главное, чтобы цена в 1,000 рублей не становилась отмазкой в духе "не возьмусь, это много работы, лучше ещё поищу заказы повыгоднее".

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

4. Повторяйте пункты 2-3, чтобы на протяжении не менее двух месяцев вы выполняли не менее двух заказов одновременно.

5. Теперь повышаете текущую цену в два раза (если была 1,000 -- будет 2,000 рублей; было 4,000 - делаете 8,000 и т. д.), и начинаете сначала.

За первый год такой активности вы получите прекрасный опыт, а на второй год доберётесь уже до достаточно серьёзных заказов, когда можно вполне расширяться и оформлять ИП или даже ООО.
На днях прочитал саркастическую новость, что дескать телекомовское оборудовавние, где теперь работает российский софт по импортозамещению, подорожало на 50%.

Ну +50% -- это очень достойный результат (без иронии), потому что подобные программно-аппаратные проекты крайне сложные в разработке. Даже +500% в нынешних условиях было бы нормально кстати.

В паблике vk немного рассказываю, как стратегически существенно понижать сложность и стоимость подобных проектов. Например, один из американских гуру по встраиваемым системам достиг такого kung fu, что переносил драйверы на новое железо за один час!
Забавная ностальгическая и поучительная история
"Как мы (невероятно криво) делали Старкрафт".
Очень много багов пришлось на самопальные реализации двунаправленных связных списков
(наглядный ответ на вопрос "зачем вообще надо изучать АСД?"):
Unfortunately, each list was "hand-maintained" -- there were no shared functions to link and unlink elements from these lists; programmers just manually inlined the link and unlink behavior anywhere it was required.

Ну ладно, монадические трансформеры не использовались :)
но категорные типы (например, terminal coalgebras) для декомпозиции можно было бы задействовать? а не лепить на коленке эти жуткие иерархии классов.
Это был сарказм :) Один сеньор на миллион такое умеет, а я научу курсантов подобному на формате hard work.