Карта специальности инженер-программист

Программная инженерия — это одновременно наука, технология, бизнес и искусство. У каждого взгляда свой акцент, и зрелый инженер видит все четыре.

Суть

Программная инженерия молода (~80 лет). Большая часть «принятых истин» — не доказана математически и не проверена экспериментом. Поэтому остаётся много искусства и интуиции. Карта специальности — обзор того, что нужно учить и понимать, чтобы не утонуть в деталях одного фреймворка.

Четыре взгляда на программирование

  • Бизнес — компании думают, что это бизнес
  • Технология — инженеры думают про инструменты
  • Наука — математики ищут доказательность
  • Искусство — чувство вкуса, различать красивый код интуитивно

Основы специальности

  • Математика — фундамент, но не сама цель
  • Топология — для понимания зацепления модулей
  • Теория графов — связывание кода = задачи на графах
  • Лингвистика — Хомский, Витгенштейн (программирование = язык)
  • Логика — рафинированный логический анализ
  • Топология сетей и систем

Ключевые навыки

  • Построение абстракции — самое важное
  • Моделирование — реальностью мы не оперируем, только моделью
  • Декомпозиция — много слоёв от пользовательских слов до инструкций процессора
  • Чувство вкуса — различать хороший и плохой код
  • Лингвистическая красота — короткая функция, короткий модуль, короткий ряд
  • Пропорции — каждая конструкция не слишком большая и не слишком маленькая

Порядок проектирования

  1. Идеи и абстракции
  2. Языки и парадигмы
  3. Реализация и алгоритмы
  4. И только потом — буквы в правильном порядке

Когда садишься писать код — отвлекаешься от абстрактного мышления. Стектрейсы вытесняют идеи.

Чек-листы микроархитектуры

  • Имена переменных и функций (баланс между математиками и филологами)
  • Связывание модулей
  • Декомпозиция задач
  • Разделение и объединение

Что включить в обучение

  • Парадигмы программирования (несколько, не одну)
  • Структуры данных и их сложность (обзорно)
  • 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 года; не превратить в карго-культ; знание мертвеет без обновления