Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.29K subscribers
1.19K photos
24 videos
930 links
ЛаМПовое с Бобровским
Download Telegram
Для меня вполне ожидаемо: SpecFlow традиционно плохо поддерживал кириллицу. Не жалко совершенно.

As cool as a cucumber.
🤔438
Обновлённый список наших блогеров на 08.01.25.

Существенно съёжился :) потому что с 1 января правила занятий в моей Школе стали существенно строже. Теперь в частности любое нарушение правил (например, правил ведения блога) -- просто ликвидация соответствующей возможности без какой-либо обратной связи. В правилах всё расписано максимально подробно.

Больше никого не предупреждаю, не подсказываю, не напоминаю и т.д.
Я чрезмерно вожусь с занимающимися, словно это малые дети, словно их рост нужен мне, а не им. Не хотите следовать моим рекомендациям, считаете, что блог и прочее пустая трата времени, ну ok, без проблем.

Главная задача тренера -- развивать в человеках самостоятельность, мышление чемпионов, ну и ответственность хотя бы за самого себя, за свои собственные поступки. Но в 98% случаев вижу только детский сад штаны на лямках.

/dev в vk сегодня разбираю легендарную статью "Big Ball of Mud": семь классических антипатернов разработки.
134👍15🫡94💯3
"все LLM склоняются к среднему значению" (с)

Классная статья, как пацаны пытались применять ai в реальной программистской работе (лучшим ожидаемо оказался клод 3.5)
"What we learned copying all the best code assistants"

Важно! Есть несколько техник улучшения генерируемого кода, буквально ллм-ке надо просто сказать "пиши код получше, братан!", и она реально будет стараться побольше.
Как давать промпты, которые могут ускорить код в 100 раз (пример):
"Your code is not fully optimized, and you have been fined $100. Make it more optimized."
"Can LLMs write better code if you keep asking them to "write better code"?"
И тоже лучше всего прокатывает с клодом 3.5.

/meta-learn Донам в паблике для начинающих программистов продолжаю выкладывать продвинутые материалы по продуктивному самообучению и тайм-менеджменту.
"Принцип Парето (80/20) — это мощный инструмент для анализа и оптимизации, но его применение может быть глубже и неожиданнее, чем кажется на первый взгляд. Вот четыре малоизвестные и, возможно, контр-интуитивные рекомендации, которые развивают эту идею, основываясь на свежих исследованиях и подходах..."
(через месяц материал сгорит, теперь как и многие другие)
145👍11
Программисты, у которых нет устойчивого личного бренда в эпоху AI, уже в текущем десятилетии практически обречены на выбор новой профессии.
В лучшем случае - на униженное вымаливание среднерыночный зарплаты в офисе 24/7 среди десятков откликов от таких же безликих и никому не известных сеньоров.
1🫡64👍125🤔3😁1
Олег никак не может понять, почему его код постоянно даёт сбои, потому что он изначально не знал, почему он вообще работал. А теперь ещё и AI позволяет плохим разработчикам натворить столько дел, что вам понадобится в разы больше хороших программистов, чтобы потом это всё исправить.

Вам кажется, что разбираться в легасе-коде очень тяжело (я уж молчу о том, насколько тяжелее будет вносить в него правки)? Попробуйте-ка разобраться в объёмном коде, сгенерённом AI, а потом его ещё и посопровождать.

/ai как у меня дыхание перехватило, когда я увидел яндексовские цены на евоный жпт )))
1😁603🤔2🤯2
У них не было проектов, невыполненных заданий, технического долга и длинного бэклога; у них не было списков фич, сюжетных сценариев и оценок продуктивности; у них не было scrum-мастеров и тренеров по гибкой работе; у них не было спринтов, итераций и временных рамок; у них не было аналитиков, тестировщиков и product owner-ов; у них не было ретроспективных обсуждений, тройных сессий amigos и критериев приемлемости; у них не было серверов сборки, стендов UAT и показателей охвата тестированием.
И тем не менее (или благодаря этому всему?) они ухитрялись выкатывать устойчивые сервисы для трейдинга не за месяцы, а за минуты...
=

У меня была идея смоделировать подобный успешный (и крайне редкий) опыт и сделать несколько материалов, а может и курсов, по теме
как выдавать (достаточно качественный) продукт БЫСТРО.

FAST!

...Но если условный миддл будет пытаться ускорить выпуск всего продукта в целом -- например тематически выступая на созвонах -- то результат в 100% случаев будет отрицательным. Все вышестоящие, совершенно независимо от его правоты, просто заклюют комментариями в духе: "лучше своей работой как следует занимайся! стратегия это не твоего ума дело! ишь ты!".
Более того, даже простейшая инженерная эвристика "повысить качество системы через ликвидацию всех предупреждений, выдаваемых линтерами", исходящая снизу, в 99,9% случаев вызовет весьма яростное подгорание и сопротивление ваших всевозможных руководителей. Просто потому, что мейнстрим накрепко прошил им кривой управленческий шаблон "всегда держать лицо".
Хотя, очевидно, такая эвристика повысит качество, возможно, и не сильно, но именно качественно, а не просто количественно, как при тупом повышении процента охвата кода тестами.

...В частности, и по таким причинам, общаться ни с кем выше синьорского уровня у меня желания нету совершенно никакого. Сейчас пропорции курсантов у меня примерно такие: 30% сеньоры, 50% миддлы, остальные джуны и начинающие с нуля, и добавлять новые типы курсантов принципиально не планирую.

Поэтому я решил, что заниматься темой FAST! не буду :)
1🤔45💯17👍10🤝2😁1
...А сосредоточиться в этом году хочу на том, как - ясно и прозрачно, легко и просто, быстро и дорого - упаковывать в своей голове системы всё большего масштаба (миллионы строк кода). Такие своеобразные формальные свёртки проектных знаний с минимумом потерь. Иначе будете как Олег, который никак не мог понять, почему его код постоянно даёт сбои (а потому что он изначально не знал, почему тот вообще работал). Ведь ковыряться в легаси-коде, в неполной документации, в кривой и противоречивой корпоративной wiki можно бесконечно и чаще всего совершенно непродуктивно. Да и пилить с нуля систему, которая уже на втором десятке тысяч строк стремительно превращается в big ball of mud, ничуть не лучше.

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

Первые три обязательных шага Базы (курсы по ним я сделал, будет отдельный трек):
-- Ясное Легаси
-- Ясное TDD по Кенту Беку
-- Ясное BDD

Они дадут прежде всего минимальное понимание темы, без которого что-то изучать дальше бессмысленно. Но там как раз и начинается самое интересное: как например вывернуть BDD "наизнанку", стать инди-хакером, взламывающим, как Эллиот Андерсон, дебильные организационные процессы, "организованные" бездарными и никчемными менеджерами, не сверху, а снизу, через корпоративный КОД.
=

"Цель разработки ПО -- создание фрагментов или срезов, которые умещаются в человеческом сознании. Программное обеспечение продолжает расти, но возможности человеческого мозга ограничены, поэтому, чтобы продолжать вносить изменения, мы должны продолжать фрагментировать".
-- Кент Бек

Как это сделать — фундаментальная тема программной инженерии. К счастью, есть набор эвристик, которые могут помочь. Сколько их? Я отобрал (буквально, отжал у ряда гуру computer science :) где-то около 50-ти. При том, что практически каждая из них автономна (как вышеупомянутая про устранение предупреждений линтера), и вы сможете хакать и править с их помощью кривейшие организационные процессы разработки в вашей конторе практически сразу же после изучения, при этом никак не согласовывая свою подпольно-революционную активность ни с кем, кроме адекватных понимающих сеньоров.
2👍52🔥1332🤝2
Курсантам на треке "Элитный программист" выложил БАЗУ: мощный материал "Дофаминовый детокс" (как обмануть свой мозг, чтобы он начал с удовольствием делать сложные вещи).

Вероятно, у вас нет проблем с компьютерными играми или постоянным просмотром соцсетей. Также нет сомнений в том, что перед экраном вы можете сидеть целый день, не теряя концентрации (например, при игре в Доту2 за боевого петуха). Но подумайте об обучении в течение хотя бы одного часа… УФ!! Это может быть тяжело. Или даже поработать над своим сайд-проектом в течение часа… Хм. Звучит не так привлекательно. Одно занятие лёгкое и не требует особых усилий , а другое сложное и требует приложения усилий. Однако некоторым людям нравится длительно заниматься сложными видами деятельности (например, мне), и не особо уставая. Как стать таким же?..

/boost Я завёл бусти 🙈 Пока исключительно в тестовых целях, хочу понять, насколько там реально продавать отдельные материалы в виде платных постов для всех. Платных подписок не планируется! Опубликовал там целиком "Дофаминовый детокс", пока 99 рублей. Ну или отнеситесь к этому просто как к донату :)

картинка — это стёб, если вдруг кто не понял.
69🔥5210🫡5🐳32
🔥 СРОЧНО! СЛИВ ИНФОРМАЦИИ ОТ ИЗВЕСТНОГО СЕНЬОРА!

Вы до сих пор пишете async/await как джун?
Ваш код похож на спагетти из промисов?
Тимлид морщится, глядя на ваши асинхронные функции?

STOP! 🛑

Я раскрою вам СЕКРЕТНЫЕ ТЕХНИКИ, которые применяют только 1% элитных JavaScript-программистов!

В этом ЭКСКЛЮЗИВНОМ материале вы узнаете:
- 💣 Убойные паттерны работы с асинхронным кодом
- 🏃‍♂️ Как избежать "callback hell" раз и навсегда
- 🎯 Продвинутые техники обработки ошибок
- 🚀 Секреты оптимизации производительности
- 🧠 Мышление сеньора при работе с промисами

БОНУС!
Получите готовые шаблоны кода, которые используют в FAANG-компаниях!

Эти знания стоят $500/час консультации, но сегодня вы получите их практически БЕСПЛАТНО! Всего за 49 рублей!
Уже завтра цена сильно вырастет!

НЕ ПОВТОРЯЙТЕ типичных ошибок миддлов
ПИШИТЕ код как настоящий сеньор

Перестаньте писать async/await в JavaScript подобным образом! Вот как это делают сеньоры => Забирайте знания ТУТ, пока они доступны!

Время продаж ОГРАНИЧЕНО!

#javanoscript #programming #async #senior #development

(Если серьёзно, статья действительно содержит полезные практики по работе с асинхронным кодом в JavaScript и поможет существенно улучшить качество асинхронной логики).
1😁56💯126🐳5🫡1
СРОЧНО УХОДИМ с node.js, который всё теснее связывается с недружественной облачной коммерческой экосистемой vercel, на независимые альтернативы.
Прежде всего это
- Vite (a blazing fast frontend build tool powering the next generation of web applications)
и
- Remix (a full stack web framework that lets you focus on the user interface and work back through web standards to deliver a fast, slick, and resilient user experience. People are gonna love using your stuff).
1🤯33209🫡7💯3
qBittorrent -- лучший торрент-клиент, в нём нет ни рекламы, ни фишинга, ни другого мусора, говорили они...

В конце октября 2024 года разработчики выявили и устранили существовавшую более 14 лет уязвимость в системе безопасности qBittorrent, позволявшую злоумышленникам совершать MITM-атаки на пользователей.

Совершенно не удивлён, и дальше, по мере роста объёмов кода, безумно ускоряемого "с помощью" AI, будет только хуже.
1🤔49💯13🫡7🤝1
Есть ОДНА архитектурная тема, которую надо всегда держать в уме ПЕРВОЙ, если вы взялись за разработку системы, которая в перспективе может существенно вырасти по нагрузке. Это БАЗА System Design, чтобы вам ни говорили разные умные курсы, учебники или техдиры на собесах.
Причём из этой абстракции одной произрастает почти всё остальное: управление нагрузкой и асинхронщина, надёжность и декомпозиция, балансировка и детерминизм, и многое многое другое. Как ещё например вы сможете обеспечить low cohesion между микросервисами, если без ЭТОГО.

И это не просто один из квадратиков, который надо не забыть куда-то впихнуть в диаграммку system design, когда вас на собесе попросили "спроектировать архитектуру нетфликса". Это базовая архитектурная парадигма.

(пауза)

Конечно же это ОЧЕРЕДИ (сообщений, задач, потоковой обработки...)

Только не забывайте, что Kafka это pull, а RabbitMQ это push.

"Мелочи не играют решающей роли, они играют всё!"
-- Харви Маккей,
"Никогда не пейте в одиночку, или Копайте колодец до того, как почувствуете жажду"
"Как плавать среди акул"
(его книги очень рекомендую кстати)
151😁11🤔6💯2
Ещё одна эвристика инди-хакеров: тайно включаем все предупреждения по максимуму, и превращаем их в ошибки, чтобы прод был идеально чистым на 100%.

roslyn\csc.exe GameEngine.cs /warn:4 /warnaserror

javac -Xlint:all -Werror GameEngine,java


С линтерами посложнее, но тоже вполне реально.
1🤔51💯11❤‍🔥44😁1
Я хорош настолько, насколько хорош мой последний проект. (И точка.)

Пример? Трудолюбивый китаец запилил полноценную ОС на 1,000 строк кода + подробный гайд.

А чего добился ты?
1👍49🤯206🤔5🏆4
Считается (считалось), что Java и C# -- это языки во многом схожие (и по синтаксису, и по семантике). Различаются они в основном по стандартным библиотекам, интеграцией с ОС, экосистемой и фреймворками. А что в 2024-м?
Anonymous Quiz
41%
на сегодня эти языки так и остались во многом схожими
59%
на сегодня это уже непохожие и совершенно разные языки
1🤔42🏆4👍1
Курсантам доступен 105-й материал СильныхИдей
"Как типично работает пятничный деплой"

1. Обновили прод.
2. Через 2 минуты стало ясно, что что-то пошло не так. В специально выделенный для этого канал условного шлака или чего-то другого подобного внутрикорпоративного посыпались множественные сообщения о каких-то ошибках SQL.
3. Вскоре выяснилось, что это было нарушение ограничений распределённой транзакции. Условно говоря, если топливо ракеты уже сожжено, то откатить транзакцию обратно не представляется возможным.
4. Так как мы начитались условного Сергея Бобровского, то откатиться назад и в коде уже не могли. Ведь правильная стратегия развития любой системы (без иронии):
двигаться только вперёд.
5. Через 5 минут мы выкатили обновлённый PR с хотфиксом.
6. Ошибки в проде прекратились.
7. Через час у нас был готов полный пакет обеспечения логической консистентности.

Однако мы, как почтальон Печкин, не отправили его, потому что развертывание в пятницу в 16:53 кажется слишком экстремальным даже для меня. Особенно когда все системы (вроде бы) работают, а проблема после фикса может уже подождать.

Да, но почему тесты не выявили этого??
(если конечно они у вас вообще были)
1😁41👍15🤔5
Давно обещанный минималистичный mp3-плеер. Используете его as is.
Сюда прицеплять не буду, мало ли, вдруг захочу что-то подправить, Поэтому забирайте с "официальной" странички.

Там собственно никаких пояснений и не требуется: скачиваете архив, распаковываете во вневременную папку, и можете вручную задать в проводнике ассоциацию файлов mp3. Но мне неохота было возиться с реестром, мьютексы мутить, через win32 искать уже запущенный экземпляр... поэтому при щелчке на музыкальный файл текущий запущенный продолжит работать без переключения на новый файл. Может и подправлю со временем. Возможно, регулировку rate стоит сделать не через 0,1 а через 0,05.

В UI полторы кнопки "открыть файл" + play/stop, и ещё две для регулировки скорости воспроизведения. Текущие настройки сохраняются в каталоге, откуда плеер был запущен.
Ну и из самого стокового windows media player (мой плеер по сути просто враппер вокруг него), доступно стандартное контекстное меню настроек. Можете и только его поставить.

Приятного прослушивания.
148🤔117🏆3👏2
Ставь 🐳 если ждёшь от меня 100% рецептов, как разбогатеть с помощью программирования, при этом работать исключительно на удалёнке, и делать дневные тикеты на каждой из N параллельных работ максимум за часик,

а глубокомысленные темки вроде гомотопической теории типов совершенно по барабану 🥁
1🐳127😁30🤓15🤔149
Многовато конечно, больше сотни 🐳 жаждут 100% рецептов как разбогатеть в айтишке :) Я безусловно буду и дальше в этом помогать, но без постоянной прокачки ума вам никак не стать x10-x100 программистом.

Если вы просто натренируетесь CRUD-у и js-формошлёпству типового миддлства в типовом стеке java/spring, c#/net, python/django, php/laravel/wp, ну, и очередную работу будете по определению искать соответствующую типовую, в массовке, и вряд ли будете особо отличаться даже от голодного энергичного джуниора, хорошо освоившего жпт (если вообще не проигрывать ему).

Тупик? Вовсе нет!

=

Какой может быть ваша топовая продуктивность на сегодня? Фиксируйте, сколько строк отлаженного кода в час в среднем вы пишете (если конечно вас менеджеры не дёргают постоянно:) вот тогда точно тупик, ищите нормальную работу, и никаких опенспейсов конечно). Затем замерьте свою механическую скорость набора кода с клавиатуры. У опытных программистов в среднем она около 50 WPM (с автодополнением), у джунов 10-20 WPM.
В строке кода java в среднем 5 слов. Допустим, за рабочий день вы закомитили в мастер 100 качественных строк (включая отладку, рефакторинг, тестирование соответствующей логики), или 500 слов, что на самом деле весьма немало.

Но за эти 480 рабочих минут - даже на стандартном сеньорском уровне - механическим набором вы могли однако выдать аж 24,000 слов, или 4800 строк кода. То есть на данный момент вы реализуете лишь ДВА ПРОЦЕНТА своего потенциала :)

Хотя на самом деле даже в такой стандартной ситуации не два, а вообще всего ОДИН процент, если вы не пользуетесь vim-ом, который рвёт редакторы стандартных ide раза в два, особенно в редактировании.

Удалить слово:
daw (1 секунда) vs. ctrl+backspace + перемещения (3 секунды)
Переименовать переменную в файле:
:%s/var/new_var/gc (3 секунды) vs. shift+F6 + ввод имени (до 10 секунд с подтверждениями)
etc

Но для этого, понятно, у вас в уме должна формироваться молниеносно, на быстром мышлении S1, в условном подсознании, в соответствующим образом прокаченных нейронных модельках вашего мозга - сразу после вдумчивого прочтения тикета - схема его реализации в пределах O(N) (в крайнем случае O(N log N)). Если задание сложное — то как декомпозировать его за O(N).
А какие-то технические детали вы можете получать в реальном времени через речевой диалог с жпт (непосредственно в процессе непрерывного фонового набора кода вслепую).

И это ещё я взял совершенно типовую ситуацию мэйнстрима и уровень programming in small: шаблонный стек, шаблонные задачки, где, казалось бы, никакого роста уже быть не может.
А вот оказывается, даже на ровном месте рост вполне возможен раз в СТО.

А представляете, когда задачи нетиповые, особенно на уровне programming in large, где абстрактный сферический конь и близко не валялся? Да там выдать тысячекратную продуктивность на фоне других вообще как нечего делать.

И, да, я заранее знаю все ваши возражения, которые разберу далее.

...

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

А какой самый первый правильный шаг? Он для джуниоров, если вообще не для начинающих, но 💯 вы его не делали. Это не вина ваша, а беда, просто потому что вас никто этому не учил.

Скоро выложу соответствующий большой материал -- БАЗУ -- на бусти и для донов в вк.
158👍12🔥6🏆3🤔2
Оцените, сколько примерно в среднем строк отлаженного кода вы за МЕСЯЦ комитите в мастер и деплоите в прод?
Прикиньте сперва пожалуйста, не спешите.
Anonymous Poll
33%
до 1000 строк
27%
до 3000 строк
7%
до 5-7k строк
2%
до 10-15k строк
1%
более 15k строк
24%
я таким ещё не занимаюсь
6%
я таким уже не занимаюсь
👍42😁2
Я знаю, что всё, что вы хотели -- это "упростить". Вам просто был нужен способ уведомлять некоторые свои сервисы об изменении данных -- этакая реактивность-лайт, ничего сложного.

Выделенная система фоновых заданий? шина сообщений? асинхронные воркеры? служба очередей? Слишком. YAGNI -- заявили вы, помянув всуе какую-то бритву и обрезание лишних сущностей, будучи уверенным, что сможете без особых проблем и последствий разбросать несколько вызовов API по проекту (не будучи знакомым даже с понятием аспектов из AOP, и как их правильно готовить).

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

Я с сожалением вынужден сообщить вам, что, несмотря на ваши самые лучшие намерения, вы зачем-то пытались создать Erlang, и естественно, что такая задача оказалась вам не под силу.

Let it Crash.
Too big to fail.
zen of erlang
1🤔43👍113😁1