15708
Присоединяйтесь к нашему каналу и погрузитесь в мир Backend-разработки Связь: @devmangx РКН: https://clck.ru/3FobxK
Самые умные люди в интернете в последнее время буквально начали выкладывать свои знания в open source.
Эти 11 GitHub-репозиториев могут сэкономить тебе годы проб и ошибок.
Сохрани себе и изучай постепенно.
1. PilotDeck (OpenBMB)
Open-source фреймворк для AI-агентов. Позволяет развернуть автономного агента за считанные минуты.
GitHub: https://github.com/OpenBMB/PilotDeck
2. andrej-karpathy-skills
Один файл CLAUDE.md с набором правил и практик для AI-программирования.
GitHub: https://github.com/multica-ai/andrej-karpathy-skills
3. MemPalace
Система долговременной памяти для AI-агентов с сильными результатами на LongMemEval.
GitHub: https://github.com/MemPalace/mempalace
4. OpenClaw
Персональный AI-ассистент с открытым исходным кодом.
GitHub: https://github.com/openclaw/openclaw
5. autoresearch
Фреймворк для автоматизации исследований.
GitHub: https://github.com/karpathy/autoresearch
6. awesome-claude-code
Подборка гайдов, практик и рабочих процессов для Claude Code.
GitHub: https://github.com/hesreallyhim/awesome-claude-code
7. agent-skills
Набор production-ready навыков для AI-агентов.
GitHub: https://github.com/addyosmani/agent-skills
8. AI Agents for Beginners
Бесплатный курс из 12 уроков по AI-агентам.
GitHub: https://github.com/microsoft/ai-agents-for-beginners
9. awesome-llm-apps
Одна из крупнейших коллекций готовых LLM-приложений с исходным кодом.
GitHub: https://github.com/Shubhamsaboo/awesome-llm-apps
10. hermes-agent
AI-агент с акцентом на самообучение и развитие поведения.
GitHub: https://github.com/NousResearch/hermes-agent
11. Qlib
Платформа для количественного анализа и алгоритмической торговли.
GitHub: https://github.com/microsoft/qlib
Информационная асимметрия стоит дорого.
Пока одни ежедневно используют такие ресурсы в работе, другие продолжают искать их случайно. Именно так со временем и появляется разрыв в знаниях и навыках.
👉 @BackendPortal
Наткнулся на полезный open-source Email SDK
Он позволяет отправлять письма через единый API вместо того, чтобы писать отдельную интеграцию под каждого почтового провайдера.
Идея простая: если в будущем решишь перейти с одного провайдера на другой, не придётся переписывать большую часть кода, связанного с отправкой почты.
Подходит для:
* SaaS-продуктов;
* веб-приложений;
* AI-автоматизаций;
* AI-инструментов, которые используют email-уведомления, рассылки или почтовые workflow.
Исходники:
github.com/opencoredev/email-sdk
👉 @BackendPortal
Папка /internal в Go — одна из самых неправильно понятых вещей в структуре проекта.
Многие используют её один раз на верхнем уровне, просто чтобы спрятать код от внешнего мира.
Но мало кто знает главное.internal можно вкладывать в internal.
И это меняет всю идею.
Каждый такой уровень создаёт отдельную границу. Один пакет физически не может залезть во внутренности другого, если он не находится в той же области видимости.
Так ты собираешь модульный монолит не из “папок с кодом”, а из жёстко изолированных блоков, где каждый живёт в своём контуре.
👉 @BackendPortal
Я видел, как инженеры с 10-летним опытом проваливали собеседования по System Design на Senior-позиции.
И ошибка почти всегда одна и та же.
❌ «Наша архитектура данных — это React + Node.js + MongoDB»
✅ «Мы используем микросервисную архитектуру с событийным взаимодействием между сервисами, REST API и документо-ориентированной базой данных для обеспечения масштабируемости и гибкости»
Вы потеряете баллы, если будете описывать свой стек технологий вместо архитектурного подхода и причин, по которым были приняты те или иные решения.
Более правильный подход на архитектурном интервью:
1. Начните с ключевых принципов.
Например: «Наша система построена на event-driven подходе, чтобы сервисы оставались слабо связанными друг с другом».
2. Объясните компромиссы.
Например: «Мы выбрали eventual consistency вместо строгой консистентности, чтобы обеспечить высокую доступность системы».
3. Только после этого переходите к инструментам, если это необходимо.
Например: «Для реализации этого подхода мы используем Kafka».
Архитектура — это стратегия: что, зачем и когда.
Инструменты — это тактика: как именно это реализовано.
Архитектура — стратегический уровень. Инструменты — тактический.
Хорошая архитектура переживает смену инструментов.
👉 @BackendPortal
Многие инженеры добавляют кэш, чтобы решить проблему производительности.
В итоге получают две системы хранения данных. (Появляется второй источник истины.)
Вот в чём разница:
Write-Through Cache → приоритет консистентности данных
Write-Behind Cache → приоритет производительности, допускается временная неконсистентность и риск потери данных
Write-Through — кэш и база данных обновляются одновременно при каждой записи.
(Представьте доску, которая в реальном времени синхронизируется с общим документом.)
Write-Behind — данные сначала записываются в кэш, а затем позже сбрасываются в базу данных.
(Представьте, что вы делаете заметки на доске, а в общий документ переносите их только в конце дня.)
Практическое правило:
Если устаревшие данные недопустимы → используйте Write-Through.
Если критична скорость записи → используйте Write-Behind.
👉 @BackendPortal
Если вы программируете на Windows, стоит обратить внимание на Windows Developer Config от Microsoft.
Инструмент позволяет подготовить машину для разработки одной командой.
Что умеет:
✓ Настраивает WSL и Ubuntu
✓ Устанавливает Windows Terminal
✓ Ставит Node.js, Python, Rust, Go, Java, .NET, PHP и другие инструменты
✓ Автоматизирует настройку рабочего окружения
Проект полностью открытый и доступен на GitHub.
👉 @BackendPortal
Один вопрос по Kubernetes, который мне попадается снова и снова на собеседованиях:
Что происходит с запросом на пути от интернета до Pod'а?
В 1991 году финский студент просто хотел разобраться, как устроены операционные системы.
Он начал изучать MINIX, небольшой Unix-подобный проект, который профессор Эндрю Таненбаум создал для обучения. Ничего масштабного, просто учебная ОС.
В какой-то момент студент написал в интернете:
«Я делаю (бесплатную) операционную систему. Просто как хобби, она не будет такой большой и профессиональной, как GNU...»
Хотите понять, как подключить LLM к реальным рабочим процессам, а не просто гонять промпты в чате?
В этом курсе Ania Kubów показывает, как собрать и задеплоить AI-агента для Slack с нуля.
По ходу курса вы:
• Поднимете Slack-бота на базе GPT-4.
• Настроите Node.js, Express и Slack Bolt.
• Подключите PostgreSQL для хранения данных.
• Развернёте проект через Render.
• Научите агента искать и привлекать новых участников сообщества.
Получается не очередной демо-чатбот, а полноценный агент, встроенный в рабочий процесс команды.
Курс: Build Your Own AI Agent with Node.js and Slack
👉 @BackendPortal
В 2006 году один разработчик из Мумбаи начал писать менеджер электронных книг для себя.
Спустя почти 20 лет его проектом пользуются около 3 миллионов человек из 236 стран каждые два месяца.
Его зовут Ковид Гоял. Проект называется Calibre. И да, он до сих пор остаётся главным разработчиком. Последний релиз вышел всего неделю назад.
Calibre бесплатный, open-source и распространяется под GPL-3.0. Работает на Windows, macOS и Linux.
Что умеет:
• читает почти любой формат электронных книг: EPUB, MOBI, AZW, AZW3, KFX, PDF, CBR, CBZ, DOCX, TXT и другие;
• конвертирует книги между форматами в пару кликов;
• редактирует метаданные, обложки и теги;
• управляет библиотеками на тысячи книг;
• отправляет книги напрямую на Kindle, Kobo, Tolino, телефон или планшет;
• умеет поднимать локальный сервер, чтобы читать свою библиотеку через браузер.
Сейчас у проекта почти 25 тысяч звёзд на GitHub и около 2.9 миллиона активных установок за последние 60 дней.
Пожалуй, один из лучших примеров того, как личный pet-проект может пережить десятки хайп-циклов индустрии и стать стандартным инструментом для миллионов людей.
Настоящая цифровая библиотека выглядит именно так: книги принадлежат тебе, а не экосистеме устройства.
https://github.com/janeczku/calibre-web
👉 @BackendPortal
Лето начинается: водные развлечения, гриль на острове и новые маршруты в бутик-отеле «Заонежье»
Для гостей бутик-отеля «Заонежье» к новому сезону подготовлены лесные трассы для первых заездов на новых квадроциклах — они позволяют исследовать дикие уголки карельской тайги и скалистые берега озер. Велопрогулки по дорогам Заонежья стали еще комфортнее благодаря электробайкам, которые этой весной пополнили велопарк отеля.
В мае, в отеле открылся сезон водных развлечений: гостям доступны сапы, каяки и весельные лодки. В этом году пользование ими - комплементарное для всех гостей. Также появились новые маршруты для катеров по заливам Онежского озера.
Ресторан «Руна» представляет летнюю серию гриль-сетов, которые можно приготовить самостоятельно на одном из необитаемых островов или устроить барбекю на лужайке у дома. В меню — овощные и рыбные сеты, а также мясное ассорти.
Бутик-отель «Заонежье» приглашает к активному отдыху среди озер и северной природы Карелии.
Tail Call Optimization (TCO) — это оптимизация, которая позволяет не создавать новый стековый кадр (stack frame) для вызова функции, если вызывающая функция просто возвращает результат этой функции.
Чаще всего это встречается при хвостовой рекурсии (tail recursion).
Допустим, у вас есть рекурсивная функция:
const recur = (args) => {
doSomething(args);
return recur();
}recur(). Назовём его Call 1.recur(). Назовём его Call 2.return recur();
O(1)
O(n)
Разработчик пишет такой код для обработки 1000 пользовательских записей:
const users = await db.getAll();
await Promise.all(
users.map(user => sendEmail(user))
);
console.log('Done');
Promise.all() не ограничивает конкурентность.Promise.all() не является очередью задач.const limit = pLimit(10);
await Promise.all(
users.map(user =>
limit(() => sendEmail(user))
)
);
📎 Смотрите записи докладов с Backend Talks от Яндекс 360
На конференции обсуждали решение прикладных архитектурных задач и разбирали реальные инженерные кейсы. Будет полезно и интересно вне зависимости от стека.
➕ Направленный ациклический граф в PostgreSQL: как мы научили реляционную базу хранить оргструктуру на 500 000 пользователей. Малик Минубаев, разработчик в B2B-платформе, рассказал, почему стандартные паттерны хранения иерархий не работают для ориентированного ациклического графа. А также сравнил несколько вариантов Closure Table с бенчмарками на реальной нагрузке
➕ Как Яндекс Диск выдерживает сотни гигабит входящего трафика: устройство балансировки загрузок. Илья Абрамов, разработчик в Диске, разобрал, почему нам не подошёл подход «как у всех», и показал эволюцию алгоритма балансировки загрузок: от наивного Round-Robin до разработки собственного алгоритма
➕ Как формировать технологический стек и не погибнуть в священных войнах: от хаоса к процессам и техрадару. Дмитрий Сафонов, руководитель команды разработки платформы микросервисов, рассказал, как строить стек для промышленной разработки и разрешать споры о технологиях. А также поделился опытом внедрения Техрадара в Яндекс 360
➕ Зачем и как бэкендеру расти в карьере в 2026 году. Дмитрий Соломонов, руководитель группы B2B-разработки бэкенда Диска, рассказал, как развивать команду с помощью индивидуальных планов и выбора узкой специализации для разных уровней разработчиков. И поделился, как связать получение знаний с реальными задачами
➕ Семь раз подумай, один раз пошардируй: как мы начали горизонтально масштабировать метаданные чатов Телемоста. Никита Звонарев, разработчик в Мессенджере, рассказал, что может предпринять команда, когда вертикально масштабироваться уже не получается, а сервису нужно функционировать дальше в условиях возрастающей нагрузки, и как при этом не устроить себе проблемы в будущем
Лучший способ понять, как серверы работают на самом деле, — написать пару серверов с нуля.
Автор подготовил серию упражнений, которые помогут вкатиться в socket programming на C, Python и Go:
Написать TCP-клиент для telemetry server
https://labs.iximiuz.com/challenges/write-tcp-client-for-telemetry-server
Написать TCP-клиент для chat server
https://labs.iximiuz.com/challenges/write-tcp-client-for-chat-server
Написать TCP echo server с нуля
https://labs.iximiuz.com/challenges/write-tcp-echo-server
Сделать один echo server, который работает и с TCP, и с Unix sockets
https://labs.iximiuz.com/challenges/write-stream-echo-server
Одна из самых детальных шпаргалок для Backend-разработчика на русском языке. Внутри: от базового устройства интернета и ПК, до работы с базами данным, разработки API и тестирования продуктов.
Весь материал преисполнен разными таблицами и картинками для лучшего усвоения, вся информация подаётся кратко и понятно, а если захотите изучить детальнее — везде есть ссылки на источники.
👉 @BackendPortal
Многие разработчики путают эти 3 HTTP-метода:
PUT
PATCH
POST
Самый простой способ запомнить:
POST → создать новый ресурс
POST /users
Создаёт нового пользователя.
PUT → полностью заменить ресурс
PUT /users/123
Если отправить только имя, остальные поля могут быть перезаписаны, потому что PUT подразумевает замену всего объекта целиком.
PATCH → обновить только изменённые поля
PATCH /users/123
Отправляешь только:
{ "email": "[new@example.com }
Обновится только email.
Короткое правило:
POST = создание
PUT = полная замена
PATCH = частичное обновление
Мнемоника:
POST → отправить новый объект
PUT → поставить новую версию вместо старой
PATCH → наложить патч на существующий объект
Правильный выбор HTTP-метода делает API более предсказуемым, REST-совместимым и проще в поддержке.
👉 @BackendPortal
Хочешь разобраться в распределённых системах с нуля?
Начни с этих 10 тем:
Distributed Systems Reading List
https://github.com/theanalyst/awesome-distributed-systems
System Design Primer
https://github.com/donnemartin/system-design-primer
MIT 6.824 (Distributed Systems)
https://github.com/chaozh/MIT-6.824
System Design 101
https://github.com/ByteByteGoHq/system-design-101
Awesome Scalability
https://github.com/binhnguyennus/awesome-scalability
Raft Consensus Visualization https://github.com/ongardie/raftscope
Apache Kafka https://github.com/apache/kafka
Apache Cassandrahttps://github.com/apache/cassandra
etcd github.com/etcd-io/etcd
👉 @BackendPortal
Твой запрос к JSONB — не медленный. Ты просто используешь не тот индекс.
Допустим, ты хранишь события вот так:
{
"user_id": "123",
"status": "completed",
"source": "mobile"
}SELECT * FROM events WHERE payload @> '{"status":"completed"}';jsonb_path_ops — индексы будут компактнее и быстрее.
Salesforce внедрила 20 000 корпоративных AI-агентов.
Главный вывод оказался неожиданным:
Для классического ПО 90% работы происходит до релиза.
Для AI-агентов всё наоборот — 90% работы начинается после запуска.
В интервью с Джоном Кучерой, CPO Agentforce, обсудили, что отличает агентов, которые приносят реальную пользу бизнесу, от тех, что так и остаются красивым демо.
Одна из ключевых мыслей:
Команды, которые считают запуск финишной чертой, застревают на стадии пилота.
Команды, которые воспринимают запуск как стартовую точку, масштабируют решения дальше.
В материале разбирают:
→ Почему большинство корпоративных агентов терпят неудачу
→ Что нужно подготовить до запуска: scope, KPI и guardrails
→ Как выглядит feedback loop, без которого невозможно масштабирование
→ Три анти-паттерна, выявленных на основе 20 000 внедрений
→ Куда движется архитектура агентных систем
👉 @BackendPortal
Foundations of Computer Science от Alfred Aho и Jeffrey Ullman доступна бесплатно онлайн.
Классический учебник по информатике, который охватывает:
• конечные автоматы
• формальные языки
• теорию вычислений
• основы алгоритмов и вычислительных моделей
Хорошая отправная точка для тех, кто хочет разобраться в фундаментальных концепциях Computer Science, лежащих в основе компиляторов, языков программирования и теории вычислений.
Книга:
http://infolab.stanford.edu/~ullman/focs.html
#computerscience #book #theory #cs
👉 @BackendPortal
Если делаешь приложение или API, где важна скорость ответа, Redis может сильно разгрузить бэкенд.
Вместо того чтобы каждый запрос снова лез в базу данных, часто запрашиваемые данные кладутся в память. Следующие запросы получают их сразу из кэша, без лишних обращений к БД.
Маниш разобрал, как работает in-memory кэширование в Redis, как его настроить и как внедрить на реальном примере.
Полезный материал для тех, кто хочет уменьшить задержки, снизить нагрузку на базу и ускорить API.
https://freecodecamp.org/news/how-in-memory-caching-works-in-redis/
👉 @BackendPortal
Митап для Java-разработчиков — 18 июня, Екатеринбург
В программе 2 доклада от бэкендеров Яндекс Вертикалей про неочевидные продакшн-баги в Java и Spring, переход на Temporal:
🟥 NullPointerException на инициализированном final-поле. Как такое вообще возможно? Расскажет Михаил Черноскутов из Яндекс Путешествий
🟥Переезд со scheduler-сервисов на Temporal. Зачем он понадобился и какие были подводные камни, ответит Герман Михайлов из Яндекс Недвижимости
После выступлений участников ждёт «Громкий вопрос» — интеллектуальная игра по мотивам одноимённого шоу. А также нетворкинг с коллегами и единомышленниками.
🗓18 июня (четверг), 18:00 — 22:00
📍 Ельцин Центр, Екатеринбург
→ Подробности и регистрация
Это тот самый гайд, который мне хотелось бы получить в первый день изучения Computer Science.
В нём шаг за шагом объясняется, начиная с одного транзистора, почему компьютер большую часть времени не занимается вычислениями, а просто ждёт данные из памяти. По сути, он гораздо меньше похож на калькулятор, чем кажется.
Понимание этой идеи полностью изменило то, как я читаю и пишу код, и автор постарался объяснить её так, чтобы это стало понятно и вам.
Если вы до сих пор не разобрались, что такое memory wall, то упускаете один из самых сильных моментов «озарения» во всей компьютерной науке.
Автору потребовалось больше 20 дней глубокого ресёрча и много работы, чтобы изложить это максимально просто.
Вот статья: https://abhisheklearn12.github.io/blogs/memory.html
👉 @BackendPortal
API Design Complete Roadmap
|
| | |-- Fundamentals
| |-- Introduction to APIs
| | |-- What is an API
| | |-- API architecture basics
| | |-- Client-server communication
| |-- Types of APIs
| | |-- REST APIs
| | |-- GraphQL APIs
| | |-- SOAP APIs
| | |-- gRPC APIs
| |-- HTTP Fundamentals
| | |-- Requests and responses
| | |-- HTTP methods
| | |-- Status codes
| | |-- REST API Design
| |-- Resource-Based Design
| | |-- Nouns over verbs
| | |-- Resource naming conventions
| |-- CRUD Operations
| | |-- GET
| | |-- POST
| | |-- PUT/PATCH
| | |-- DELETE
| |-- URI Design
| | |-- Clean URLs
| | |-- Nested resources
| | |-- Request & Response Design
| |-- JSON Best Practices
| | |-- Consistent structures
| | |-- Error responses
| |-- Data Validation
| | |-- Input validation
| | |-- Output formatting
| |-- Pagination
| | |-- Offset pagination
| | |-- Cursor pagination
| | |-- Authentication & Authorization
| |-- API Keys
| |-- JWT Authentication
| |-- OAuth 2.0
| |-- Role-Based Access Control (RBAC)
| |-- Permission Management
| | |-- API Security
| |-- HTTPS
| |-- Rate Limiting
| |-- CORS
| |-- Input Sanitization
| |-- Preventing API Abuse
| |-- Secure Secret Management
| | |-- API Documentation
| |-- OpenAPI Specification
| |-- Swagger UI
| |-- API Reference Docs
| |-- Request Examples
| |-- SDK Documentation
| | |-- API Versioning
| |-- URL Versioning
| |-- Header Versioning
| |-- Semantic Versioning
| |-- Backward Compatibility
| | |-- Performance Optimization
| |-- Caching Strategies
| | |-- Browser caching
| | |-- Server-side caching
| |-- Compression
| |-- Query Optimization
| |-- Response Time Monitoring
| | |-- Advanced API Patterns
| |-- GraphQL Fundamentals
| |-- gRPC Services
| |-- WebSockets
| |-- Event-Driven APIs
| |-- API Gateway Pattern
| |-- Microservices Communication
| | |-- Testing APIs
| |-- Unit Testing
| |-- Integration Testing
| |-- End-to-End Testing
| |-- Postman Testing
| |-- Automated API Testing
| | |-- Monitoring & Observability
| |-- Logging
| |-- Metrics Collection
| |-- Distributed Tracing
| |-- Error Tracking
| |-- API Analytics
| | |-- Deployment & Scalability
| |-- Docker for APIs
| |-- Kubernetes Basics
| |-- Load Balancing
| |-- Horizontal Scaling
| |-- CI/CD for APIs
| | |-- Real World Projects
| |-- Design a RESTful Blog API
| |-- Build an E-commerce API
| |-- Create a Chat Application API
| |-- Develop a Payment Gateway API
| |-- Build a URL Shortener API
| |-- Design a Social Media API
| | |-- Interview Preparation
| |-- REST API Interview Questions
| |-- Authentication Scenarios
| |-- API Security Challenges
| |-- System Design for APIs
| |-- Performance Optimization Questions
| | |-- Community and Growth
| |-- Build Public API Projects
| |-- Publish APIs on GitHub
| |-- Write API Design Articles
| |-- Contribute to Open Source
| |-- Stay Updated with API Standards
👉 @BackendPortal
Open NotebookLM — бесплатная open-source альтернатива NotebookLM.
Генерирует подкасты и позволяет общаться со своими документами через чат.
https://github.com/lfnovo/open-notebook
👉 @BackendPortal
🚀 Курс “Простой ООП до PRO” на Python!
ООП — это не просто очередная тема в программировании. Это база, которую должен понимать каждый разработчик.
Классы, объекты, наследование, инкапсуляция, полиморфизм, композиция и паттерны встречаются почти во всех языках: Python, Java, C++, C#, JavaScript и других.
Что внутри:
• классы и объекты;
• __init__, методы, self, атрибуты;
• наследование, super() и MRO;
• полиморфизм, duck typing и абстрактные классы;
• инкапсуляция, @property, геттеры и сеттеры;
• композиция и агрегация;
• магические методы и перегрузка операторов;
• итераторы, генераторы, модули и пакеты;
• паттерны проектирования;
• финальный проект — RPG-игра.
🎓 12 разделов, 52 урока, практика, поддержка 24/7 и доступ навсегда.
Забрать курс со скидкой 40%:
🔗 https://sudoteach.com/course/oop
Один учёный из Дании решил автоматизировать отклики на вакансии через Claude Code. А потом выложил весь проект в open source.
Его зовут Mads Lorentzen. Он PhD-геофизик, а не основатель стартапа. Сделал инструмент для себя и опубликовал его под лицензией MIT.
Как это работает:
Шаг 1
Агент читает вакансию и оценивает, насколько кандидат ей соответствует.
Шаг 2
Создаёт адаптированное CV в LaTeX, оставляя только релевантный опыт.
Шаг 3
Пишет сопроводительное письмо под конкретную позицию.
Шаг 4
Второй AI-агент проводит ревью результата, находит слабые места, после чего первый агент вносит правки.
Шаг 5
Если заглянуть в новый пакет uuid для Go, можно заметить странную деталь: пакетный mutex v7mu.
На первый взгляд это выглядит подозрительно. UUID обычно считаются полностью статeless, так зачем генератору UUID нужен mutex?
Причина связана с UUIDv7.
Команда Go хотела, чтобы функция NewV7() всегда генерировала UUID, которые сортируются в порядке создания (если системные часы не откатились назад).
Для этого одного timestamp недостаточно. Несколько UUID могут быть созданы в одну и ту же миллисекунду, поэтому генератору приходится помнить состояние предыдущей генерации.
Внутри пакета для этого хранятся пакетные переменные:
v7lastSecs
v7lastTimestamp
NewV7() может одновременно вызываться из нескольких горутин, доступ к этим данным защищён mutex'ом:var v7mu sync.Mutex
v7mu
Начал писать Git с нуля на Go как учебный проект.
И это оказался один из тех проектов, которые заставляют по-настоящему понять, как работает инструмент, которым пользуешься каждый день.
Пока реализовал несколько базовых вещей.
Сначала пришлось разобраться с os.Args и обработкой команд через switch.
Потом написал git init, который создаёт структуру каталогов .git.
Неожиданно больше всего времени ушло на нормальную обработку ошибок. Очень быстро начинаешь понимать, почему в Go везде встречается if err != nil.
Дальше перешёл к hash-object, и тут стало интересно.
До этого я пользовался Git много лет, но никогда не задумывался, что обычный файл внутри превращается в blob, хешируется через SHA-1, сжимается через zlib и сохраняется в объектное хранилище.
Многие знают Git как набор команд.
Гораздо меньше людей знают, что внутри это по сути очень элегантная база данных объектов.
И чем глубже разбираешься в устройстве Git, тем больше начинаешь уважать его архитектуру.
Заодно понял, что писать такие проекты на Go довольно приятно.
👉 @BackendPortal