Skill Profile

Generics & Parametric Polymorphism

Generics, bounded types, variance (covariance/contravariance), type constraints, type erasure

Programming Fundamentals Type Systems

Roles

9

where this skill appears

Levels

5

structured growth path

Mandatory requirements

32

the other 13 optional

Domain

Programming Fundamentals

Group

Type Systems

Last updated

3/17/2026

How to Use

Choose your current level and compare expectations. The items below show what to cover to advance to the next level.

What is Expected at Each Level

The table shows how skill depth grows from Junior to Principal. Click a row to see details.

Role Required Description
Backend Developer (C#/.NET) Required Understands C# generics syntax: declares generic classes, methods, and interfaces with type parameters (List<T>, Dictionary<TKey,TValue>). Applies basic constraints (where T : class, where T : struct, where T : new()). Correctly uses built-in generic collections and avoids boxing by choosing generic over non-generic APIs.
Backend Developer (Java/Kotlin) Required Understands Java generics fundamentals: declares generic classes and methods with type parameters, uses bounded type parameters (extends/super). Aware of type erasure and its implications — cannot instantiate T or use instanceof with generic types. Correctly applies generic collections (List<String>, Map<K,V>) and avoids raw types in new code.
Backend Developer (Rust) Required Understands the fundamentals of Generics & Parametric Polymorphism at a basic level. Applies simple concepts in work tasks using Rust. Follows recommendations from senior developers when solving problems.
Backend Developer (Scala) Required Understands the fundamentals of Generics & Parametric Polymorphism at a basic level. Applies simple concepts in work tasks using Scala 3. Follows recommendations from senior developers when solving problems.
Compiler Engineer Knows basic generics and parametric polymorphism concepts for compiler engineering and can apply them in common tasks. Uses standard tools and follows established team practices. Understands when and why this approach is used.
Desktop Developer (.NET WPF/WinUI/MAUI) Knows generics in C#: List<T>, Dictionary<TK,TV>, Func<T,TResult>. Creates simple generic classes and methods. Understands type constraints (where T : class, new()).
Desktop Developer (Qt/C++) Knows C++ template basics in the Qt context. Uses template containers (QList<T>, QHash<K,V>). Understands template instantiation and basic SFINAE.
Language Tooling Engineer Understands the fundamentals of Generics & Parametric Polymorphism at a basic level. Applies simple concepts in work tasks using TypeScript/Rust. Follows recommendations from senior developers when solving problems.
Systems Programmer (C/C++) Understands the fundamentals of Generics & Parametric Polymorphism at a basic level. Applies simple concepts in work tasks using C/C++/Rust. Follows recommendations from senior developers when solving problems.
Role Required Description
Backend Developer (C#/.NET) Required Designs advanced C# generic abstractions: applies covariance/contravariance on interfaces (IEnumerable<out T>, IComparer<in T>), implements generic repository and specification patterns. Uses constraints combinations (where T : class, IComparable<T>, new()) for precise API contracts. Understands generic type caching (typeof(T)), reflection over generic types, and builds fluent generic builders with method chaining.
Backend Developer (Java/Kotlin) Required Applies advanced Java generics: uses wildcard types (? extends T, ? super T) following PECS principle (Producer Extends, Consumer Super). Implements generic utility methods with recursive type bounds (<T extends Comparable<T>>). Understands bridge methods generated by type erasure, handles generic array creation limitations, and applies @SafeVarargs for heap pollution prevention in variadic generic methods.
Backend Developer (Rust) Required Implements Rust generics with trait bounds: writes generic functions and structs with where clauses and multiple trait bounds. Understands monomorphization and its impact on binary size vs runtime performance. Applies lifetime parameters in generic contexts ('a), combines generics with trait objects (dyn Trait) when dynamic dispatch is needed. Uses PhantomData for zero-cost type-level markers.
Backend Developer (Scala) Required Applies Scala's advanced type parameter system: upper/lower type bounds ([A <: B], [A >: B]), variance annotations (covariant +A, contravariant -A). Implements type classes via implicit parameters and context bounds ([T: Ordering]). Uses existential types and type members for abstraction, understands type inference limitations in complex generic chains.
Compiler Engineer Confidently applies generics and parametric polymorphism for compiler engineering in non-standard tasks. Independently selects optimal approach and tools. Analyzes trade-offs and suggests improvements to existing solutions.
Desktop Developer (.NET WPF/WinUI/MAUI) Creates generic service layer with repository, specification patterns. Uses covariance/contravariance (in/out). Applies generic constraints for complex hierarchies. Understands generic type inference.
Desktop Developer (Qt/C++) Creates template utilities for Qt: type-safe property wrappers, generic serializers. Applies variadic templates and fold expressions. Uses SFINAE/if constexpr for conditional compilation.
Language Tooling Engineer Implements generic type resolution in language tooling: builds type parameter substitution maps during type checking, handles generic method inference and constraint solving. Understands generic instantiation strategies (monomorphization vs type erasure) and their impact on tooling — code completion, refactoring, and type display in IDE features.
Systems Programmer (C/C++) Applies generics in systems-level code with focus on zero-cost abstractions: writes generic data structures with const generics for compile-time sizes, uses trait bounds to enforce memory layout guarantees (Copy, Sized, Unpin). Understands how generic monomorphization affects instruction cache and binary size in performance-critical paths. Applies generics to implement type-safe wrappers over unsafe FFI interfaces.
Role Required Description
Backend Developer (C#/.NET) Required Architects generic type systems in C# codebases: designs generic middleware pipelines (IMiddleware<TRequest, TResponse>), implements compile-time metaprogramming with source generators over generic types. Applies Curiously Recurring Template Pattern (class Base<T> where T : Base<T>) for static polymorphism. Optimizes hot paths with generic specialization techniques, profiles JIT behavior for value-type vs reference-type generic instantiations to minimize allocations.
Backend Developer (Java/Kotlin) Required Designs sophisticated generic APIs in Java: implements type-safe heterogeneous containers (Class<T> as key), builds generic fluent DSLs with phantom type parameters for compile-time state validation. Applies Typesafe Heterogeneous Container pattern, designs generic annotation processors for compile-time validation. Navigates type erasure edge cases in serialization frameworks (Jackson, Gson TypeToken), implements generic type resolution via reflection (ParameterizedType, TypeVariable).
Backend Developer (Rust) Required Designs advanced Rust generic architectures: implements GATs (Generic Associated Types) for lending iterators and async trait patterns. Builds generic type-state machines with zero-runtime-cost transitions enforced by the type system. Applies const generics for compile-time validated dimensions and buffer sizes. Designs generic trait hierarchies with supertraits and blanket implementations, optimizes trait bound complexity to maintain reasonable compile times in large generic codebases.
Backend Developer (Scala) Required Architects type-level computations in Scala: implements higher-kinded types (F[_]) for tagless final and free monad patterns. Designs generic type class hierarchies (Functor, Monad, Traverse) with lawful instances and automatic derivation. Applies path-dependent types and type projections for advanced generic abstractions, uses match types (Scala 3) and type lambdas for compile-time type transformations. Mentors team on variance rules and type inference debugging.
Compiler Engineer Expertly applies generics and parametric polymorphism for compiler engineering in designing complex systems. Optimizes existing solutions and prevents architectural mistakes. Conducts code reviews and trains colleagues on best practices.
Desktop Developer (.NET WPF/WinUI/MAUI) Required Designs generic frameworks with Source Generators. Uses static abstract members in interfaces (C# 11+). Implements generic math through INumber<T>. Applies generic host for modular architecture.
Desktop Developer (Qt/C++) Required Applies C++20 concepts for constraining template parameters. Designs policy-based design for Qt components. Uses template metaprogramming for compile-time validation.
Language Tooling Engineer Required Designs cross-language generic type system tooling: implements constraint solvers for generic type inference (Hindley-Milner extensions, local type inference), builds incremental type checkers that efficiently handle generic instantiation caching. Architects IDE features for generic code — smart completion with type parameter inference, generic refactoring (extract type parameter, inline type alias), and diagnostic messages that clearly explain constraint violation chains in complex generic contexts.
Systems Programmer (C/C++) Required Architects generic abstractions for systems infrastructure: designs generic allocator interfaces and type-parameterized memory pools with compile-time size validation via const generics. Implements generic lock-free data structures with correct Send/Sync bounds, applies generic specialization patterns for SIMD-optimized code paths. Evaluates monomorphization costs in large-scale systems — manages binary bloat through strategic use of trait objects, type-erased wrappers, and generic function outlining techniques.
Role Required Description
Backend Developer (C#/.NET) Required Defines generics usage standards: constraints, covariance/contravariance, generic host builders. Reviews API design focused on type safety and ergonomics.
Backend Developer (Java/Kotlin) Required Defines generics usage standards for the Java team: bounded type parameters, wildcard conventions, type-safe builders. Reviews API design focused on type safety and ergonomics.
Backend Developer (Rust) Required Designs generic APIs with complex trait bounds using where clauses, associated types and GAT (Generic Associated Types). Develops generic middleware layers for tower services and typed builder patterns with compile-time validation.
Backend Developer (Scala) Required Defines Generics and Parametric Polymorphism usage standards at team/product level. Conducts architectural reviews. Creates best practices and training materials for the entire team.
Compiler Engineer Establishes generics and parametric polymorphism standards for the compiler engineering team and makes architectural decisions. Defines technical roadmap considering this skill. Mentors senior engineers and influences practices of adjacent teams.
Desktop Developer (.NET WPF/WinUI/MAUI) Required Defines generics usage standards in .NET projects. Conducts review of generic API design. Controls generic code complexity.
Desktop Developer (Qt/C++) Required Defines template usage standards in Qt projects. Reviews template code, controls compile-time complexity. Establishes guidelines for template code readability.
Language Tooling Engineer Required Defines standards for applying Generics and Parametric Polymorphism at the team/product level. Conducts architectural reviews. Establishes best practices and training materials for the entire team.
Systems Programmer (C/C++) Required Defines Generics and Parametric Polymorphism standards at team/product level. Conducts architectural reviews. Establishes best practices and training materials for the team.
Role Required Description
Backend Developer (C#/.NET) Required Designs platform-level generic frameworks: source generators for compile-time generics, generic math (INumber<T>), type-safe pipeline builders. Evaluates new C# version capabilities.
Backend Developer (Java/Kotlin) Required Designs platform-level generic frameworks and libraries: type-safe query builders, generic repository patterns, plugin systems. Evaluates type erasure limitations and designs workarounds.
Backend Developer (Rust) Required Defines organizational generics strategy: higher-kinded type emulations, const generics for compile-time computations, specialization through marker traits. Develops proc macros for automating derive implementations and creates internal DSLs through Rust's type system.
Backend Developer (Scala) Required Defines organization-wide generic programming standards in Scala: establishes type class encoding conventions (Scala 2 implicits vs Scala 3 given/using), designs generic effect system abstractions (Cats Effect, ZIO) with principled type parameter hierarchies. Drives adoption of compile-time type-level programming (singleton types, type-level natural numbers, compile-time proofs) for domain invariant enforcement. Evaluates and shapes Scala language evolution proposals related to type system expressiveness — opaque types, match types, polymorphic function types.
Compiler Engineer Shapes generics and parametric polymorphism strategy for compiler engineering at the organizational level. Defines best practices and influences technology choices beyond their own team. Is a recognized expert in this area.
Desktop Developer (.NET WPF/WinUI/MAUI) Required Shapes enterprise generics standards for .NET. Evaluates new generic features (roles, shapes). Defines balance between generics and concrete types.
Desktop Developer (Qt/C++) Required Shapes enterprise template programming standards for C++/Qt. Evaluates reflection proposals for future C++ standards. Defines the balance between generics and runtime polymorphism.
Language Tooling Engineer Required Defines the strategy for applying Generics and Parametric Polymorphism at the organizational level. Makes decisions on approaches and tools. Mentors lead developers and shapes technical vision.
Systems Programmer (C/C++) Required Defines generic programming strategy across systems codebases: establishes guidelines for monomorphization budget and binary size targets, designs generic abstraction layers that unify platform-specific implementations (OS, architecture) under type-safe generic interfaces. Drives adoption of const generics and type-level programming for compile-time correctness proofs in safety-critical systems. Evaluates language-level generics features (Rust RFC process, C++ concepts vs Rust traits) and shapes team's generic design patterns to balance abstraction power, compile time, and runtime performance across million-line codebases.

Community

👁 Watch ✏️ Suggest Change Sign in to suggest changes
📋 Proposals
No proposals yet for Generics & Parametric Polymorphism
Loading comments...