This track is being written. The curriculum below is the plan it is being built to.

R Engineer

Functional and object-oriented R, language internals, performance, and the engineering that turns scripts into tools. Finish it and you can read, extend and engineer production-grade R.

Full curriculum
01Functional programming in RCompose behavior instead of repeating it.in the plan
Functional Programming · purrr map() Variants · Function Factories · Function Operators · Reduce, Filter, Map · Anonymous functions and composition
02Object-oriented RChoose and use the right object system on purpose.in the plan
OOP in R (S3/S4/R6) · S3 Classes · S4 Classes · R6 Classes · Operator Overloading · The S7 object system
03Environments, scoping and evaluationBuild an exact mental model of how R runs.in the plan
R Names & Values · R Environments · Lexical Scoping · R Closures · Lazy evaluation and promises · R Memory & lobstr
04Metaprogramming and tidy evaluationWrite functions that speak tidyverse.in the plan
Expressions and quotation · Quasiquotation: !! and !!! · Tidy evaluation and the curly-curly operator · Data-masking functions of your own · Walking and modifying the AST
05Conditions, debugging and defensive designFail loudly, debug fast, design defensively.in the plan
The conditions system · Classed conditions with rlang::abort · Custom errors and restarts · Debugging workflow: browser, trace, recover · Defensive programming · Testing that errors fire correctly
06Profiling and performanceFind the bottleneck, then make it fast.in the plan
Profiling with profvis and bench · Algorithmic complexity and vectorization · Memory and copy-on-modify (lobstr) · altrep and lazy vectors · Caching and memoisation · data.table and collapse for speed
07C++ in R with RcppDrop to compiled code for the hot path.in the plan
When to reach for C++ · Rcpp essentials · RcppArmadillo for linear algebra · Writing the hot path in C++ · Integrating C and Fortran · Debugging and profiling compiled code
08Parallel and asynchronous RScale compute across cores and machines.in the plan
Parallelism with future and furrr · High-performance parallel with mirai · Choosing a parallel backend · Promises and async programming · Background jobs and ExtendedTask · Scaling compute to the cloud
09Building R packagesShip a documented, installable package.in the plan
Package structure with devtools · Automate setup with usethis · Document with roxygen2 · Manage NAMESPACE and dependencies · Data, vignettes and articles · A pkgdown website · Semantic versioning and releasing to CRAN
10Testing, CI and qualityA package others can trust.in the plan
Unit testing with testthat (3e) · Snapshot tests · Measuring code coverage · R CMD check · Continuous integration with GitHub Actions · Linting and styling (lintr, styler)
11Shiny application developmentBuild and deploy a real, fast app.in the plan
The reactivity model · Modules for large apps · Async with ExtendedTask and promises · Performance: bindCache and caching · Testing Shiny with shinytest2 · Production Shiny with golem and rhino · Deploying Shiny at scale
12Databases and data engineeringMove and process data at scale from R.in the plan
Talk to any database with DBI · Translate dplyr to SQL with dbplyr · In-process analytics with duckdb · Columnar data at scale with arrow and parquet · Reproducible pipelines with targets and crew · Orchestration, logging and scheduling
13APIs, deployment and interopServe R to the world and bridge other languages.in the plan
Build APIs with plumber · Modern HTTP with httr2 · Version and serve models with vetiver · Containerize R with Docker · Call Python from R with reticulate · Secrets, config and environment management
14Reproducibility and the developer workflowWork like a software team.in the plan
Project and environment management with renv · Git and GitHub for R projects · Literate programming and Quarto for docs · Code review and pair-programming patterns · CLI tools and scripting with R · Observability: logging and structured errors
15The expert edge: production-grade RThe internals and patterns that separate a scripter from an engineer.in the plan
Designing a clean package API · When to vectorize and when to go to C++ · Lazy evaluation traps and force() · S7 and double dispatch in practice · crew and mirai for distributed pipelines · Conditions as control flow · Finding and fixing a real memory leak · altrep: custom vector backends