| Junior | Middle | Senior | Architect | |
|---|---|---|---|---|
| Haskell level | Basic Haskell | Intermediate Haskell | Advanced Haskell | Language-agnostic |
| Haskell knowledge scope | Learn you a Haskell | Get programming in Haskell | Haskell in Depth | Knows several languages from different categories |
| Get programming in Haskell | Haskell in Depth | Functional Design and Architecture | ||
| Thinking with types | ||||
| Haskell | Lambdas, functions, composition | Advanced composition (point free, applicatives, functors, monads) | Some type-level Haskell (TH, Generics, GADTs, FunDeps, Type Families, HKDs...) | More focussed on the big picture rather on the language features |
| Base types (String, Int, Float...) | General types (Text, ByteString...) | High-kinded types | ||
| Main ADTs (Maybe, Bool, Either...) | Basic lenses | Parametrized types | ||
| Basic IO in the IO monad | Main monads (State, Reader, Writer, List, Either, Maybe) | FRP | ||
| Lists, tuples | Monad transformers & monad stacks | Concurrency (STM, MVar, threads) | ||
| ADTs | Advanced IO | |||
| Pattern Matching | Advanced type classes | |||
| Basic type classes (Show, Eq, Ord) | ||||
| Recursion | ||||
| Base high-order functions (map, filter...) | ||||
| Base collections (List, Map...) | ||||
| General knowledge scope | Basic programming | Clean Code | Domain specific languages | Books on Software Architecture |
| Code Complete | Domain-Driven Design | |||
| Refactoring | Test Driven Development | |||
| Data structures and algorithms | Software Development methodologies | |||
| Books on Design Patterns | ||||
| Main activity | Learning | Writing code | Requirements gathering | Understanding business problems, strategy and direction |
| Testing | Understanding project tasks | Cross-project communications | ||
| Writing documentation | Designing the code, interfaces, subsystems, services | Cross-team communications | ||
| Managing the complexity | Architecturing cross-project systems, frameworks, foundation libraries | |||
| Organizing the project | ||||
| Establishing coding standards | ||||
| Managing the development process | ||||
| Managing the risks | ||||
| Communications with stakeholders | ||||
| Responsibility | Responsible for own code & its quality | Responsible for project, its parts & design | Responsible for multiple projects | |
| Responsible for achieving goals by the team | ||||
| Teamwork skills | Working with mentor | Team player, relative independence | Team leading & mentoring | Cross-team leading |
| Completely independent | ||||
| Able to drive the project from start to end | ||||
| Problem solving skills | Can solve simple, local, small problems | Can solve local problems within the well-established project | Can define project-wide problems and solve them | Can define cross-project problems and solve them |
| Ability to not fall into perfectionism | ||||
| Ability to refrain from playing with Haskell | ||||
| Fancy stuff | Doesn't know about it | Can recognize it | Knows how to avoid it | |
| Can follow ready patterns of usage | Can use it when unavoidable | |||
| Mitigates its impact | ||||
| Provides patterns of usage | ||||
| Code quality, testability and maintainability | KISS, DRY, YAGNI | SOLID, The Law of Demetr, Rule of Least Power | ||
| Testing within a ready testing environment | Low coupling / High cohesion | |||
| Property-based testing | IoC & DI approaches | |||
| Functional, integration, unit testing | Application architectures (3-layer cake, onion architecture...) | |||
| Performance & load testing | Layering & separation of concerns | |||
| Design Patterns | ||||
| Testable architecture | ||||
| Accidental & essential complexities | ||||
| In-project testing frameworks & environment |
-
-
Save MorganOnCode/0b9c9f028490ed5da0b004c527f7bc7f to your computer and use it in GitHub Desktop.
Haskeller competency matrix
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment