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 | ||
Other books on Software Architecture in Haskell | ||||
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...) | Higher-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 | Laziness & its implications | ||
Pattern Matching | Advanced type classes (Foldable, Traversable...) | FFI | ||
Basic type classes (Show, Eq, Ord) | Higher-kinded types | |||
Recursion | ||||
Base high-order functions (map, filter...) | ||||
Base collections (List, Map...) | ||||
General knowledge scope | Basic programming | Clean Code / Code Complete | Domain specific languages | Books on Software Architecture |
Refactoring | Domain-Driven Design | |||
Data structures and algorithms | Test Driven Development | |||
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 | Communications with stakeholders | |||
Establishing coding standards | Architecture governance | |||
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 | ||||
Integration patterns (circuit breaker, leaky bucket...) | ||||
Testable architecture | ||||
Accidental & essential complexities | ||||
In-project testing frameworks & environment |
-
-
Save adilakhter/2130649e249990378a1ccca250da49ed 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