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 | ||
Soar with Haskell | Soar with Haskell | Pragmatic Type-Level Design | ||
Production Haskell | ||||
Other books on Software Engineering in Haskell | ||||
Haskell | Lambdas, functions, composition | Advanced composition (point free, applicatives, functors, monads) | Some type-level features usage (not implementation): 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...) | TH, 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 |
HKT is listed twice: