Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.29K subscribers
1.19K photos
24 videos
930 links
ЛаМПовое с Бобровским
Download Telegram
...и по СильнымИдеям:

Добавлен 80-й материал "Инварианты и качественный код".
Понятие инварианта (изучали на треке ООАП) неотделимо от качественного кода. Идея в том, что инвариант может быть нарушен только в том случае, если в вашей программе есть ошибка.
Мы как бы закладываем в программу некие неоспоримые утверждения, которые обязательно должны соблюдаться -- в идеале, на уровне невозможности компиляции кода, если инварианты нарушены, но такое возможно пока в основном в языках с зависимыми типами. Но "придумывание" инвариантов -- это искусство ...

И 81-й -- про миграции (ORM-ы с роллбэком). Это сложно, но на практике оказывается ещё сложнее )))

Почему down-миграции, которыми так хвастают многие фреймворки -- дескать это чуть ли не ключевая их фича -- на практике не работают. Разбираем 4 неочевидных подводных камня (в дополнение к highload-курсу по транзакциям).
🔥12👍3🫡21
Rust это отличный DSL для блокчейнов.
А метапрограммирование по воздействию на мозг куда круче любых веществ.
🤔14😁4🫡43
Лучшие тесты выполняются дважды: один раз с моками, другой -- без.

Тест без мокинга наиболее полный, но может упустить некоторые важные моменты. Если вы вызвали API и он вернул правильный результат, это ещё не значит, что вы отправили ему правильный запрос. Вы можете получить неприятные побочные эффекты.

Скоро в СильныхИдеях выложу мощный контринтуитивный материал про правильный подход к организации тестирования крупных систем.
🔥14🤔5🙏31🫡1
Понемногу активирую Волшебный МультиПендаль 2024.

Существенно обновил "дипломный" проект, который в основном делают ребята, кто готовится к работе на бэкенде (для курсантов проект обязателен и бесплатен, но наверное сделаю и платную версию "для всех"). Фреймворк (разные для Java, Python, C#, Go, PHP...), CRUD, REST, отношения между модельками ORM (1-1, 1-многие, многие-многие), авторизация/видимость, пагинация, таймзоны, ui с бутстрапом, геоданные, и ещё немало другого по мелочам. Забираемся внутрь ORM, делаем бота, упаковываем в докер, деплоим.
Это то что было, и вот добавил ещё несколько темок: кэширование, логирование, документирование API, интеграционные тесты, ci/cd, транзакционная работа, микросервисы :)
Всего 34 задания (пока) получилось.

Кто проходил со мной этот проект, рекомендую доделать новые фишки.
317👍4🫡3
При всех разговорах о сложных инженерных профессиях программисты в среднем намного умнее своих коллег из этих профессий. Потому что computer science = абстрактное мышление + решение "головоломок". Абстрактное мышление в целом скорее противоречит инженерным подходам, которые по определению ориентированы на практику и физическую реальность, но оно очень важно для того, чтобы быть умным.

Не зря многие сильные разработчики, хорошо подготовленные в cs, любят философию, а остальные инженеры-"прагматики" наоборот недолюбливают, считая хипстерством; однако ихний прагматизм работает плохо: по всему Подмосковью массовые отключения тепла и электричества. Потому что без формального кодирования соответствующих социально-трудовых процессов вот это вот всё и будет бесконечно продолжаться. А философия с использованием интуиционистской теории типов например позволяет даже гёделевские противоречия покрыть.

Меритократия наше всё.

P.S. Особенно AI-меритократия :) Слава роботам!
22👍9😁64🫡2
А что, deb и rpm всё воюют? Вы за кого?
Anonymous Poll
71%
deb
29%
rpm
🏆81
За какую сторону я -- не скажу , но для меня субъективно разница в основном, что в deb много чего под ключ, но работает часто фигово, а в rpm наоборот -- готовых пакетов поменьше, но работают гораздо устойчивее. И в результате нередко приходится мучиться вот так: "install vim-deb on RHEL".

Между прочим, скрипт-язык свежего vim 9.1 стал поддерживать ООП (даже с абстрактными классами) 😁
🏆13👍81🤔1
Хочу для учебного сервера домашнего игрокомпа взять Xeon E7-8890v4, б/у на авито стоит 20т )))
😁22👍106🤯2😎2
С надеждой жду, что как на смену JavaScript появился великолепный TypeScript (в чём, как обычно, заслуга не microsoft, а гениального Хейлсберга), вот чтобы и на смену SQL наконец появилось тоже что-то взрослое.

Потому что SQL и реляционная модель -- это несовместимые вещи. Например, строки-дубликаты в модели невозможны и недопустимы. А этот ваш NULL фактически создаёт многозначную логику. Вы же никогда не используете его, надеюсь?

Ну и сам по себе SQL -- это нечто совсем низкоуровневое, как Си, условно, ни одной нормальной абстракции в нём нету.
👍24🤔129🫡3😁1
Работа в небольших компаниях: заставьте код работать.
Работа в больших компаниях: заставьте работать асинхронный код.
По сути, единственное различие.

Хотя, кто не проходил курсы по highload-системам и параллельным вычислительным моделям, лепят в любом случае примерно вот такое...
👍30😁63🫡2❤‍🔥1
Кстати да, у меня такое бывало несколько раз :)

Фаундер задумывает очередной киллер-проект мечты, буквально они говорили: "боюсь, как дам рекламу, так набегут сотни тысяч пользователей, будут расхватывать такой продукт как горячие пирожки...", и моё скромное мнение, что хорошо бы сперва сделать A/B тестирование, посмотреть, а есть ли вообще желающие, оценить сколько будет стоит лид и т.д., полностью игнорировалось (что уже показатель того, что фаундер нуль, хотя они конечно считают себя гениями маркетинга), но зато полгода приличная команда пилила продукт, на который потом едва нашлось 10 пользователей ... Ну ок, мы-то получили хорошие денежки на зарплату :)

Поэтому в таких случаях, когда видите, что фаундер лох, максимально поддерживайте его иллюзию про горячие пирожки, а делайте так:

- пилите монолит, никаких микросервисов;

- только горизонтальное масштабирование (на курсе "Ясная Архитектура" даю соответствующий простой паттерн, сразу после разбора типовых хипстерских
говноархитектур :)

- максимально долго держитесь синхронной обработки.
👍38🔥852🫡1
Какие-то бедолаги нагнали 2k ботов в этот канал. Я ни с кем не конкурирую, рекламы у меня тут не было и не будет, наборы по 2-3 человека бывают редко, в этом году даже не знаю, когда. Ну и стоит это, по рублю за бота, кто-то отдал 20 долларов лол ) Зачем? Сходил бы в кафе лучше.

Эти шутникам желаю всяческого добра и благополучия, но ни в коем случае не прибавления ума :) Потому что защита от подобных неадекватов сейчас хороший бизнес, и пусть он развивается и дальше. Причём я нашёл только один нормальный сервис по защите от накруток и очистке от папищеков по времени, и довольно дорогой. А ведь такой сервис запилить вообще несложно, и конкуренции, как я уже не раз говорил, для подобных (да и многих других) сервисов в России нету, потому что западные все недоступны; реально океан возможностей построить свой ит-бизнес.
36👍18🤔8❤‍🔥32
Сегодня был пост про сишечку (что даже в ней надо учиться думать абстрактно, даже стандарты к этому принуждают), но в целом он про то, что, с одной стороны, надо обязательно двигаться в сильные абстракции, фп и cs, но, с другой стороны, невероятно полезно будет покодить на си, ассемблере, и особенно на rust. Например, maestro (лёгкое подмножество ядра Unix) сперва написали на Си, а потом переписали на Rust. Это однозначный тренд замены всего сишного, однако тут вас ждёт много боли и страданий :)

Когда вы возьмётесь за Rust, то будете долго офигевать, сколько вам реально потребуется узнать по самому языку (по языкам Java или Python например полно подробных справочников, но для рабочего программирования вам надо изучить совсем мало) -- но с Rust так не прокатит. А если вы плакали от мутных сообщений компилятора F#, то это до тех пор, пока вы не познакомитесь с компилятором Rust :) и будете часами мучиться с каким-нибудь "cannot return reference to temporary value"...

Тут от вас потребуется невероятно много программистской смекалки для того, чтобы решать самые тривиальные задачи ))) И это крайне полезно.

P.S. Я всегда топлю за то, чтобы изучать темки с высоким порогом входа, чтобы слабаки отваливались сразу 😎
👍41🔥8🤔532
Мечты частично сбываются :)

"...чтобы и на смену SQL наконец появилось тоже что-то взрослое"

=> Vanna
"Chat with your SQL database. Accurate Text-to-SQL Generation via LLMs using RAG"
+ модельку можно дотренировывать на проектную специфику.

Ну да, из F# доступен LINQ, но хотелось бы например полиморфную систему типов в SQL.

А пока что каждый день, пока в мэйнстримовские базы данных не добавлена поддержка sum types, где-то плачет котик...
👍31🤔6🔥521
Божественное поучение от святого cs Эрика Мейера. Внимайте! 🙏
(Rx Ix это Reactive Extensions / Interactive Extensions)
🤔31105👍5👌3
Писать код легко, и именно поэтому это сложно.
🤯27😁1073🤔2
Хаскель: используя в линзе Ван Лаарховена диспетчеризацию, управляемую типом, вы сможете хранить данные по-разному -- в зависимости от типа.

Питон: просто зажми пробелы.
😁21🤔12👍53🫡1
Why do PHP developers prefer to work in the dark? Because they hate “light” errors.
😁34👍8🤔211