Domain
Programming Fundamentals
Skill Profile
Generics, bounded types, variance (covariance/contravariance), type constraints, type erasure
Roles
9
where this skill appears
Levels
5
structured growth path
Mandatory requirements
32
the other 13 optional
Programming Fundamentals
Type Systems
3/17/2026
Choose your current level and compare expectations. The items below show what to cover to advance to the next 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. |