Домен
Основы программирования
Профиль навыка
Generics, bounded types, variance (covariance/contravariance), type constraints, type erasure
Ролей
9
где встречается этот навык
Грейдов
5
сформированная дорожка роста
Обязательных требований
32
ещё 13 — необязательные
Основы программирования
Системы типов
17.03.2026
Выберите текущий грейд и сравните ожидания. Карточки ниже покажут, что нужно закрыть для следующего уровня.
Таблица показывает, как меняется глубина владения навыком от Junior до Principal.
| Роль | Обязательность | Описание |
|---|---|---|
| Backend Developer (C#/.NET) | Обязателен | Понимает синтаксис дженериков C#: объявляет generic-классы, методы и интерфейсы с type-параметрами (List<T>, Dictionary<TKey,TValue>). Применяет базовые constraints (where T : class, where T : struct, where T : new()). Корректно использует встроенные generic-коллекции и избегает boxing, выбирая generic API вместо non-generic. |
| Backend Developer (Java/Kotlin) | Обязателен | Понимает основы дженериков Java: объявляет generic-классы и методы с type-параметрами, использует bounded type parameters (extends/super). Знает о type erasure и его последствиях — нельзя создать экземпляр T или использовать instanceof с generic-типами. Корректно применяет generic-коллекции (List<String>, Map<K,V>) и избегает raw types в новом коде. |
| Backend Developer (Rust) | Обязателен | Понимает основы Дженерики и параметрический полиморфизм на базовом уровне. Применяет простые концепции в рабочих задачах с использованием Rust. Следует рекомендациям senior-разработчиков при решении задач. |
| Backend Developer (Scala) | Обязателен | Понимает основы Дженерики и параметрический полиморфизм на базовом уровне. Применяет простые концепции в рабочих задачах с использованием Scala 3. Следует рекомендациям senior-разработчиков при решении задач. |
| Compiler Engineer | Знает базовые концепции generics type params для compiler engineer и умеет применять их в типовых задачах. Использует стандартные инструменты и следует установленным практикам команды. Понимает когда и почему применяется данный подход. | |
| Desktop Developer (.NET WPF/WinUI/MAUI) | Знает generics в C#: List<T>, Dictionary<TK,TV>, Func<T,TResult>. Создаёт простые generic классы и методы. Понимает type constraints (where T : class, new()). | |
| Desktop Developer (Qt/C++) | Знает основы шаблонов C++ в контексте Qt. Использует шаблонные контейнеры (QList<T>, QHash<K,V>). Понимает инстанцирование шаблонов и базовый SFINAE. | |
| Language Tooling Engineer | Понимает основы Дженерики и параметрический полиморфизм на базовом уровне. Применяет простые концепции в рабочих задачах с использованием TypeScript/Rust. Следует рекомендациям senior-разработчиков при решении задач. | |
| Systems Programmer (C/C++) | Понимает основы Дженерики и параметрический полиморфизм на базовом уровне. Применяет простые концепции в рабочих задачах с использованием C/C++/Rust. Следует рекомендациям senior-разработчиков при решении задач. |
| Роль | Обязательность | Описание |
|---|---|---|
| Backend Developer (C#/.NET) | Обязателен | Проектирует продвинутые generic-абстракции C#: применяет ковариантность/контравариантность на интерфейсах (IEnumerable<out T>, IComparer<in T>), реализует generic repository и specification паттерны. Использует комбинации constraints (where T : class, IComparable<T>, new()) для точных API-контрактов. Понимает кэширование generic-типов (typeof(T)), рефлексию над generic-типами, строит fluent generic builders с method chaining. |
| Backend Developer (Java/Kotlin) | Обязателен | Применяет продвинутые дженерики Java: использует wildcard-типы (? extends T, ? super T) по принципу PECS (Producer Extends, Consumer Super). Реализует generic utility-методы с рекурсивными type bounds (<T extends Comparable<T>>). Понимает bridge-методы, генерируемые type erasure, обрабатывает ограничения создания generic-массивов, применяет @SafeVarargs для предотвращения heap pollution в вариативных generic-методах. |
| Backend Developer (Rust) | Обязателен | Реализует дженерики Rust с trait bounds: пишет generic-функции и структуры с where-клаузами и множественными trait bounds. Понимает мономорфизацию и её влияние на размер бинарника vs производительность. Применяет lifetime-параметры в generic-контекстах ('a), комбинирует дженерики с trait objects (dyn Trait) при необходимости динамической диспетчеризации. Использует PhantomData для zero-cost type-level маркеров. |
| Backend Developer (Scala) | Обязателен | Применяет продвинутую систему type-параметров Scala: upper/lower type bounds ([A <: B], [A >: B]), аннотации вариантности (covariant +A, contravariant -A). Реализует type classes через implicit-параметры и context bounds ([T: Ordering]). Использует existential types и type members для абстракции, понимает ограничения type inference в сложных generic-цепочках. |
| Compiler Engineer | Уверенно применяет generics type params для compiler engineer при решении нестандартных задач. Самостоятельно выбирает оптимальный подход и инструменты. Анализирует trade-offs и предлагает улучшения существующих решений. | |
| Desktop Developer (.NET WPF/WinUI/MAUI) | Создаёт generic service layer с repository, specification patterns. Использует covariance/contravariance (in/out). Применяет generic constraints для complex hierarchies. Понимает generic type inference. | |
| Desktop Developer (Qt/C++) | Создаёт шаблонные утилиты для Qt: type-safe property wrappers, generic serializers. Применяет variadic templates и fold expressions. Использует SFINAE/if constexpr для conditional compilation. | |
| Language Tooling Engineer | Реализует разрешение generic-типов в языковом тулинге: строит карты подстановки type-параметров при type checking, обрабатывает вывод generic-методов и решение constraints. Понимает стратегии инстанцирования дженериков (мономорфизация vs type erasure) и их влияние на тулинг — code completion, рефакторинг и отображение типов в IDE. | |
| Systems Programmer (C/C++) | Применяет дженерики в системном коде с фокусом на zero-cost абстракции: пишет generic-структуры данных с const generics для compile-time размеров, использует trait bounds для гарантий memory layout (Copy, Sized, Unpin). Понимает влияние мономорфизации дженериков на instruction cache и размер бинарника в performance-critical путях. Применяет дженерики для реализации type-safe обёрток над unsafe FFI-интерфейсами. |
| Роль | Обязательность | Описание |
|---|---|---|
| Backend Developer (C#/.NET) | Обязателен | Архитектурит generic-системы типов в C#-кодовых базах: проектирует generic middleware pipelines (IMiddleware<TRequest, TResponse>), реализует compile-time метапрограммирование с source generators над generic-типами. Применяет Curiously Recurring Template Pattern (class Base<T> where T : Base<T>) для статического полиморфизма. Оптимизирует hot paths техниками generic specialization, профилирует поведение JIT для value-type vs reference-type generic-инстанцирований для минимизации аллокаций. |
| Backend Developer (Java/Kotlin) | Обязателен | Проектирует сложные generic API в Java: реализует type-safe heterogeneous containers (Class<T> как ключ), строит generic fluent DSL с phantom type-параметрами для compile-time валидации состояний. Применяет паттерн Typesafe Heterogeneous Container, проектирует generic annotation processors для compile-time валидации. Решает edge cases type erasure в фреймворках сериализации (Jackson, Gson TypeToken), реализует разрешение generic-типов через рефлексию (ParameterizedType, TypeVariable). |
| Backend Developer (Rust) | Обязателен | Проектирует продвинутые generic-архитектуры Rust: реализует GATs (Generic Associated Types) для lending iterators и async trait паттернов. Строит generic type-state машины с zero-runtime-cost переходами, обеспечиваемыми системой типов. Применяет const generics для compile-time валидированных размерностей и буферов. Проектирует generic trait-иерархии с supertraits и blanket implementations, оптимизирует сложность trait bounds для поддержания разумного времени компиляции в больших generic-кодовых базах. |
| Backend Developer (Scala) | Обязателен | Архитектурит type-level вычисления в Scala: реализует higher-kinded types (F[_]) для tagless final и free monad паттернов. Проектирует generic type class иерархии (Functor, Monad, Traverse) с lawful instances и автоматической деривацией. Применяет path-dependent types и type projections для продвинутых generic-абстракций, использует match types (Scala 3) и type lambdas для compile-time type-трансформаций. Менторит команду по правилам вариантности и отладке type inference. |
| Compiler Engineer | Экспертно применяет generics type params для compiler engineer для проектирования сложных систем. Оптимизирует существующие решения и предотвращает архитектурные ошибки. Проводит code review и обучает коллег лучшим практикам. | |
| Desktop Developer (.NET WPF/WinUI/MAUI) | Обязателен | Проектирует generic frameworks с Source Generators. Использует static abstract members в interfaces (C# 11+). Реализует generic math через INumber<T>. Применяет generic host для modular architecture. |
| Desktop Developer (Qt/C++) | Обязателен | Применяет C++20 concepts для ограничения шаблонных параметров. Проектирует policy-based design для Qt-компонентов. Использует template metaprogramming для compile-time валидации. |
| Language Tooling Engineer | Обязателен | Проектирует кросс-языковый тулинг для generic-систем типов: реализует constraint solvers для вывода generic-типов (расширения Hindley-Milner, локальный вывод типов), строит инкрементальные type checkers с эффективным кэшированием generic-инстанцирований. Архитектурит IDE-фичи для generic-кода — smart completion с выводом type-параметров, generic-рефакторинг (extract type parameter, inline type alias) и диагностические сообщения, ясно объясняющие цепочки нарушений constraints в сложных generic-контекстах. |
| Systems Programmer (C/C++) | Обязателен | Архитектурит generic-абстракции для системной инфраструктуры: проектирует generic-интерфейсы аллокаторов и type-параметризованные memory pools с compile-time валидацией размеров через const generics. Реализует generic lock-free структуры данных с корректными Send/Sync bounds, применяет паттерны generic specialization для SIMD-оптимизированных code paths. Оценивает стоимость мономорфизации в масштабных системах — управляет binary bloat через стратегическое использование trait objects, type-erased обёрток и техник generic function outlining. |
| Роль | Обязательность | Описание |
|---|---|---|
| Backend Developer (C#/.NET) | Обязателен | Определяет стандарты использования generics: constraints, covariance/contravariance, generic host builders. Ревьюит API-дизайн с фокусом на type safety и ergonomics. |
| Backend Developer (Java/Kotlin) | Обязателен | Определяет стандарты использования generics в Java-команде: bounded type parameters, wildcard conventions, type-safe builders. Ревьюит API-дизайн с фокусом на type safety и ergonomics. |
| Backend Developer (Rust) | Обязателен | Проектирует обобщённые API с комплексными trait bounds, используя where-клаузы, associated types и GAT (Generic Associated Types). Разрабатывает generic middleware-слои для tower-сервисов и типизированные builder-паттерны с compile-time валидацией. |
| Backend Developer (Scala) | Обязателен | Определяет стандарты использования Дженерики и параметрический полиморфизм на уровне команды/продукта. Проводит архитектурные review. Формирует best practices и обучающие материалы для всей команды. |
| Compiler Engineer | Устанавливает стандарты применения generics type params для compiler engineer в команде и принимает архитектурные решения. Определяет технический roadmap с учётом данного навыка. Менторит senior инженеров и влияет на практики смежных команд. | |
| Desktop Developer (.NET WPF/WinUI/MAUI) | Обязателен | Определяет стандарты использования generics в .NET проектах. Проводит review generic API design. Контролирует complexity генерик-кода. |
| Desktop Developer (Qt/C++) | Обязателен | Определяет стандарты использования шаблонов в Qt-проектах. Проводит review template-кода, контролирует compile-time complexity. Формирует guidelines по readability шаблонного кода. |
| Language Tooling Engineer | Обязателен | Определяет стандарты использования Дженерики и параметрический полиморфизм на уровне команды/продукта. Проводит архитектурные review. Формирует best practices и обучающие материалы для всей команды. |
| Systems Programmer (C/C++) | Обязателен | Определяет стандарты использования Дженерики и параметрический полиморфизм на уровне команды/продукта. Проводит архитектурные review. Формирует best practices и обучающие материалы для всей команды. |
| Роль | Обязательность | Описание |
|---|---|---|
| Backend Developer (C#/.NET) | Обязателен | Проектирует generic-фреймворки платформенного уровня: source generators для compile-time generics, generic math (INumber<T>), type-safe pipeline builders. Оценивает возможности новых версий C#. |
| Backend Developer (Java/Kotlin) | Обязателен | Проектирует generic-фреймворки и библиотеки платформенного уровня: type-safe query builders, generic repository patterns, plugin-системы. Оценивает type erasure limitations и проектирует workarounds. |
| Backend Developer (Rust) | Обязателен | Определяет стратегию использования generics в масштабе организации: higher-kinded type эмуляции, const generics для compile-time вычислений, специализацию через marker traits. Разрабатывает proc-macro для автоматизации derive-имплементаций и создаёт внутренние DSL через типовую систему Rust. |
| Backend Developer (Scala) | Обязателен | Определяет организационные стандарты generic-программирования в Scala: устанавливает конвенции кодирования type classes (Scala 2 implicits vs Scala 3 given/using), проектирует generic-абстракции effect-систем (Cats Effect, ZIO) с принципиальными иерархиями type-параметров. Продвигает внедрение compile-time type-level программирования (singleton types, type-level натуральные числа, compile-time proofs) для обеспечения доменных инвариантов. Оценивает и формирует предложения эволюции языка Scala в области выразительности системы типов — opaque types, match types, polymorphic function types. |
| Compiler Engineer | Формирует стратегию применения generics type params для compiler engineer на уровне организации. Определяет best practices и влияет на выбор технологий за пределами своей команды. Является признанным экспертом в данной области. | |
| Desktop Developer (.NET WPF/WinUI/MAUI) | Обязателен | Формирует enterprise generics стандарты для .NET. Оценивает новые generic features (roles, shapes). Определяет баланс generics и concrete types. |
| Desktop Developer (Qt/C++) | Обязателен | Формирует enterprise-стандарты template programming для C++/Qt. Оценивает reflection proposals для будущих стандартов C++. Определяет баланс между generics и runtime polymorphism. |
| Language Tooling Engineer | Обязателен | Определяет стратегию применения Дженерики и параметрический полиморфизм на уровне организации. Принимает решения о подходах и инструментах. Менторит lead-разработчиков и формирует technical vision. |
| Systems Programmer (C/C++) | Обязателен | Определяет стратегию generic-программирования в системных кодовых базах: устанавливает guidelines по бюджету мономорфизации и целевым размерам бинарников, проектирует generic-слои абстракции, унифицирующие платформо-специфичные реализации (ОС, архитектура) под type-safe generic-интерфейсами. Продвигает внедрение const generics и type-level программирования для compile-time proofs корректности в safety-critical системах. Оценивает языковые фичи дженериков (Rust RFC process, C++ concepts vs Rust traits) и формирует паттерны generic-дизайна команды для баланса мощности абстракций, времени компиляции и runtime-производительности в кодовых базах на миллионы строк. |