Learn
Hands-on AI/ML curriculum — new lessons every day except Sunday, free.
Rules, Heuristics & Symbolic AI
- Ship the rule-based baseline first: why 20 lines of if/else gate every good ML project22/07/2026
- Rule learning: RIPPER, decision lists, and models that output human-readable rules30/07/2026
- RuleFit and skope-rules: mining crisp rules out of a trained ensemble04/08/2026
- Business rules engines: Drools, GoRules, and when domain logic must not be learned12/08/2026
Feature Engineering & the scikit-learn Toolkit
- Encoders shootout: one-hot, ordinal, target, and hashing — when each wins and when it leaks22/07/2026
- Scaling and normalization: StandardScaler vs MinMaxScaler vs RobustScaler, and the models that don't care30/07/2026
- Rolling windows and lag features: time series into supervised learning without leaking the future31/07/2026
- sklearn Pipeline and ColumnTransformer: preprocessing that cannot leak11/08/2026
Modern Data Engineering
- Parquet and Arrow: why columnar formats make your queries 100x faster21/07/2026
- DuckDB: an analytics warehouse that fits in your laptop's pocket25/07/2026
- Polars vs pandas: the DataFrame rewrite that changed the default31/07/2026
- ELT and dbt: transforming data where it lives, with tests and lineage11/08/2026
Multi-Model Inference & Serving
- From pickle to production: wrapping a model in a real API that won't fall over21/07/2026
- ONNX: one model format to run everywhere, from server to browser24/07/2026
- Dynamic batching: the single biggest throughput lever in model serving30/07/2026
- Serving many models on one GPU: Triton, model repositories, and hot-swapping10/08/2026
Classical Machine Learning
- Linear regression is not boring: assumptions, diagnostics, and when it beats deep learning20/07/2026
- Logistic regression as a classifier you can actually explain24/07/2026
- Decision trees: how they split, why they overfit, and how to read one30/07/2026
- Random forests: why averaging many bad trees makes one great model08/08/2026
Exploratory Data Analysis & Statistics
- First hour with a new dataset: a repeatable EDA checklist in pandas20/07/2026
- Missing data is a message: patterns, mechanisms, and honest imputation24/07/2026
- Outliers: detect, understand, and only then decide to delete30/07/2026
- Correlation is not causation, but it's also not nothing: reading correlation matrices right08/08/2026
Mathematics for Machine Learning
- Vectors, dot products, and cosine similarity: the geometry behind embeddings18/07/2026
- Matrix multiplication is all you need: shapes, batching, and why GPUs love it23/07/2026
- Eigenvalues and SVD without tears: compress an image to see them work30/07/2026
- Derivatives and gradients: the one calculus lesson ML actually uses07/08/2026
Neural Networks from the Ground Up
- A neuron is just a weighted sum: build a perceptron in 20 lines of NumPy18/07/2026
- Backpropagation demystified: hand-compute the gradients, then verify with autograd23/07/2026
- Activation functions in 2026: why ReLU won and what's replacing it30/07/2026
- Weight initialization: why your deep net trains or dies before step one07/08/2026
ML Foundations & Chatbots
Computer Vision
RAG & Agentic Development
LLMs & Transformers
- How transformer self-attention actually works, with a runnable toy11/07/2026
- Tokenization pitfalls: why your LLM miscounts characters and money12/07/2026
- Context windows, KV-cache, and why long prompts get expensive15/07/2026
- Fine-tuning vs LoRA vs prompting: choosing the cheapest path that works05/08/2026
Gradient Boosting with XGBoost
- Gradient boosting from the ground up: why XGBoost and LightGBM still rule tabular data in 202631/07/2026
- Tuning XGBoost without fooling yourself: early stopping, learning rate, and the parameters that matter31/07/2026
- Categorical features and missing values in XGBoost: the native path vs one-hot31/07/2026
- XGBoost vs LightGBM vs CatBoost: an honest benchmark on the same data and the same budget31/07/2026
- Learning to rank with XGBoost: pairwise and listwise objectives for search and recommendations31/07/2026
- XGBoost in production: GPU training, out-of-core data, model persistence, and fast inference31/07/2026
- XGBoost pitfalls: the mistakes that quietly wreck a boosted model31/07/2026
- Debugging a boosted model: learning curves, tree dumps, and plots that explain a prediction31/07/2026
- Squeezing more out of XGBoost: feature engineering, custom objectives, and constraints31/07/2026
- Reproducible XGBoost: seeds, pinned versions, and a validation protocol you can defend01/08/2026
- Keeping an XGBoost model honest: drift monitoring, champion/challenger, and retraining cadence03/08/2026
- Forecasting with XGBoost: turning a time series into a supervised problem without cheating04/08/2026
Distributed ML with PySpark
- Why PySpark for ML: when your data outgrows pandas and a single machine24/07/2026
- PySpark DataFrames, shuffles, and fast UDFs: pandas_udf + Arrow beat Python UDFs 10x24/07/2026
- Spark ML feature pipelines: VectorAssembler, StringIndexer, OneHotEncoder, and the Pipeline API24/07/2026
- Training models with Spark MLlib: LogisticRegression, RandomForest, and GBTClassifier24/07/2026
- Distributed hyperparameter tuning: CrossValidator, ParamGridBuilder, and TrainValidationSplit24/07/2026
- Clustering and recommendations at scale: KMeans and ALS collaborative filtering in Spark24/07/2026
- Text features in Spark: Tokenizer, HashingTF, IDF, and Word2Vec on large corpora24/07/2026
- Scaling single-node ML on Spark: pandas API on Spark, applyInPandas, and grouped training24/07/2026
- From Spark model to production: persistence, MLflow tracking, and batch scoring24/07/2026
- PySpark ML performance: partitions, data skew, caching, and the small-data trap24/07/2026
Channel Specials
- Best practices: avoid mutable default arguments02/12/2025
- Using timeit and perf to benchmark Python code04/12/2025
- Using FastAPI to build a mini REST API in Python08/12/2025
- Introduction to infographics and visual learning for Python/ML10/12/2025
- Introduction to benchmarking in Python16/12/2025
- Empirical: float precision errors in Python math24/12/2025
- Using matplotlib/plotly for infographic-style outputs28/12/2025
Data Science
- Best practices for robust feature pipelines01/12/2025
- Intro to model evaluation metrics02/12/2025
- Intro to model evaluation metrics02/12/2025
- Tools: Kubeflow, Vertex AI, MLflow Projects03/12/2025
- Empirical comparison of algorithms04/12/2025
- Tools: FastAPI, Docker, BentoML05/12/2025
- Expert: high-dimensional clustering06/12/2025
- Empirical: L1/L2 impact08/12/2025
- Tools: Feast, Hopsworks09/12/2025
- Expert: Bayesian optimization & Hyperband10/12/2025
- Intro to natural language processing11/12/2025
- Best practices for ML API design12/12/2025
- Tools: statsmodels, Prophet14/12/2025
- Intro to dimensionality reduction15/12/2025
- Tools: SHAP, LIME, InterpretML16/12/2025
- Best practices for ensemble tuning17/12/2025
- Empirical: algorithm benchmarks18/12/2025
- Tools: Evidently AI, WhyLabs19/12/2025
- Best practices for evaluating clusters20/12/2025
- Empirical: batch vs streaming stores23/12/2025
- Expert: distributed tuning with Ray Tune24/12/2025
- Tools: PyTorch, TensorFlow25/12/2025
- Intro to scaling ML inference26/12/2025
- Empirical: LSTM vs Prophet vs ARIMA27/12/2025
- Best practices for feature importance ranking28/12/2025
Data Engineering
- Tools: AWS Lake Formation, Glue Data Catalog01/12/2025
- Empirical: Airflow vs Prefect performance comparison02/12/2025
- Introduction to modern data warehouse design03/12/2025
- Introduction to ETL and ELT patterns04/12/2025
- Expert: real-time feature stores and ML stream inference05/12/2025
- Tools: Great Expectations, Soda Core, Deequ06/12/2025
- Introduction to streaming data architecture08/12/2025
- Best practices: domain ownership and federated governance09/12/2025
- Tools: Prometheus, Grafana, Airflow sensors10/12/2025
- Empirical: OLTP vs OLAP query performance comparison11/12/2025
- Introduction to stream processing concepts12/12/2025
- Expert: advanced lineage propagation across systems14/12/2025
- Empirical: Parquet vs ORC compression benchmarks15/12/2025
- Expert: event-driven orchestration with EventBridge and Step Functions16/12/2025
- Tools: dbt, Redshift Spectrum, Athena17/12/2025
- Best practices: schema evolution and metadata tracking18/12/2025
- Tools: AWS Athena Federation, Starburst, Trino23/12/2025
- Tools: AWS Athena Federation, Starburst, Trino23/12/2025
- Introduction to data pipeline monitoring and alerting24/12/2025
- Introduction to data pipeline monitoring and alerting24/12/2025
- Best practices: balancing read/write trade-offs25/12/2025
- Tools: Apache Beam, Flink, Dataflow26/12/2025
- Best practices: metadata enrichment and versioning27/12/2025
- Introduction to lakehouse architecture28/12/2025
More lessons
- Empirical: comparing SOLID vs non-SOLID Python code maintainability28/11/2025
- Best practices for wheel and source distributions29/11/2025
- Introduction to async/await in Python01/12/2025
- Expert: sustainable productivity systems for engineering teams01/12/2025
- Tools: black, ruff, pre-commit, mypy02/12/2025
- Best practices: responsible data handling and transparency03/12/2025
- Expert: async and GPU optimization patterns03/12/2025
- Best practices for reproducible, modular notebooks04/12/2025
- Introduction to technical teaching and mentorship05/12/2025
- Empirical: coupling and cohesion analysis05/12/2025
- Empirical: throughput comparison of streaming architectures06/12/2025
- Best practices: list comprehensions vs loops08/12/2025
- Expert: designing reusable components across domains09/12/2025
- Introduction to unit testing in Python09/12/2025
- Empirical: recursion vs iteration and memory impact10/12/2025
- Best practices for imports and packaging in monorepos11/12/2025
- Tools: Snyk, Dependabot, and Checkov11/12/2025
- Expert: model capacity and overfitting trade-offs12/12/2025
- Tools: abc, dataclasses, strategy helpers12/12/2025
- Introduction to GRASP design principles13/12/2025
- Best practices: clean commit history and branching models14/12/2025
- Tools: aiohttp and anyio for async workflows15/12/2025
- Expert: designing ethical governance frameworks for AI15/12/2025
- Best practices for consistent style with PEP816/12/2025
- Empirical: benchmarks of Cython, Numba, and PyPy17/12/2025
- Expert: interactive pipelines and parametrized runs18/12/2025
- Best practices: scalable architectures for data systems19/12/2025
- Introduction to SOLID principles in Python19/12/2025
- Empirical: pyinstaller vs nuitka vs cx_Freeze20/12/2025
- Introduction to developer productivity fundamentals23/12/2025
- Tools: functools, itertools, toolz24/12/2025
- Best practices for designing generative tests24/12/2025
- Expert: chaos engineering for resilient ML infrastructure25/12/2025
- Empirical: relative vs absolute imports in large codebases25/12/2025
- Expert: Bayesian regularization and priors26/12/2025
- Best practices: reactive and event-driven observer systems26/12/2025
- Tools: abstract base classes and dataclasses for GRASP27/12/2025
- Introduction to fairness in machine learning27/12/2025
- Expert: idioms for clean API and operator overloading28/12/2025