Please open Telegram to view this post
VIEW IN TELEGRAM
Ты научишься писать сервисы, которые работают в продакшене.
Это не про
«Hello, World» и горутины ради галочки.Это про бэкенд на Go, который:
* выдерживает нагрузку
* обрабатывает тысячи запросов одновременно
* работает быстро и стабильно
* легко масштабируется
* выглядит как реальный сервис, а не учебный проект
Ты начнёшь видеть Go не как язык, а как инструмент для построения систем.
В итоге ты сможешь:
* писать высоконагруженные API
* создавать микросервисы
* работать с базами данных и очередями
* разбираться в конкурентности и производительности
* брать коммерческие backend-проекты
Это навык, который ценится на рынке.
Не «знаю Go», а умею делать быстрые и надёжные сервисы.
🎁 48 часов скидка 50% на Stepik: https://stepik.org/a/274119/
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Rust Books
Она короткая и легко читается и показывает, как оптимизировать код.
В книге разбираются темы:
- benchmarking
- build configuration
- linting
- profiling
- inlining
- hashing
- heap allocations
- и многое другое
Внутри есть много интересных концепций, о которых я раньше даже не слышал.
Книга:
https://nnethercote.github.io/perf-book/introduction.html
@books_englishhh
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Rust
Это полноценный учебник на 300+ страниц, который используется внутри Google для обучения разработчиков Rust. Материал построен так, чтобы пройти путь от базового синтаксиса до продвинутых возможностей языка.
Внутри курса разбираются ключевые темы Rust:
- владение памятью и borrowing
- lifetimes
- структуры и enum
- pattern matching
- generics и traits
- error handling
- concurrency
- async Rust
- работа с unsafe кодом
Отдельный плюс курса - большое количество примеров и практических упражнений, которые помогают быстро понять философию языка.
Если вы хотите разобраться, почему Rust считается одним из самых безопасных и быстрых системных языков - это один из лучших материалов для старта.
google.github.io/comprehensive-rust/comprehensive-rust.pdf
Please open Telegram to view this post
VIEW IN TELEGRAM
⚠️ В России всё чаще блокируют Telegram и другие зарубежные сервисы.
Это значит, что многие IT-ресурсы, каналы и источники новостей могут стать недоступны в любой момент.
Если вы хотите оставаться в курсе технологий, AI и новых фреймворков, лучше заранее иметь альтернативную площадку.
Мы собрали лучшие IT-каналы в MAX, где публикуются:
новости развития AI
новые фреймворки и инструменты
полезные ресурсы для разработчиков
разборы технологий и трендов
ИИ: https://max.ru/ai_machinelearning_big_data
Max Ml: https://max.ru/vistehno
Max Python: https://max.ru/pythonl
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Max Java: https://max.ru/javatg
Max Sql: https://max.ru/sqlhub
Max Devops: https://max.ru/DevOPSitsec
Анализ данных: https://max.ru/data_analysis_ml
C++ : https://max.ru/cpluspluc
C#: https://max.ru/csharp_ci
https://uproger.com/luchshie-kanaly-v-max-po-it-i-ii-podborka-2026-goda/
Это значит, что многие IT-ресурсы, каналы и источники новостей могут стать недоступны в любой момент.
Если вы хотите оставаться в курсе технологий, AI и новых фреймворков, лучше заранее иметь альтернативную площадку.
Мы собрали лучшие IT-каналы в MAX, где публикуются:
новости развития AI
новые фреймворки и инструменты
полезные ресурсы для разработчиков
разборы технологий и трендов
ИИ: https://max.ru/ai_machinelearning_big_data
Max Ml: https://max.ru/vistehno
Max Python: https://max.ru/pythonl
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Max Java: https://max.ru/javatg
Max Sql: https://max.ru/sqlhub
Max Devops: https://max.ru/DevOPSitsec
Анализ данных: https://max.ru/data_analysis_ml
C++ : https://max.ru/cpluspluc
C#: https://max.ru/csharp_ci
https://uproger.com/luchshie-kanaly-v-max-po-it-i-ii-podborka-2026-goda/
Forwarded from 📚Python Books
Claude_Code.pdf
3.9 MB
Claude Code. Полное руководство по AI-ассистенту для разработчиков
Anthropic опубликовали свежий мини-курс по промтингу- в нём описаны лучшие практики по написанию подсказок
Внутри советы по форматированию, описанию задач и агентских сценариях - всё это с примерами и детальным описанием.
https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices
Внутри советы по форматированию, описанию задач и агентских сценариях - всё это с примерами и детальным описанием.
https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices
Forwarded from Data Science
Представьте: через три месяца вы открываете чужой Rust-код и читаете его как книгу.
Arc<Mutex<T>> не вызывает панику. impl Future не пугает. Вы точно знаете, почему компилятор ругается и как это починить за 10 секунд.
Это не фантазия. Это результат 50 уроков, в которых каждая концепция объясняется через код и закрепляется практикой.
Ownership, traits, generics, async, unsafe - всё, что казалось магией, станет рабочим инструментом.А бонусом - портфолио проектов: от CLI-утилит до REST API и WebAssembly.
Вы и так знаете, что Rust - ваш следующий язык. Этот курс просто сделает это реальностью.
Сегодня - 55% процентов от цены, торопись: https://stepik.org/a/269250/
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Data Science
Rust-эксперимент, который красиво объясняет, почему `Vec` почти всегда лучший варинт
Автор взял идею из Linux filesystem: inode хранит метаданные и указывает на блоки данных. Потом задал очень опасный, но полезный вопрос: а что если такую же схему перенести в Rust-контейнер?
Так появился
Звучит умно. На практике CPU быстро объясняет, кто здесь главный.
Обычный
Бенчмарки получились ожидаемые, но от этого не менее полезные: в обычных vector-like сценариях
Когда обход сделали не через
Где такая схема может иметь смысл?
В append-heavy системах, где буфер часто растёт, но редко индексируется посередине. Например, логи, event buffers, tracing pipelines, ingestion queues. Там иногда важнее не копировать огромный непрерывный буфер при росте, чем выиграть каждый отдельный доступ.
Ещё один сценарий - chunk-native processing: стриминговая аналитика, batch transforms, сериализация, компрессия, обработка данных кусками. Если ваша логика работает чанками, а не элементами, paged layout уже не выглядит странным.
Если ваша цель - «сделать Vec, только быстрее», inode-style vector в Rust плохая идея.
Если цель - понять, где именно pointer-heavy layout проигрывает contiguous memory, как легко сломать инварианты через
Иногда лучший результат плохой идеи - не победа в бенчмарках, а момент, когда машина наконец показывает, где именно вы ошибались.
https://sot.dev/inode-style-vector-in-rust.html
Автор взял идею из Linux filesystem: inode хранит метаданные и указывает на блоки данных. Потом задал очень опасный, но полезный вопрос: а что если такую же схему перенести в Rust-контейнер?
Так появился
PagedSmallVec: сначала маленький inline-буфер, потом данные раскладываются по фиксированным чанкам, а не лежат одним непрерывным куском памяти.Звучит умно. На практике CPU быстро объясняет, кто здесь главный.
Обычный
Vec почти всегда быстрее, потому что он делает ровно то, что любит процессор: данные лежат подряд, доступ предсказуемый, меньше переходов по указателям, меньше ветвлений, меньше cache misses. У PagedSmallVec каждый доступ после inline-части превращается в математику по чанкам: вычислить индекс чанка, offset, найти нужный блок, достать значение. Для u32 это особенно больно: там сама операция дешёвая, поэтому накладные расходы контейнера видны сразу.Бенчмарки получились ожидаемые, но от этого не менее полезные: в обычных vector-like сценариях
Vec чаще первый, SmallVec обычно второй, а paged-структура чаще третья. На push, pop, random indexing и ordered remove магии не случилось.Когда обход сделали не через
get(i) на каждый элемент, а чанками через for_each_chunk, структура стала выглядеть гораздо разумнее. Потому что её естественная единица работы - не отдельный элемент, а блок. И вот тут появляется главный урок: плохой API может убить даже неплохую идею, если заставляет структуру данных работать против своей природы.Где такая схема может иметь смысл?
В append-heavy системах, где буфер часто растёт, но редко индексируется посередине. Например, логи, event buffers, tracing pipelines, ingestion queues. Там иногда важнее не копировать огромный непрерывный буфер при росте, чем выиграть каждый отдельный доступ.
Ещё один сценарий - chunk-native processing: стриминговая аналитика, batch transforms, сериализация, компрессия, обработка данных кусками. Если ваша логика работает чанками, а не элементами, paged layout уже не выглядит странным.
Если ваша цель - «сделать Vec, только быстрее», inode-style vector в Rust плохая идея.
Если цель - понять, где именно pointer-heavy layout проигрывает contiguous memory, как легко сломать инварианты через
MaybeUninit, почему unsafe-контейнеры требуют железной дисциплины и почему API должен совпадать с layout, то эксперимент отличный.Иногда лучший результат плохой идеи - не победа в бенчмарках, а момент, когда машина наконец показывает, где именно вы ошибались.
https://sot.dev/inode-style-vector-in-rust.html
Недавно на GitHub наткнулся на отличную открытую книгу: The Accidental CTO.
Автор не из академической среды, но шаг за шагом развил платформу с нуля до уровня, способного выдержать миллион пользователей. В книге не шаблонные ответы про «лучшие практики», а реальный опыт, осел после падений в ямы, тушения пожаров и разборов полетов: как пережить крах сервера в три часа ночи, как догнать задержку репликации базы данных, как поэтапно наращивать архитектуру.
Она через истории раскрывает ключевые концепции распределенных систем, а заодно выкладывает на стол компромиссы за техническими решениями: почему выбрали именно так, какой ценой, как развивать дальше.
GitHub: http://github.com/subhashchy/The-Accidental-CTO
Автор не из академической среды, но шаг за шагом развил платформу с нуля до уровня, способного выдержать миллион пользователей. В книге не шаблонные ответы про «лучшие практики», а реальный опыт, осел после падений в ямы, тушения пожаров и разборов полетов: как пережить крах сервера в три часа ночи, как догнать задержку репликации базы данных, как поэтапно наращивать архитектуру.
Она через истории раскрывает ключевые концепции распределенных систем, а заодно выкладывает на стол компромиссы за техническими решениями: почему выбрали именно так, какой ценой, как развивать дальше.
GitHub: http://github.com/subhashchy/The-Accidental-CTO
Большинство статей про Rust заканчиваются на borrow checker и lifetimes, как будто внутри компилятора живёт только проверяльщик заимствований и злой шрифтовый дизайнер для сообщений об ошибках. На деле там целый зоопарк механизмов, о которых редко пишут даже на конференциях. Я собрал несколько по настоящему любопытных вещей, которые меняют представление о том, как устроен язык изнутри, и подкрепил каждый сюжет кодом, который можно скопировать и проверить самому.
Начнём с того, чего никто не ждёт. Знакомая всем конструкция Option ссылки занимает ровно столько же байт, сколько и обычная ссылка. Это кажется магией: ведь у Option должен быть тег, отличающий Some от None. Никакого тега нет. Компилятор знает, что ссылка в Rust никогда не может быть нулевой, и использует нулевой адрес как представление варианта None. Этот трюк называется niche optimization, и он работает гораздо шире, чем принято думать.
Проверим руками: https://uproger.com/kak-rust-obmanyvaet-proczessor-tajnaya-zhizn-niche-optimizaczii-drop-flags-i-mir/
Please open Telegram to view this post
VIEW IN TELEGRAM
Представьте: через четыре месяца вы открываете чужой .NET-проект и читаете его как книгу.
IServiceCollection не вызывает ступора.
async Task<IActionResult> пишется на автомате. Вы точно знаете, почему EF Core сгенерировал именно такой SQL - и как переписать запрос, чтобы он летал.Это не фантазия. Это результат после 16 модулей, в которых каждая концепция объясняется через код и закрепляется практикой.
ООП, SOLID, LINQ, async/await, DI, EF Core, ASP.NET Core, Docker, Kubernetes - всё, что казалось магией, станет рабочим инструментом.А бонусом - портфолио проектов: от CLI-утилит и REST API до собственного SaaS с multi-tenancy, JWT и деплоем в Kubernetes под TLS.
Скидка - 58% доступна 48 часов: https://stepik.org/a/282984/
Please open Telegram to view this post
VIEW IN TELEGRAM
🦀 Полный roadmap по изучению Rust на русском + большой список ресурсов.
https://github.com/Develp10/rust-roadmap-ru/tree/main
https://github.com/Develp10/rust-roadmap-ru/tree/main
📓 Пять PDF по оптимизации, которые реально стоит сохранить.
Жёсткая база по тому, как код превращается в инструкции, как эти инструкции исполняются процессором и почему иногда «очевидно быстрый» вариант внезапно медленнее.
Что внутри:
1. Optimizing software in C++
179 страниц про оптимизацию C++ под Windows, Linux и macOS. Память, ветвления, компиляторы, SIMD, профилирование и типичные ошибки.
2. Optimizing subroutines in assembly language
156 страниц про x86 assembly. Полезно даже если вы не пишете на ассемблере, потому что после этого проще понимать, что делает компилятор.
3. The microarchitecture of Intel, AMD and VIA CPUs
277 страниц про устройство процессоров: pipeline, кеши, предсказание ветвлений, execution units и прочие вещи, которые напрямую влияют на скорость кода.
4. Instruction tables
485 страниц таблиц с latency, throughput и micro-ops для инструкций Intel, AMD и VIA. Это уже не чтение перед сном, а справочник для тех случаев, когда надо понять, где именно теряется производительность.
5. Calling conventions
60 страниц про calling conventions в разных C++ компиляторах и ОС. Пригодится для ABI, FFI, отладки, reverse engineering и низкоуровневого кода.
Ссылки:
https://agner.org/optimize/optimizing_cpp.pdf
https://agner.org/optimize/optimizing_assembly.pdf
https://agner.org/optimize/microarchitecture.pdf
https://agner.org/optimize/instruction_tables.pdf
https://agner.org/optimize/calling_conventions.pdf
Все пять одним архивом:
https://agner.org/optimize/optimization_manuals.zip
Главная страница:
https://agner.org/optimize/
Если хотите понимать performance не на уровне «ну там компилятор сам всё оптимизирует», а по-настоящему - это хороший старт.
Жёсткая база по тому, как код превращается в инструкции, как эти инструкции исполняются процессором и почему иногда «очевидно быстрый» вариант внезапно медленнее.
Что внутри:
1. Optimizing software in C++
179 страниц про оптимизацию C++ под Windows, Linux и macOS. Память, ветвления, компиляторы, SIMD, профилирование и типичные ошибки.
2. Optimizing subroutines in assembly language
156 страниц про x86 assembly. Полезно даже если вы не пишете на ассемблере, потому что после этого проще понимать, что делает компилятор.
3. The microarchitecture of Intel, AMD and VIA CPUs
277 страниц про устройство процессоров: pipeline, кеши, предсказание ветвлений, execution units и прочие вещи, которые напрямую влияют на скорость кода.
4. Instruction tables
485 страниц таблиц с latency, throughput и micro-ops для инструкций Intel, AMD и VIA. Это уже не чтение перед сном, а справочник для тех случаев, когда надо понять, где именно теряется производительность.
5. Calling conventions
60 страниц про calling conventions в разных C++ компиляторах и ОС. Пригодится для ABI, FFI, отладки, reverse engineering и низкоуровневого кода.
Ссылки:
https://agner.org/optimize/optimizing_cpp.pdf
https://agner.org/optimize/optimizing_assembly.pdf
https://agner.org/optimize/microarchitecture.pdf
https://agner.org/optimize/instruction_tables.pdf
https://agner.org/optimize/calling_conventions.pdf
Все пять одним архивом:
https://agner.org/optimize/optimization_manuals.zip
Главная страница:
https://agner.org/optimize/
Если хотите понимать performance не на уровне «ну там компилятор сам всё оптимизирует», а по-настоящему - это хороший старт.