Domain
Compilers & Languages
Skill Profile
Type inference: Hindley-Milner, unification, type checking, generics, variance
Roles
3
where this skill appears
Levels
5
structured growth path
Mandatory requirements
11
the other 4 optional
Compilers & Languages
Compiler Theory
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 |
|---|---|---|
| Compiler Engineer | Required | Understands basic type inference algorithms: unification, Hindley-Milner inference. Knows the difference between structural and nominal type systems. Can work with simple generics. |
| Language Tooling Engineer | Learns basics of type inference algorithms such as Hindley-Milner and unification. Reads compiler source code to understand how type checking passes work in practice. | |
| Systems Programmer (C/C++) | Studies how type inference and type checking affect memory layout and safety guarantees. Understands basic type system rules enforced by the compiler in languages like Rust or C++. |
| Role | Required | Description |
|---|---|---|
| Compiler Engineer | Required | Implements bidirectional type checking for languages with type annotations. Understands constraint-based type inference. Writes a type checker for a language with generics and simple subtyping. |
| Language Tooling Engineer | Implements type inference passes and integrates them with IR transformations. Writes comprehensive test suites for type checker correctness including edge cases with generics and variance. | |
| Systems Programmer (C/C++) | Applies type inference knowledge to write safer low-level code with minimal explicit annotations. Leverages compiler type checking to catch memory safety issues and undefined behavior at compile time. |
| Role | Required | Description |
|---|---|---|
| Compiler Engineer | Required | Designs type system for a new language: variance, higher-kinded types, existential types. Implements incremental type checking for language server. Optimizes type checker performance. |
| Language Tooling Engineer | Required | Designs advanced type system features including dependent types, GADTs, and type-level computation. Architects compiler optimization passes that leverage type information for better code generation. Mentors the team on type theory. |
| Systems Programmer (C/C++) | Required | Designs type-safe abstractions for system-level APIs that enforce correctness at compile time. Evaluates and influences type system design decisions in languages like Rust, contributing to safer systems programming patterns. |
| Role | Required | Description |
|---|---|---|
| Compiler Engineer | Required | Architects type system evolution for the language with backward compatibility in mind. Makes decisions about breaking changes. Manages the type system engineering team. |
| Language Tooling Engineer | Required | Defines compiler architecture. Establishes development standards. Coordinates compiler team. |
| Systems Programmer (C/C++) | Required | Defines compiler architecture. Establishes development standards. Coordinates the compiler team. |
| Role | Required | Description |
|---|---|---|
| Compiler Engineer | Required | Defines long-term type system strategy for the platform language. Researches dependent types, linear types, effect systems. Publishes academic papers on type systems. |
| Language Tooling Engineer | Required | Defines compiler/language development strategy. Designs core language features. Shapes technology vision. |
| Systems Programmer (C/C++) | Required | Defines compiler/language development strategy. Designs core language features. Establishes technology vision. |