Skip to content

Instantly share code, notes, and snippets.

@graninas
Last active April 25, 2024 20:48
Show Gist options
  • Save graninas/833a9ff306338aefec7e543100c16ea1 to your computer and use it in GitHub Desktop.
Save graninas/833a9ff306338aefec7e543100c16ea1 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 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
@nikita-volkov
Copy link

Seems very useful for hiring! Thanks!

@graninas
Copy link
Author

graninas commented Jul 24, 2020

@typetetris @nikita-volkov

You're welcome!

@jonathanfishbein1
Copy link

this is great! thank you

@Hakimba
Copy link

Hakimba commented Jul 27, 2020

Awesome, very helpful

@gautamr
Copy link

gautamr commented Aug 1, 2020

This is very good guide , thank you

@edwarrdnorton
Copy link

edwarrdnorton commented Aug 19, 2020

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.

@graninas
Copy link
Author

@specdrake
Copy link

Really awesome information, thanks for it!

@Zuzichev
Copy link

Gorgeous table, thank you! =):-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment