Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save typetetris/4fba81593ee61bec5ee88ff80883c68d to your computer and use it in GitHub Desktop.
Save typetetris/4fba81593ee61bec5ee88ff80883c68d to your computer and use it in GitHub Desktop.
Haskeller competency matrix

Haskeller Competency Matrix

See also List of materials about Software Design in Haskell

Junior Middle Senior Architect
Haskell level Basic Haskell Intermediate Haskell Advanced Haskell Language-agnostic
Haskell knowledge scope Learn you a Haskell Get programming with Haskell Haskell in Depth Knows several languages from different categories
Get programming with 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...) FFI
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...)
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
Ability to handle uncertainty
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment