Карта специальности инженер-программист
Программная инженерия — это одновременно наука, технология, бизнес и искусство. У каждого взгляда свой акцент, и зрелый инженер видит все четыре.
Суть
Программная инженерия молода (~80 лет). Большая часть «принятых истин» — не доказана математически и не проверена экспериментом. Поэтому остаётся много искусства и интуиции. Карта специальности — обзор того, что нужно учить и понимать, чтобы не утонуть в деталях одного фреймворка.
Четыре взгляда на программирование
- Бизнес — компании думают, что это бизнес
- Технология — инженеры думают про инструменты
- Наука — математики ищут доказательность
- Искусство — чувство вкуса, различать красивый код интуитивно
Основы специальности
- Математика — фундамент, но не сама цель
- Топология — для понимания зацепления модулей
- Теория графов — связывание кода = задачи на графах
- Лингвистика — Хомский, Витгенштейн (программирование = язык)
- Логика — рафинированный логический анализ
- Топология сетей и систем
Ключевые навыки
- Построение абстракции — самое важное
- Моделирование — реальностью мы не оперируем, только моделью
- Декомпозиция — много слоёв от пользовательских слов до инструкций процессора
- Чувство вкуса — различать хороший и плохой код
- Лингвистическая красота — короткая функция, короткий модуль, короткий ряд
- Пропорции — каждая конструкция не слишком большая и не слишком маленькая
Порядок проектирования
- Идеи и абстракции
- Языки и парадигмы
- Реализация и алгоритмы
- И только потом — буквы в правильном порядке
Когда садишься писать код — отвлекаешься от абстрактного мышления. Стектрейсы вытесняют идеи.
Чек-листы микроархитектуры
- Имена переменных и функций (баланс между математиками и филологами)
- Связывание модулей
- Декомпозиция задач
- Разделение и объединение
Что включить в обучение
- Парадигмы программирования (несколько, не одну)
- Структуры данных и их сложность (обзорно)
- Computer Science (паттерны, SOLID, GRASP, DI, LoD)
- Базы данных и моделирование
- Сетевые протоколы и архитектуры
- Безопасность
- DevOps и инструменты
Принципы карьерного роста
- Раз в 3-4 года переосмыслять паттерны и подходы
- Менять язык/фреймворк — переосмыслять знания
- Знание без обновления мертвеет
- Учиться разнообразию парадигм, не одной
Антипаттерны
- Учить только одну парадигму
- Знать только один фреймворк глубоко, ничего вокруг
- Считать, что собес = реальная работа
- Карго-культ паттернов и принципов
🎓 Источники
- 🎓 [🎧 Карта специальности инженер-программист] · 2018-09-20 · YouTube
- Тезисы: 4 взгляда; абстракция — главное; модель ≠ реальность; идеи перед буквами
- 🎓 [🎙️ Найм зламаний] + Безуглый · 2025-01-16 · YouTube
- Тезисы: программирование — лингвистика; чек-листы микроархитектуры; правильный нейминг помогает AI
- 🎓 [🛑 Вопросы на интервью: SOLID, GRASP, паттерны GoF] · 2024-06-19 · YouTube
- Тезисы: переосмыслять раз в 3-4 года; не превратить в карго-культ; знание мертвеет без обновления