Профиль навыка

Дженерики и параметрический полиморфизм

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-производительности в кодовых базах на миллионы строк.

Сообщество

👁 Следить ✏️ Предложить изменение Войдите, чтобы предлагать изменения
📋 Предложения
Пока нет предложений для Дженерики и параметрический полиморфизм
Загрузка комментариев...