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 |
Thank you for such a valuable information. I was looking for a long time detailed explanation. Really appreciate your reply! Using this matrix system will be very useful for me in my scientific research. Friends, has anyone read the examples of essays that can be found on this site https://writingbros.com/essay-examples/science/ ? Recently I had to write an essay, which concerned the science. The process of writing was very difficult until I read the essays of other users and formed a more understandable argument for myself.