From 8f1188c78bd2db66b7ee6e3bf35a4ff996d23378 Mon Sep 17 00:00:00 2001 From: Vijay Janapa Reddi Date: Tue, 18 Nov 2025 20:51:32 -0500 Subject: [PATCH] Clean up temporary review and analysis files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove temporary files from repository: - COMPREHENSIVE_MODULE_REVIEW.md - Module review (temporary) - paper/CITATIONS_TO_ADD.md - Citation recommendations (temporary) - paper/CLAIM_EVIDENCE_MATRIX.md - Evidence validation (temporary) - paper/EVIDENCE_INVENTORY.md - Evidence tracking (temporary) - paper/LITERATURE_REVIEW_ASSESSMENT.md - Literature review (temporary) - paper/PYTHON_DEVELOPER_TECHNICAL_REVIEW.md - Code review (temporary) - paper/NEW_CITATIONS.bib - Temporary citations (content in references.bib) - paper/proposed_figures.tex - Figure proposals (temporary) Update .gitignore to prevent tracking these file types: - Add patterns for *_REVIEW*, *_MATRIX, *_INVENTORY, *_ASSESSMENT - Add NEW_CITATIONS.bib and proposed_figures.tex patterns - These files are AI-generated temporary analysis artifacts Update paper.pdf with latest compilation including caption styling. πŸ€– Generated with Claude Code Co-Authored-By: Claude --- .gitignore | 6 + COMPREHENSIVE_MODULE_REVIEW.md | 453 ------------ paper/CITATIONS_TO_ADD.md | 327 --------- paper/CLAIM_EVIDENCE_MATRIX.md | 250 ------- paper/EVIDENCE_INVENTORY.md | 314 -------- paper/LITERATURE_REVIEW_ASSESSMENT.md | 787 --------------------- paper/NEW_CITATIONS.bib | 291 -------- paper/PYTHON_DEVELOPER_TECHNICAL_REVIEW.md | 700 ------------------ paper/paper.pdf | Bin 389435 -> 392272 bytes paper/proposed_figures.tex | 396 ----------- 10 files changed, 6 insertions(+), 3518 deletions(-) delete mode 100644 COMPREHENSIVE_MODULE_REVIEW.md delete mode 100644 paper/CITATIONS_TO_ADD.md delete mode 100644 paper/CLAIM_EVIDENCE_MATRIX.md delete mode 100644 paper/EVIDENCE_INVENTORY.md delete mode 100644 paper/LITERATURE_REVIEW_ASSESSMENT.md delete mode 100644 paper/NEW_CITATIONS.bib delete mode 100644 paper/PYTHON_DEVELOPER_TECHNICAL_REVIEW.md delete mode 100644 paper/proposed_figures.tex diff --git a/.gitignore b/.gitignore index a202e431..56001c9e 100644 --- a/.gitignore +++ b/.gitignore @@ -165,7 +165,13 @@ MODULE_STATUS_SUMMARY.md **/*_FINDINGS.md **/*_PLAN.md **/*_COMPARISON.md +**/*_REVIEW*.md +**/*_MATRIX.md +**/*_INVENTORY.md +**/*_ASSESSMENT.md **/VERIFY_*.py +**/NEW_CITATIONS.bib +**/proposed_figures.tex progress.json modules/HASATTR_*.md diff --git a/COMPREHENSIVE_MODULE_REVIEW.md b/COMPREHENSIVE_MODULE_REVIEW.md deleted file mode 100644 index f1814338..00000000 --- a/COMPREHENSIVE_MODULE_REVIEW.md +++ /dev/null @@ -1,453 +0,0 @@ -# Comprehensive Module Review: Educational Framework Analysis - -**Date**: [Current] -**Reviewer**: Expert PyTorch Developer + Educational Materials Specialist -**Scope**: All 20 modules (01-20) + archived modules - ---- - -## Executive Summary - -Overall, the TinyTorch framework demonstrates **strong progressive building** and **educational clarity**. However, several **anti-patterns** from AI code generation ("reward hacking") have been identified that undermine the educational experience. This review identifies issues and provides actionable fixes. - -### Key Findings - -βœ… **Strengths**: -- Clear progressive building from Module 01 β†’ 20 -- Explicit imports in most modules (no star imports) -- Good dependency documentation in recent modules (13, 16, 18) -- Consistent module structure and organization - -⚠️ **Issues Found**: -1. **`import_previous_module` helper function** - Used in Modules 02, 04, 06 (problematic pattern) -2. **Try/except fallbacks** - Some modules silently handle missing dependencies -3. **Inconsistent error handling** - Some modules raise educational errors, others fail silently -4. **Module 20 capstone** - Optional imports handled with None assignments (should be explicit) - ---- - -## Detailed Module-by-Module Review - -### βœ… Module 01: Tensor (Foundation) -**Status**: βœ… EXCELLENT -- **Imports**: Clean, no dependencies (foundation module) -- **Progressive Building**: N/A (foundation) -- **Educational Clarity**: Excellent documentation -- **Issues**: None - -**Pattern**: -```python -import numpy as np -# No dependencies - this is the foundation -``` - ---- - -### ⚠️ Module 02: Activations -**Status**: ⚠️ NEEDS FIX -- **Imports**: Uses `import_previous_module` helper function -- **Progressive Building**: Should import Tensor directly -- **Educational Clarity**: Good, but helper function obscures dependencies -- **Issues**: - - `import_previous_module()` function uses `sys.path.append()` (line 828) - - Used in test code, but pattern is problematic - -**Current Pattern** (PROBLEMATIC): -```python -def import_previous_module(module_name: str, component_name: str): - import sys - import os - sys.path.append(os.path.join(os.path.dirname(__file__), '..', module_name)) - module = __import__(f"{module_name.split('_')[1]}_dev") - return getattr(module, component_name) -``` - -**Should Be**: -```python -from tinytorch.core.tensor import Tensor -``` - -**Recommendation**: Remove `import_previous_module` helper. Use direct imports from `tinytorch` package. - ---- - -### βœ… Module 03: Layers -**Status**: βœ… GOOD (with minor note) -- **Imports**: Direct imports from `tinytorch.core.tensor` and `tinytorch.core.activations` -- **Progressive Building**: Clear dependencies -- **Educational Clarity**: Excellent -- **Issues**: - - Commented-out `import_previous_module` function (line 750) - should be removed entirely - - Uses `import_previous_module` in test code (line 781) - should use direct imports - -**Current Pattern**: -```python -from tinytorch.core.tensor import Tensor -from tinytorch.core.activations import ReLU, Sigmoid -``` - -**Recommendation**: Remove commented-out `import_previous_module` code and update test code to use direct imports. - ---- - -### ⚠️ Module 04: Losses -**Status**: ⚠️ NEEDS FIX -- **Imports**: Uses `import_previous_module` helper function -- **Progressive Building**: Should import Tensor, Linear, ReLU directly -- **Educational Clarity**: Good documentation, but helper obscures dependencies -- **Issues**: - - `import_previous_module()` function defined (line 84) - - Uses `sys.path.append()` pattern - - However, ALSO has direct imports (lines 92-94) - inconsistent! - -**Current Pattern** (INCONSISTENT): -```python -def import_previous_module(module_name: str, component_name: str): - # ... sys.path.append pattern ... - -# Import from tinytorch package -from tinytorch.core.tensor import Tensor -from tinytorch.core.layers import Linear -from tinytorch.core.activations import ReLU -``` - -**Recommendation**: Remove `import_previous_module` function entirely. Keep only direct imports. - ---- - -### βœ… Module 05: Autograd -**Status**: βœ… GOOD (with acceptable exception) -- **Imports**: Direct imports from tinytorch package -- **Progressive Building**: Clear dependencies -- **Educational Clarity**: Excellent -- **Issues**: - - Try/except ImportError that silently passes (line 1149) - **ACCEPTABLE** for optional dependencies during development - - This is fine because it's handling optional monkey-patching of loss functions - -**Current Pattern** (ACCEPTABLE): -```python -try: - # Monkey-patch loss functions for autograd tracking - BinaryCrossEntropyLoss.forward = tracked_bce_forward - # ... -except ImportError: - # Activations/losses not yet available (happens during module development) - pass -``` - -**Recommendation**: Keep as-is. This is acceptable for optional dependencies during development. - ---- - -### ⚠️ Module 06: Optimizers -**Status**: ⚠️ NEEDS FIX -- **Imports**: Direct imports in main code, but uses `import_previous_module` in test code -- **Progressive Building**: Clear in main code -- **Educational Clarity**: Good -- **Issues**: - - Uses `import_previous_module` in test code (lines 1261-1264) - - Commented-out function definition (line 1228) - -**Current Pattern** (TEST CODE ISSUE): -```python -# In test code: -Tensor = import_previous_module('01_tensor', 'Tensor') -Linear = import_previous_module('03_layers', 'Linear') -ReLU = import_previous_module('02_activations', 'ReLU') -MSELoss = import_previous_module('04_losses', 'MSELoss') -``` - -**Recommendation**: Update test code to use direct imports: -```python -from tinytorch.core.tensor import Tensor -from tinytorch.core.layers import Linear -from tinytorch.core.activations import ReLU -from tinytorch.core.losses import MSELoss -``` - ---- - -### βœ… Module 07: Training -**Status**: βœ… EXCELLENT -- **Imports**: Direct imports, clean -- **Progressive Building**: Clear dependencies -- **Educational Clarity**: Excellent -- **Issues**: None (commented-out `import_previous_module` should be removed) - -**Pattern**: -```python -from tinytorch.core.tensor import Tensor -from tinytorch.core.layers import Linear -from tinytorch.core.losses import MSELoss, CrossEntropyLoss -from tinytorch.core.optimizers import SGD, AdamW -``` - ---- - -### βœ… Module 08: DataLoader -**Status**: βœ… EXCELLENT -- **Imports**: Direct imports, clean -- **Progressive Building**: Clear (only needs Tensor) -- **Educational Clarity**: Excellent -- **Issues**: None - ---- - -### βœ… Module 09: Spatial -**Status**: βœ… EXCELLENT -- **Imports**: Direct imports, clean -- **Progressive Building**: Clear (only needs Tensor) -- **Educational Clarity**: Excellent -- **Issues**: None - ---- - -### βœ… Module 10: Tokenization -**Status**: βœ… EXCELLENT -- **Imports**: Direct imports, clean -- **Progressive Building**: Clear (only needs Tensor) -- **Educational Clarity**: Excellent -- **Issues**: None - ---- - -### βœ… Module 11: Embeddings -**Status**: βœ… EXCELLENT -- **Imports**: Direct imports, clean -- **Progressive Building**: Clear (only needs Tensor) -- **Educational Clarity**: Excellent -- **Issues**: None - ---- - -### βœ… Module 12: Attention -**Status**: βœ… EXCELLENT -- **Imports**: Direct imports, clean -- **Progressive Building**: Clear dependencies (Tensor, Linear) -- **Educational Clarity**: Excellent -- **Issues**: None - ---- - -### βœ… Module 13: Transformers -**Status**: βœ… EXCELLENT (RECENTLY FIXED) -- **Imports**: Direct imports with educational error messages -- **Progressive Building**: Excellent dependency documentation -- **Educational Clarity**: Excellent -- **Issues**: None (fixed in recent hot fixes) - -**Pattern** (EXEMPLARY): -```python -try: - from tinytorch.core.tensor import Tensor # Module 01: Foundation -except ImportError as e: - raise ImportError( - "❌ Module 13 (Transformers) requires Module 01 (Tensor) to be completed first.\n" - " Please complete Module 01 first, then run 'tito module complete 01'.\n" - " Original error: " + str(e) - ) from e -``` - ---- - -### βœ… Module 14: Profiling -**Status**: βœ… EXCELLENT -- **Imports**: Direct imports, clean -- **Progressive Building**: Clear dependencies -- **Educational Clarity**: Excellent -- **Issues**: None - ---- - -### βœ… Module 15: Quantization -**Status**: βœ… EXCELLENT -- **Imports**: Direct imports, clean -- **Progressive Building**: Clear dependencies -- **Educational Clarity**: Excellent -- **Issues**: None - ---- - -### βœ… Module 16: Compression -**Status**: βœ… EXCELLENT (RECENTLY FIXED) -- **Imports**: Direct imports with educational error messages -- **Progressive Building**: Excellent dependency documentation -- **Educational Clarity**: Excellent -- **Issues**: None (fixed in recent hot fixes) -- **Note**: Sequential class defined locally as testing utility (correct) - ---- - -### βœ… Module 17: Memoization -**Status**: βœ… EXCELLENT -- **Imports**: Direct imports, clean -- **Progressive Building**: Clear dependencies -- **Educational Clarity**: Excellent -- **Issues**: None - ---- - -### βœ… Module 18: Acceleration -**Status**: βœ… EXCELLENT (RECENTLY FIXED) -- **Imports**: Direct imports with educational error messages -- **Progressive Building**: Excellent dependency documentation -- **Educational Clarity**: Excellent -- **Issues**: None (fixed in recent hot fixes) - ---- - -### ⚠️ Module 19: Benchmarking -**Status**: ⚠️ ACCEPTABLE (with note) -- **Imports**: Direct imports + optional external dependencies -- **Progressive Building**: Clear -- **Educational Clarity**: Good -- **Issues**: - - Try/except for optional external dependencies (pandas, matplotlib, psutil) - **ACCEPTABLE** - - These are external libraries, not TinyTorch modules - - Creates fallback classes when pandas not available (line 177) - acceptable for optional dependency - -**Current Pattern** (ACCEPTABLE): -```python -try: - import pandas as pd - PANDAS_AVAILABLE = True -except ImportError: - PANDAS_AVAILABLE = False - # Create a simple DataFrame-like class for when pandas is not available - class pd: - class DataFrame: - # ... minimal fallback -``` - -**Recommendation**: Keep as-is. This is acceptable for optional external dependencies. - ---- - -### ⚠️ Module 20: Capstone -**Status**: ⚠️ NEEDS IMPROVEMENT -- **Imports**: Direct imports + try/except for optional features -- **Progressive Building**: Clear -- **Educational Clarity**: Good, but could be more explicit -- **Issues**: - - Try/except that sets things to None (lines 254-266) - - Should raise educational errors instead of silently setting to None - -**Current Pattern** (COULD BE BETTER): -```python -try: - from tinytorch.optimization.quantization import QuantizedLinear -except ImportError: - QuantizedLinear = None # Not available - -try: - from tinytorch.optimization.compression import magnitude_prune, structured_prune -except ImportError: - magnitude_prune = None - structured_prune = None -``` - -**Recommendation**: Either: -1. Make these required dependencies (raise educational errors) -2. Or document clearly that these are optional features - ---- - -## Critical Issues Summary - -### πŸ”΄ HIGH PRIORITY - -1. **Remove `import_previous_module` helper function** - - **Modules**: 02, 04, 06 - - **Impact**: Obscures dependencies, uses non-portable sys.path manipulation - - **Fix**: Replace with direct imports from `tinytorch` package - -2. **Update test code to use direct imports** - - **Modules**: 02, 03, 06 - - **Impact**: Test code should follow same patterns as main code - - **Fix**: Replace `import_previous_module` calls with direct imports - -### 🟑 MEDIUM PRIORITY - -3. **Module 20: Make optional dependencies explicit** - - **Impact**: Students might not understand why features are None - - **Fix**: Either make required or document clearly as optional - -4. **Remove commented-out code** - - **Modules**: 01, 03, 06, 07 - - **Impact**: Clutters codebase - - **Fix**: Remove commented-out `import_previous_module` functions - ---- - -## Recommended Fixes - -### Fix 1: Remove `import_previous_module` from Module 02 -**File**: `modules/02_activations/activations_dev.py` -- Remove function definition (line 828) -- Update test code to use direct imports - -### Fix 2: Remove `import_previous_module` from Module 04 -**File**: `modules/04_losses/losses_dev.py` -- Remove function definition (line 84) -- Keep only direct imports (already present) - -### Fix 3: Update Module 06 test code -**File**: `modules/06_optimizers/optimizers_dev.py` -- Remove commented-out function (line 1228) -- Update test code (lines 1261-1264) to use direct imports - -### Fix 4: Improve Module 20 optional dependencies -**File**: `modules/20_capstone/capstone.py` -- Either make dependencies required (raise educational errors) -- Or document clearly as optional features with clear messaging - -### Fix 5: Clean up commented code -**Files**: Multiple modules -- Remove all commented-out `import_previous_module` functions - ---- - -## Educational Principles Validation - -### βœ… Progressive Building -- **Status**: EXCELLENT -- **Evidence**: Clear dependency chains, modules build on each other logically -- **Note**: Some modules use helper functions that obscure this - -### βœ… Explicit Imports -- **Status**: EXCELLENT (after fixes) -- **Evidence**: No star imports found, direct imports used throughout -- **Note**: Helper functions need to be removed - -### βœ… Educational Clarity -- **Status**: EXCELLENT -- **Evidence**: Good documentation, clear learning objectives -- **Note**: Recent modules (13, 16, 18) have exemplary dependency documentation - -### βœ… No Reward Hacking -- **Status**: GOOD (after recent fixes) -- **Evidence**: Recent fixes removed duplicate classes, fallbacks, hardcoded paths -- **Note**: `import_previous_module` pattern is a form of reward hacking - ---- - -## Conclusion - -The TinyTorch framework is **well-structured and educational**, with recent fixes addressing major issues. The remaining issues are primarily: - -1. **Legacy helper functions** (`import_previous_module`) that should be removed -2. **Test code** that should follow same patterns as main code -3. **Optional dependencies** that should be more explicitly documented - -**Overall Grade**: A- (Excellent, with minor improvements needed) - -**Priority Actions**: -1. Remove `import_previous_module` from Modules 02, 04 -2. Update test code in Modules 02, 03, 06 -3. Improve Module 20 optional dependency handling -4. Clean up commented code - ---- - -**Next Steps**: Implement fixes for high-priority issues. - diff --git a/paper/CITATIONS_TO_ADD.md b/paper/CITATIONS_TO_ADD.md deleted file mode 100644 index 5c2a7499..00000000 --- a/paper/CITATIONS_TO_ADD.md +++ /dev/null @@ -1,327 +0,0 @@ -# TinyTorch: Citations to Add - Quick Reference - -## CRITICAL FIXES (Must do before submission) - -### 1. Fix Corrupted Bib Entries - -**bruner1960process** - Currently wrong paper about "Narrative Approach and Mentalization" - -Replace with: -```bibtex -@book{bruner1960process, - author = {Bruner, Jerome S.}, - title = {The Process of Education}, - year = {1960}, - publisher = {Harvard University Press}, - address = {Cambridge, MA} -} -``` - -OR use the original scaffolding paper: -```bibtex -@article{wood1976role, - author = {Wood, David and Bruner, Jerome S. and Ross, Gail}, - title = {The role of tutoring in problem solving}, - journal = {Journal of Child Psychology and Psychiatry}, - volume = {17}, - number = {2}, - pages = {89--100}, - year = {1976}, - doi = {10.1111/j.1469-7610.1976.tb00381.x} -} -``` - -**perkins1992transfer** - Currently wrong paper about "infant mortality" - -Replace with: -```bibtex -@incollection{perkins1992transfer, - author = {Perkins, David N. and Salomon, Gavriel}, - title = {Transfer of Learning}, - booktitle = {International Encyclopedia of Education}, - edition = {2nd}, - year = {1992}, - publisher = {Pergamon Press}, - address = {Oxford, England} -} -``` - ---- - -## CRITICAL ADDITIONS (Strongly recommended) - -### 2. Systems Thinking Foundation - -```bibtex -@book{meadows2008thinking, - author = {Meadows, Donella H.}, - title = {Thinking in Systems: A Primer}, - year = {2008}, - publisher = {Chelsea Green Publishing}, - address = {White River Junction, VT} -} -``` - -**Where to cite:** When using "systems thinking" terminology - add to Related Work Section 3.2 - -**Suggested text addition:** -> "TinyTorch's incremental system construction develops systems thinking~\citep{meadows2008thinking}β€”the ability to understand how components interact within complex systemsβ€”through direct implementation rather than abstract instruction." - -### 3. Compiler Course Model - -```bibtex -@book{aho2006compilers, - author = {Aho, Alfred V. and Lam, Monica S. and Sethi, Ravi and Ullman, Jeffrey D.}, - title = {Compilers: Principles, Techniques, and Tools}, - edition = {2nd}, - year = {2006}, - publisher = {Addison-Wesley}, - address = {Boston, MA} -} -``` - -**Where to cite:** When comparing to "compiler course model" - Introduction and Related Work - -**Suggested text addition:** -> "The curriculum follows compiler course pedagogy~\citep{aho2006compilers}: students build a complete system module-by-module, experiencing how components integrate through direct implementation." - -### 4. Operating Systems Pedagogy - -```bibtex -@book{arpaci2018operating, - author = {Arpaci-Dusseau, Remzi H. and Arpaci-Dusseau, Andrea C.}, - title = {Operating Systems: Three Easy Pieces}, - year = {2018}, - publisher = {Arpaci-Dusseau Books}, - url = {http://pages.cs.wisc.edu/~remzi/OSTEP/} -} -``` - -**Where to cite:** When discussing "build the whole stack" approach - -**Suggested text addition in Related Work:** -> "TinyTorch's incremental system construction draws pedagogical inspiration from compiler courses~\citep{aho2006compilers} and operating systems courses~\citep{arpaci2018operating}, where students build complete systems to develop systems thinking~\citep{meadows2008thinking} through component integration." - ---- - -## HIGH-VALUE ADDITIONS - -### 5. Active Learning Foundation - -```bibtex -@article{freeman2014active, - author = {Freeman, Scott and Eddy, Sarah L. and McDonough, Miles and Smith, Michelle K. and Okoroafor, Nnadozie and Jordt, Hannah and Wenderoth, Mary Pat}, - title = {Active learning increases student performance in science, engineering, and mathematics}, - journal = {Proceedings of the National Academy of Sciences}, - volume = {111}, - number = {23}, - pages = {8410--8415}, - year = {2014}, - doi = {10.1073/pnas.1319030111} -} -``` - -**Where to cite:** When justifying hands-on, build-from-scratch approach - -**Suggested text addition:** -> "This constructionist, hands-on pedagogy aligns with meta-analytic evidence that active learning significantly improves student performance in STEM education compared to traditional lecture-based instruction~\citep{freeman2014active}." - -### 6. Academic Workforce Citations (Replace Robert Half/Keller) - -```bibtex -@article{brynjolfsson2017machine, - author = {Brynjolfsson, Erik and Mitchell, Tom}, - title = {What can machine learning do? Workforce implications}, - journal = {Science}, - volume = {358}, - number = {6370}, - pages = {1530--1534}, - year = {2017}, - doi = {10.1126/science.aap8062} -} - -@article{ransbotham2020expanding, - author = {Ransbotham, Sam and Kiron, David and Gerbert, Philipp and Reeves, Martin}, - title = {Expanding AI's Impact with Organizational Learning}, - journal = {MIT Sloan Management Review}, - volume = {61}, - number = {4}, - year = {2020} -} -``` - -**Where to use:** Introduction, replace or supplement Robert Half/Keller citations - -**Suggested reframe:** -> "Machine learning systems engineering requires tacit knowledge that resists automation~\citep{brynjolfsson2017machine}: understanding why Adam requires 2Γ— optimizer state memory, when attention's O(NΒ²) scaling becomes prohibitive, how to navigate accuracy-latency-memory tradeoffs. While workforce demand for ML systems skills has grown substantially~\citep{ransbotham2020expanding}, traditional ML education separates algorithms from systems..." - -### 7. Progressive Disclosure HCI/Learning - -```bibtex -@article{mayer2009multimedia, - author = {Mayer, Richard E. and Moreno, Roxana}, - title = {Nine ways to reduce cognitive load in multimedia learning}, - journal = {Educational Psychologist}, - volume = {38}, - number = {1}, - pages = {43--52}, - year = {2003}, - doi = {10.1207/S15326985EP3801_6} -} -``` - -OR - -```bibtex -@book{nielsen1993usability, - author = {Nielsen, Jakob}, - title = {Usability Engineering}, - year = {1993}, - publisher = {Academic Press}, - address = {Boston, MA} -} -``` - -**Where to cite:** When discussing progressive disclosure pattern as contribution - -**Suggested text addition:** -> "Progressive disclosureβ€”revealing complexity incrementally to manage cognitive load~\citep{mayer2009multimedia}β€”addresses this through runtime feature activation..." - ---- - -## CITE WHAT YOU ALREADY HAVE - -### 8. Bloom's Taxonomy for Assessment - -**Already in bib:** `thompson2008bloom` - -**Where to cite:** Section 4.4 (NBGrader Assessment) or when discussing assessment levels - -**Suggested text addition:** -> "NBGrader tests progress from lower-order skills (recall tensor operations) to higher-order skills (analyze gradient flow, evaluate optimization tradeoffs), following Bloom's taxonomy for computing education~\citep{thompson2008bloom}." - -### 9. Vygotsky - Scaffolding/ZPD - -**Already in bib:** `vygotsky1978mind` - -**Where to cite:** Related Work section when discussing scaffolding, or when discussing progressive difficulty - -**Suggested text addition:** -> "Module prerequisites create scaffolding~\citep{vygotsky1978mind}, ensuring students work within their zone of proximal development: challenging enough to require new learning, familiar enough to build on mastered concepts." - ---- - -## RECOMMENDED SEARCH QUERIES - -### For Recent ML Education Work (2023-2024) - -**Google Scholar:** -- `"machine learning education" 2023 2024 SIGCSE` -- `"teaching machine learning" 2023 2024 ICER` -- `"ML systems" education 2023 2024` - -**ACM Digital Library:** -- Search SIGCSE 2023, 2024 proceedings for: "machine learning" OR "deep learning" -- Search ICER 2023, 2024 proceedings for: "ML" OR "framework" - -**arXiv:** -- `cat:cs.CY "machine learning education" 2023` - -**Target:** Find 2-3 recent papers showing awareness of current ML education research - ---- - -## OPTIONAL BUT VALUABLE - -### 10. Notional Machines - -```bibtex -@phdthesis{sorva2013notional, - author = {Sorva, Juha}, - title = {Notional Machines and Introductory Programming Education}, - school = {Aalto University}, - year = {2013}, - type = {Doctoral dissertation} -} -``` - -**Where to cite:** When discussing "mental models of framework internals" - -**Suggested addition:** -> "Students develop notional machines~\citep{sorva2013notional}β€”mental models of framework internalsβ€”through implementation: how tensors store gradients, how autograd builds computational graphs, how optimizers manage state." - -### 11. JAX Discussion in Related Work - -**Already have bradbury2018jax in bib but not discussed** - -**Suggested addition to Related Work:** -> "\textbf{JAX}~\citep{bradbury2018jax} offers an alternative functional paradigm through composable transformations (\texttt{jax.grad}, \texttt{vmap}). While pedagogically valuable for understanding functional programming applied to ML, JAX assumes framework usage rather than framework construction, positioning it complementary to TinyTorch's build-from-scratch approach." - ---- - -## PRIORITY ORDER - -### Must Do (1-2 hours): -1. Fix bruner1960process (corrupted) -2. Fix perkins1992transfer (corrupted) -3. Add meadows2008thinking (systems thinking) -4. Add aho2006compilers (compiler course model) -5. Cite vygotsky1978mind (already in bib) -6. Cite thompson2008bloom (already in bib) - -### Should Do (2-3 hours): -7. Search SIGCSE/ICER 2023-2024 for recent work -8. Add brynjolfsson2017machine + ransbotham2020expanding (replace industry citations) -9. Add freeman2014active (active learning) -10. Add arpaci2018operating (OS course pedagogy) - -### Could Do (1-2 hours): -11. Add mayer2009multimedia or nielsen1993usability (progressive disclosure) -12. Add sorva2013notional (notional machines) -13. Add JAX discussion in related work - ---- - -## BIBTEX FILE CLEANUP - -**Remove these if not cited in final paper:** -- Any uncited technical papers (baydin2018automatic, etc.) -- Duplicate or superseded entries - -**Keep these even if lightly cited:** -- Historical ML papers (rosenblatt1958perceptron, rumelhart1986learning, lecun1998gradient) - important for milestone validation -- Technical framework papers (pytorch04release, tensorflow20) - important for historical context - ---- - -## WHERE TO ADD IN PAPER - -### Introduction (Lines 174-180): -- Replace/supplement Robert Half/Keller with Brynjolfsson, Ransbotham -- Add compiler/OS course references when comparing to "compiler course model" - -### Related Work - Educational Frameworks (Lines 377-388): -- Add JAX discussion -- Cite recent ML education work if found - -### Related Work - Learning Theory (Lines 389-400): -- Cite Vygotsky when discussing scaffolding -- Add Mayer/Nielsen for progressive disclosure grounding -- Add Freeman for active learning - -### Related Work - New Subsection (INSERT): -Add new subsection "Systems Pedagogy Foundations": -```latex -\subsection{Systems Pedagogy Foundations} - -TinyTorch's incremental system construction draws pedagogical inspiration from compiler courses~\citep{aho2006compilers} and operating systems courses~\citep{arpaci2018operating}, where students build complete systems (compilers from lexer to code generator, OS kernels from process management to file systems) to develop systems thinking~\citep{meadows2008thinking} through component integration. This "build the whole stack" approach has proven effective for teaching complex systems concepts in CS education. -``` - -### Section 4.4 NBGrader (Around line 820): -- Cite thompson2008bloom when discussing assessment levels - ---- - -**Total estimated time for all Must Do + Should Do items: 3-5 hours** - -**Expected impact on citation quality: 6.5/10 β†’ 8.5/10** diff --git a/paper/CLAIM_EVIDENCE_MATRIX.md b/paper/CLAIM_EVIDENCE_MATRIX.md deleted file mode 100644 index c3acd28d..00000000 --- a/paper/CLAIM_EVIDENCE_MATRIX.md +++ /dev/null @@ -1,250 +0,0 @@ -# TinyTorch Paper: Claim-Evidence Matrix - -Quick reference: Every major claim mapped to evidence strength and required action. - ---- - -## How to Read This Matrix - -- **Status Icons:** - - βœ… **STRONG** - Can defend to reviewers, keep as-is - - ⚠️ **MEDIUM** - Evidence exists but needs hedging/clarification - - ❌ **WEAK** - No evidence, remove or significantly hedge - -- **Action Codes:** - - **KEEP** - Claim is well-supported - - **HEDGE** - Add qualifiers (hypothesized, estimated, designed to) - - **VERIFY** - Check source and update - - **REMOVE** - No supporting evidence, delete claim - ---- - -## QUANTITATIVE CLAIMS - -| Claim | Location | Evidence | Status | Action | -|-------|----------|----------|--------|--------| -| 3:1 supply/demand ratio | Line 176 | Industry report (keller2025ai) | ❌ WEAK | VERIFY or REMOVE | -| 150,000 practitioners | Line 176 | Industry report (roberthalf2024talent) | ❌ WEAK | REMOVE | -| 78% job posting growth | Line 176 | Industry report | ❌ WEAK | REMOVE | -| 40-50% executives cite shortage | Line 176 | Industry report (keller2025ai) | ❌ WEAK | VERIFY or REMOVE | -| Adam 2Γ— optimizer state | Lines 176, 359, 481 | Mathematical derivation | βœ… STRONG | KEEP | -| Adam 4Γ— total training memory | Lines 176, 359, 740 | Mathematical derivation | βœ… STRONG | KEEP | -| Conv2d 109Γ— parameter efficiency | Lines 354, 359, 537 | Calculated: 896 vs 98,336 | βœ… STRONG | KEEP | -| MNIST 180 MB | Line 734 | Calculation: 60kΓ—784Γ—4 = 188 MB | βœ… STRONG | KEEP | -| ImageNet 670 GB | Line 734 | Calculation: 1.2MΓ—224Β²Γ—3Γ—4 = 722 GB | βœ… STRONG | KEEP | -| GPT-3 training 2.6 TB | Line 740 | Calculation: 175BΓ—4Γ—4 = 2.8 TB | βœ… STRONG | KEEP | -| CIFAR conv 241M ops | Line 775 | Calculation: 128Γ—32Γ—28Β²Γ—3Γ—5Β² | βœ… STRONG | KEEP | -| 20 modules | Lines 169, 180, 354 | Codebase: 20 directories exist | βœ… STRONG | KEEP | -| 60-80 hours curriculum | Lines 169, 352 | No empirical data | ❌ WEAK | ADD "estimated" | -| 2-3 weeks bootcamp | Line 352 | Contradicts 60-80hrs (implies 80-120) | ❌ WEAK | REMOVE or RECONCILE | -| 283 NBGrader cells | Implicit | Verified in codebase | βœ… STRONG | KEEP (if mentioned) | -| 167 test files | Not mentioned | Only 1 found in codebase | ❌ WEAK | REMOVE claim | - ---- - -## TECHNICAL CLAIMS - -| Claim | Location | Evidence | Status | Action | -|-------|----------|----------|--------|--------| -| Progressive disclosure reduces cognitive load | Lines 361, 717 | Grounded in Sweller (1988), already hedged | ⚠️ MEDIUM | KEEP (hedged as hypothesis) | -| Systems-first improves learning | Lines 359, 730 | Design exists, no comparison data | ⚠️ MEDIUM | HEDGE as "enables" not "demonstrates" | -| Historical milestones validate correctness | Lines 167, 270, 354 | Templates exist, no student completion data | ❌ WEAK | CHANGE to "provides validation targets" | -| Monkey-patching enables progressive disclosure | Lines 354, 598-642 | Implementation exists in codebase | βœ… STRONG | KEEP | -| Module 01 has dormant gradient features | Lines 361, 603-609 | Code exists in tensor_dev.py | βœ… STRONG | KEEP | -| PyTorch 0.4 Variable/Tensor merger parallel | Lines 395, 723 | Cited pytorch04release | βœ… STRONG | KEEP | -| 10-100Γ— speedup from vectorization | Lines 501, 542, 775 | Plausible given Table 1 data | ⚠️ MEDIUM | KEEP (comparative claim) | -| TinyTorch 90-424Γ— slower than PyTorch | Table 1, Line 777 | If measured, strong; if estimated, hedge | ⚠️ MEDIUM | ADD measurement methodology footnote | - ---- - -## PEDAGOGICAL CLAIMS - -| Claim | Location | Evidence | Status | Action | -|-------|----------|----------|--------|--------| -| Constructionism supports build-from-scratch | Line 393 | Cited Papert (1980) | βœ… STRONG | KEEP | -| Cognitive apprenticeship via modeling | Line 395 | Cited Collins et al. (1989) | βœ… STRONG | KEEP | -| Productive failure pedagogy | Lines 397, 777 | Cited Kapur (2008) | βœ… STRONG | KEEP | -| Threshold concepts (autograd, memory) | Line 399 | Cited Meyer & Land (2003) | βœ… STRONG | KEEP | -| Situated cognition via building | Line 730 | Cited Lave & Wenger (1991) | βœ… STRONG | KEEP | -| Compiler course model analogy | Line 272 | No citation for compiler pedagogy | ⚠️ MEDIUM | ADD citation or soften | -| Students transition users β†’ engineers | Lines 180, 352 | Design goal, no assessment | ❌ WEAK | HEDGE as "aims to" | -| Makes tacit knowledge explicit | Lines 180, 359 | Design goal, no knowledge tests | ❌ WEAK | HEDGE as "designed to" | -| Validates via milestone recreation | Lines 167, 270, 569 | Milestones are templates, not proven | ❌ WEAK | CHANGE to "provides targets" | -| Three integration models work | Lines 352, 817-826 | Design described, deployment unproven | ⚠️ MEDIUM | HEDGE as "supports" not "validated" | - ---- - -## ARTIFACT CLAIMS - -| Claim | Location | Evidence | Status | Action | -|-------|----------|----------|--------|--------| -| 20 modules implemented | Throughout | All 20 directories exist in codebase | βœ… STRONG | KEEP | -| NBGrader infrastructure complete | Lines 363, 841-882 | 283 solution cells, metadata exists | βœ… STRONG | KEEP | -| Infrastructure unvalidated at scale | Line 882 | Acknowledged in paper | βœ… STRONG | KEEP (honest scoping) | -| PyTorch-inspired package architecture | Lines 363, 885-906 | nbdev exports, import structure exists | βœ… STRONG | KEEP | -| TinyDigits dataset exists | Line 535 | Directory exists in datasets/ | βœ… STRONG | KEEP | -| TinyTalks dataset exists | Line 535 | Directory exists in datasets/ | βœ… STRONG | KEEP | -| Datasets <50MB combined | Line 535 | Needs verification | ⚠️ MEDIUM | VERIFY size with du -sh | -| Datasets offline-first | Line 535 | Design intent, verifiable | βœ… STRONG | KEEP | -| 6 historical milestones (1958-2024) | Lines 571-586 | 6 milestone directories exist | βœ… STRONG | KEEP | -| Students achieve 95% MNIST | Line 532 | Target accuracy, not proven student result | ⚠️ MEDIUM | CLARIFY as "target" | -| Students achieve 75% CIFAR-10 | Line 537 | Target accuracy, not proven student result | ⚠️ MEDIUM | CLARIFY as "target" | -| 70 years of ML history | Lines 167, 270, 354 | 1958-2024 = 66 years, close enough | βœ… STRONG | KEEP (acceptable rounding) | -| Milestones use only student code | Lines 167, 569 | Design intent, unverified | ⚠️ MEDIUM | HEDGE as "designed to use" | - ---- - -## LEARNING OUTCOME CLAIMS - -| Claim | Location | Evidence | Status | Action | -|-------|----------|----------|--------|--------| -| Students learn systems thinking | Lines 270, 359 | Curriculum structure, no assessment | ❌ WEAK | HEDGE as "designed to teach" | -| Improves production readiness | Line 359 | No job placement or skill transfer data | ❌ WEAK | HEDGE or REMOVE | -| Better than algorithm-only approach | Implied | No controlled comparison | ❌ WEAK | REMOVE or explicitly state "requires comparison" | -| Cognitive load reduction | Lines 361, 717 | Already hedged as hypothesis | ⚠️ MEDIUM | KEEP (properly hedged) | -| Transfer to PyTorch/TensorFlow | Lines 352, 1023 | Design intent, no transfer tasks | ❌ WEAK | HEDGE as "should transfer" | -| Students complete curriculum | Implied | No completion tracking | ❌ WEAK | ACKNOWLEDGE as unknown | -| Memory reasoning becomes automatic | Line 532 | Pedagogical goal, no assessment | ❌ WEAK | HEDGE as "aim" | - ---- - -## DEPLOYMENT CLAIMS - -| Claim | Location | Evidence | Status | Action | -|-------|----------|----------|--------|--------| -| Three integration models | Lines 817-826 | Design documented, deployment unproven | ⚠️ MEDIUM | KEEP with "supports" not "validated" | -| Self-paced learning (primary) | Line 821 | Design described, usage unknown | ⚠️ MEDIUM | KEEP as design, note validation needed | -| Institutional integration | Line 823 | Model described, no adoptions known | ⚠️ MEDIUM | KEEP as option, not proven | -| Team onboarding | Line 825 | Model described, no company usage | ⚠️ MEDIUM | KEEP as potential use | -| CPU-only accessibility | Lines 832-835 | Design verified in codebase | βœ… STRONG | KEEP | -| 4GB RAM requirement | Line 835 | Design intent, should verify | ⚠️ MEDIUM | VERIFY via measurement | -| Works on Chromebooks | Line 835 | Plausible given Python-only | ⚠️ MEDIUM | KEEP with "should work" | -| NBGrader scalability projections | Lines 867-868 | Projections, not measured | ⚠️ MEDIUM | KEEP as "projected" | -| 30 students: 10 min grading | Line 867 | Projection, not empirical | ⚠️ MEDIUM | Already hedged as "projected" | -| 1000+ students: 2hr turnaround | Line 867 | Projection, not empirical | ⚠️ MEDIUM | Already hedged as "projected" | - ---- - -## COMPARISON CLAIMS - -| Claim | Location | Evidence | Status | Action | -|-------|----------|----------|--------|--------| -| vs. micrograd: Complete scope | Lines 379, 438 | micrograd is ~200 lines, TinyTorch is 20 modules | βœ… STRONG | KEEP | -| vs. MiniTorch: Systems emphasis | Lines 381, 439 | Different pedagogical focus documented | βœ… STRONG | KEEP | -| vs. tinygrad: Scaffolded pedagogy | Lines 383, 440 | Design differences clear | βœ… STRONG | KEEP | -| vs. CS231n: Cumulative framework | Lines 385, 441 | CS231n has isolated assignments | βœ… STRONG | KEEP | -| vs. d2l.ai: Framework construction | Lines 387, 441 | d2l.ai uses frameworks, doesn't build | βœ… STRONG | KEEP | -| vs. fast.ai: Bottom-up approach | Lines 387, 442 | fast.ai is top-down, documented | βœ… STRONG | KEEP | -| Table 1: Framework comparison | Lines 407-433 | All frameworks exist and verifiable | βœ… STRONG | KEEP | - ---- - -## FUTURE WORK CLAIMS - -| Claim | Location | Evidence | Status | Action | -|-------|----------|----------|--------|--------| -| Fall 2025 empirical validation planned | Lines 366, 1004 | Stated intent | ⚠️ MEDIUM | KEEP as plan, not commitment | -| Controlled studies planned | Line 1004 | Research plan described | ⚠️ MEDIUM | KEEP as plan | -| Cognitive load measurement planned | Line 717 | Methodology mentioned | ⚠️ MEDIUM | KEEP as plan | -| Transfer task assessment planned | Line 1004 | Future work described | ⚠️ MEDIUM | KEEP as plan | -| Maintenance commitment through 2027 | Line 929 | Author commitment | βœ… STRONG | KEEP (personal commitment) | - ---- - -## SCOPE LIMITATIONS (Already Well-Documented) - -| Claim | Location | Evidence | Status | Action | -|-------|----------|----------|--------|--------| -| No GPU programming covered | Lines 967-969 | Explicitly stated | βœ… STRONG | KEEP | -| No distributed training | Lines 969 | Explicitly stated | βœ… STRONG | KEEP | -| No production deployment | Lines 969-970 | Explicitly stated | βœ… STRONG | KEEP | -| CPU-only pedagogical choice | Lines 973-974 | Justified | βœ… STRONG | KEEP | -| 100-1000Γ— slower than PyTorch | Lines 777, 979 | Acknowledged trade-off | βœ… STRONG | KEEP | -| NBGrader unvalidated at scale | Line 882 | Honestly acknowledged | βœ… STRONG | KEEP | -| Learning outcomes unproven | Line 977 | Should be more prominent | ⚠️ MEDIUM | MOVE to Introduction | -| Materials in English only | Line 983 | Acknowledged limitation | βœ… STRONG | KEEP | - ---- - -## SUMMARY STATISTICS - -### By Evidence Strength: -- βœ… **STRONG (Keep as-is):** 45 claims (62%) -- ⚠️ **MEDIUM (Hedge/verify):** 20 claims (28%) -- ❌ **WEAK (Remove/rewrite):** 7 claims (10%) - -### By Required Action: -- **KEEP:** 45 claims (62%) -- **HEDGE:** 13 claims (18%) -- **VERIFY:** 4 claims (6%) -- **REMOVE:** 3 claims (4%) -- **CLARIFY:** 7 claims (10%) - -### Critical Action Items (Must Fix): -1. Workforce statistics (4 claims) - VERIFY or REMOVE -2. Milestone validation language (3 claims) - CHANGE to "provides targets" -3. Time estimates (2 claims) - ADD "estimated" -4. Systems-first effectiveness (1 claim) - HEDGE as "enables" - -### High Priority (Should Fix): -1. Learning outcome claims (6 claims) - HEDGE as design goals -2. Deployment model effectiveness (3 claims) - CLARIFY as options -3. Performance measurements (1 claim) - ADD methodology - ---- - -## HOW TO USE THIS MATRIX - -### Before Submission: -1. Review all ❌ **WEAK** claims - these MUST be fixed -2. Check all ⚠️ **MEDIUM** claims - hedge appropriately -3. Verify βœ… **STRONG** claims haven't been overstated - -### During Revision: -1. Use "Action" column to know what to do -2. Cross-reference "Location" to find exact lines -3. Check "Evidence" column to understand why change is needed - -### For Reviewer Response: -1. Point to βœ… **STRONG** claims when defending contributions -2. Acknowledge ⚠️ **MEDIUM** items as future work -3. Show you've removed ❌ **WEAK** unsupported claims - ---- - -## QUICK DECISION GUIDE - -**When you see this claim type β†’ Do this:** - -| Claim Type | Has Evidence? | Action | -|------------|---------------|--------| -| Mathematical calculation | Yes (formula) | KEEP - cite calculation | -| Code implementation | Yes (in codebase) | KEEP - cite GitHub | -| Learning theory | Yes (peer-reviewed citation) | KEEP - cite paper | -| Design feature | Yes (implemented) | KEEP - describe design | -| Pedagogical effectiveness | No (not measured) | HEDGE - "designed to," "aims to" | -| Learning outcome | No (no assessment) | HEDGE - "hypothesized," "should" | -| Student performance | No (no data) | REMOVE or mark as "target" | -| Industry statistic | Maybe (verify source) | VERIFY source or REMOVE | -| Time estimate | No (no tracking) | ADD "estimated" | -| Future plan | N/A (it's a plan) | KEEP with "planned" language | - ---- - -## FINAL CHECKLIST - -Before submission, verify: -- [ ] All ❌ claims fixed (removed or hedged) -- [ ] All workforce statistics verified or removed -- [ ] "60-80 hours" includes "estimated" -- [ ] Milestone "validation" β†’ "validation targets" -- [ ] Systems-first "demonstrates" β†’ "enables" -- [ ] Learning outcomes hedged as design goals -- [ ] No unverified performance numbers -- [ ] Limitations visible in Introduction - -**When all boxes checked:** Ready to submit βœ… - ---- - -This matrix provides the evidence foundation for all revision documents. Use it as the source of truth for claim verification. diff --git a/paper/EVIDENCE_INVENTORY.md b/paper/EVIDENCE_INVENTORY.md deleted file mode 100644 index aa36376e..00000000 --- a/paper/EVIDENCE_INVENTORY.md +++ /dev/null @@ -1,314 +0,0 @@ -# TinyTorch Paper: Evidence Inventory - -**What We Can Prove vs. What We're Claiming** - ---- - -## βœ… STRONG EVIDENCE (Can Defend to Reviewers) - -### Technical Calculations (All Verified) - -| Claim | Evidence | Status | -|-------|----------|--------| -| Adam 2Γ— optimizer state | momentum + variance = 2Γ— model params | βœ… Mathematically verified | -| Adam 4Γ— total training memory | weights + grads + momentum + variance | βœ… Mathematically verified | -| Conv2d 109Γ— parameter efficiency | 896 params vs 98,336 params | βœ… Calculated and verified | -| MNIST: ~180 MB | 60,000 Γ— 784 Γ— 4 = 188 MB | βœ… Within rounding error | -| ImageNet: ~670 GB | 1.2M Γ— 224Γ—224Γ—3 Γ— 4 = 722.5 GB | βœ… Within rounding error | -| GPT-3 training: ~2.6 TB | 175B Γ— 4 Γ— 4 = 2.8 TB | βœ… Within rounding error | -| CIFAR conv: 241M ops | 128Γ—32Γ—28Γ—28Γ—3Γ—5Γ—5 = 241,228,800 | βœ… Exact | - -**Reviewer Defense:** "All memory and complexity calculations are mathematically derived and verified against standard formulas." - ---- - -### Implementation Artifacts (All Exist) - -| Claim | Evidence | Verification Command | Status | -|-------|----------|---------------------|--------| -| 20 modules implemented | 20 directories in modules/ | `ls -1 modules/\|grep ^[0-9]\|wc -l` | βœ… 20 found | -| NBGrader infrastructure | 283 solution cells | `grep -r "BEGIN SOLUTION" modules/\|wc -l` | βœ… 283 found | -| Progressive disclosure code | Dormant features in Module 01 | `modules/01_tensor/tensor_dev.py:606-609` | βœ… Implemented | -| PyTorch-inspired package | nbdev export directives | `grep "default_exp" modules/*/\*.py` | βœ… Found | -| TinyDigits dataset | Dataset directory exists | `ls datasets/tinydigits/` | βœ… Exists | -| TinyTalks dataset | Dataset directory exists | `ls datasets/tinytalks/` | βœ… Exists | -| Milestone templates | 6 milestone directories | `ls milestones/0*/` | βœ… 6 found | - -**Reviewer Defense:** "All claimed infrastructure is publicly available and documented at github.com/harvard-edge/TinyTorch" - ---- - -### Learning Theory Grounding (Well-Cited) - -| Claim | Evidence | Citation | Status | -|-------|----------|----------|--------| -| Cognitive load theory | Cited Sweller (1988) | Line 717, references.bib:51 | βœ… Peer-reviewed | -| Constructionism | Cited Papert (1980) | Line 393, references.bib:366 | βœ… Peer-reviewed | -| Cognitive apprenticeship | Cited Collins et al. (1989) | Line 395, references.bib:104 | βœ… Peer-reviewed | -| Productive failure | Cited Kapur (2008) | Line 397, references.bib:382 | βœ… Peer-reviewed | -| Threshold concepts | Cited Meyer & Land (2003) | Line 399, references.bib:397 | βœ… Peer-reviewed | -| Situated learning | Cited Lave & Wenger (1991) | Line 730, references.bib:92 | βœ… Peer-reviewed | - -**Reviewer Defense:** "Pedagogical design grounded in established CS education research with peer-reviewed citations." - ---- - -## ⚠️ WEAK EVIDENCE (Needs Hedging or Removal) - -### Workforce Statistics (Cannot Verify) - -| Claim | Citation | Problem | Status | -|-------|----------|---------|--------| -| 3:1 supply/demand ratio | keller2025ai | Industry report, not peer-reviewed | ❌ Unverifiable | -| 150,000 practitioners worldwide | roberthalf2024talent | Specific number without source quote | ❌ Unverifiable | -| 78% job posting growth | roberthalf2024talent | No page number or quote provided | ❌ Unverifiable | -| 40-50% executives cite shortage | keller2025ai | Range suggests uncertainty | ❌ Unverifiable | - -**Reviewer Challenge:** "These are industry marketing materials, not research. Can you cite peer-reviewed workforce studies?" - -**Recommendation:** Remove specific numbers, keep general statement: -```latex -Industry surveys identify demand-supply imbalances for ML systems -engineers~\citep{roberthalf2024talent,keller2025ai} -``` - ---- - -### Time Estimates (No Empirical Data) - -| Claim | Evidence | Problem | Status | -|-------|----------|---------|--------| -| 60-80 hours curriculum | NONE | No student tracking data | ❌ Unsupported | -| 2-3 weeks bootcamp | NONE | Contradicts 60-80 hours (implies 80-120hrs) | ❌ Inconsistent | - -**Reviewer Challenge:** "What data supports these time estimates? How many students completed the curriculum?" - -**Recommendation:** Add "estimated based on pilot testing" - ---- - -### Learning Outcomes (Design Goals, Not Proven Results) - -| Claim | Evidence | Problem | Status | -|-------|----------|---------|--------| -| "Students transition from users to engineers" | Curriculum design | No pre/post assessment | ❌ Unproven outcome | -| "Makes tacit knowledge explicit" | Module structure | No knowledge transfer tests | ❌ Design goal | -| "Validates correctness through milestones" | Milestone templates exist | No student completion data | ❌ Overstated | -| "Reduces cognitive load" | Already hedged as hypothesis | Properly scoped | βœ… Acceptable hedging | - -**Reviewer Challenge:** "How do you know students learn better with this approach? Where's the comparison data?" - -**Recommendation:** Change to design goals rather than proven outcomes: -- "aims to transition students" -- "designed to make tacit knowledge explicit" -- "provides validation targets through milestones" - ---- - -## πŸ” MISSING EVIDENCE (Should Collect for Future Paper) - -### Student Usage Data -- ❌ Number of students who completed curriculum -- ❌ Completion rate per module -- ❌ Drop-off points (which modules students abandon) -- ❌ Time per module (actual measurements) -- ❌ Background characteristics (ML experience, programming proficiency) - -### Milestone Achievement Data -- ❌ Percentage achieving target accuracies (95% MNIST, 75% CIFAR) -- ❌ Common implementation bugs (qualitative failure analysis) -- ❌ Debugging time per milestone -- ❌ Success rate: students who attempt vs. complete milestones - -### Learning Outcome Assessments -- ❌ Pre/post knowledge tests -- ❌ Transfer tasks (debugging PyTorch code with TinyTorch knowledge) -- ❌ Comparison with control group (traditional ML course students) -- ❌ Cognitive load measurements (dual-task, self-report scales) -- ❌ Six-month retention follow-up - -### Deployment Evidence -- ❌ Number of institutions using curriculum -- ❌ Student enrollment numbers -- ❌ TA/instructor feedback -- ❌ Integration model effectiveness (self-paced vs. institutional) - -**Timeline:** Fall 2025 deployment can collect this data - ---- - -## πŸ“Š EVIDENCE STRENGTH BY CLAIM TYPE - -### Mathematical/Technical Claims: 95% Strong -- All calculations verified -- Code implementations exist -- Can reproduce all numbers -- **Action:** None needed, these are solid - -### Infrastructure Claims: 90% Strong -- Modules, datasets, NBGrader all exist -- Publicly available and verifiable -- Package structure documented -- **Action:** Verify dataset sizes, clarify test count - -### Learning Theory Claims: 85% Strong -- Well-cited peer-reviewed sources -- Design grounded in established research -- Properly hedged (progressive disclosure as "hypothesized") -- **Action:** Ensure consistent hedging throughout - -### Pedagogical Effectiveness Claims: 30% Strong -- Design exists and is well-documented -- No empirical validation of learning outcomes -- Time estimates unsubstantiated -- Milestone "validation" overstated -- **Action:** Hedge as design goals, not proven results - -### Workforce Motivation Claims: 20% Strong -- Based on industry reports, not research -- Cannot verify specific statistics -- May not be appropriate for academic paper -- **Action:** Remove specifics or verify sources - ---- - -## 🎯 WHAT REVIEWERS WILL ACCEPT - -### Acceptable Claims (Evidence Exists) -βœ… "We implemented a 20-module curriculum" -βœ… "Progressive disclosure uses monkey-patching for runtime activation" -βœ… "Adam requires 2Γ— optimizer state (momentum + variance)" -βœ… "Conv2d achieves 109Γ— parameter efficiency over dense layers" -βœ… "Design grounded in cognitive load theory~\citep{sweller1988}" -βœ… "Curriculum provides historical milestone templates" -βœ… "NBGrader infrastructure enables automated assessment" - -### Questionable Claims (Needs Hedging) -⚠️ "Students transition from users to engineers" β†’ "aims to transition" -⚠️ "Validates correctness through milestones" β†’ "provides validation targets" -⚠️ "60-80 hours completion time" β†’ "estimated 60-80 hours" -⚠️ "Makes tacit knowledge explicit" β†’ "designed to make explicit" - -### Unacceptable Claims (Remove or Verify) -❌ "3:1 supply/demand ratio" (cannot verify) -❌ "150,000 practitioners worldwide" (cannot verify) -❌ "78% job posting growth" (cannot verify) -❌ "Students recreate 70 years of ML history" (milestones are templates, not proven) - ---- - -## πŸ“ RECOMMENDED EVIDENCE LANGUAGE - -### For Unverified Claims: -**DON'T SAY:** -- "X demonstrates that..." -- "This proves..." -- "Evidence shows..." -- "Validates that..." - -**DO SAY:** -- "X is designed to..." -- "We hypothesize that..." -- "This approach aims to..." -- "Preliminary observations suggest..." (if you have pilot data) - -### For Future Work: -**DON'T SAY:** -- "Will be tested in Fall 2025" - -**DO SAY:** -- "Empirical validation planned for Fall 2025 deployment" -- "Requires controlled studies comparing to traditional approaches" -- "Future work will measure..." - ---- - -## πŸ”¬ EVIDENCE QUALITY TIERS - -### Tier 1: Mathematical/Reproducible Evidence -- Anyone can verify these claims -- Examples: Conv2d 109Γ—, Adam 4Γ—, memory calculations -- **Strength:** Unassailable - -### Tier 2: Implemented Artifacts -- Reviewers can inspect code -- Examples: 20 modules, NBGrader cells, milestone templates -- **Strength:** Strong (publicly verifiable) - -### Tier 3: Cited Learning Theory -- Grounded in peer-reviewed research -- Examples: Cognitive load theory, constructionism -- **Strength:** Acceptable (design justification) - -### Tier 4: Design Claims -- Infrastructure exists but effectiveness unproven -- Examples: Integration models, progressive disclosure -- **Strength:** Acceptable if hedged as design goals - -### Tier 5: Learning Outcome Claims -- No empirical validation yet -- Examples: "Students learn better," "Reduces cognitive load" -- **Strength:** Weak (requires hedging or future work framing) - -### Tier 6: External Statistics -- Industry reports, not research -- Examples: Workforce numbers -- **Strength:** Very weak (verify or remove) - ---- - -## πŸŽ“ FINAL GUIDANCE - -### What This Paper CAN Claim: -1. "We designed and implemented a complete 20-module ML systems curriculum" -2. "The design is grounded in established learning theory (X, Y, Z)" -3. "Progressive disclosure is a novel pedagogical pattern for ML education" -4. "Systems-first integration differs from traditional algorithm-focused curricula" -5. "All infrastructure is open-source and publicly available" -6. "The curriculum provides historical milestone templates for validation" - -### What This Paper CANNOT (Yet) Claim: -1. "Students learn better with this approach" (no comparison data) -2. "Curriculum takes 60-80 hours" (no timing data) -3. "Students successfully recreate ML history" (no completion data) -4. "Progressive disclosure reduces cognitive load" (no measurements) -5. "Specific workforce shortage statistics" (cannot verify sources) - -### Paper Positioning: -**This is a design contribution with empirical validation planned, not a learning outcomes study with proven effectiveness.** - -Frame as: -- "We present a curriculum design..." -- "This approach is hypothesized to..." -- "Future work will empirically validate..." - -NOT as: -- "We prove that..." -- "Results show that..." -- "Students demonstrate improved..." - ---- - -## πŸ“‹ EVIDENCE COLLECTION PRIORITY - -### Before Submission (Critical): -1. βœ… Verify or remove workforce statistics -2. βœ… Hedge learning outcome claims -3. βœ… Clarify milestone templates vs. validation -4. βœ… Add "estimated" to time claims - -### For Fall 2025 (High Priority): -1. ⏳ Student completion tracking -2. ⏳ Time-per-module measurements -3. ⏳ Milestone achievement rates -4. ⏳ Pre/post knowledge assessments - -### For Future Research (Medium Priority): -1. ⏳ Cognitive load experiments -2. ⏳ Transfer task assessments -3. ⏳ Comparison with control groups -4. ⏳ Long-term retention studies - ---- - -**Bottom Line:** You have strong evidence for what you built. You have weak evidence for how well it works. Frame accordingly. diff --git a/paper/LITERATURE_REVIEW_ASSESSMENT.md b/paper/LITERATURE_REVIEW_ASSESSMENT.md deleted file mode 100644 index 4981acc4..00000000 --- a/paper/LITERATURE_REVIEW_ASSESSMENT.md +++ /dev/null @@ -1,787 +0,0 @@ -# TinyTorch Literature Review Assessment -**Dr. James Patterson - Research Literature Expert** - -**Date:** 2025-11-18 -**Paper Analyzed:** `/Users/VJ/GitHub/TinyTorch/paper/paper.tex` -**References:** `/Users/VJ/GitHub/TinyTorch/paper/references.bib` - ---- - -## Executive Summary - -The TinyTorch paper demonstrates **solid core coverage** of educational ML frameworks and learning theory, but has **critical gaps** in three areas that could hurt in peer review: - -1. **CORRUPTED BIBLIOGRAPHY ENTRIES** - Two citations have completely wrong metadata (bruner1960, perkins1992) -2. **Missing Recent Work** - No 2023-2024 ML systems education research cited -3. **Weak Industry Evidence** - Workforce gap claims rely solely on non-academic sources - -**Overall Assessment:** 7/10 citation strategy. Strong pedagogical grounding, fair competitive positioning, but needs 5-7 strategic additions and 2 critical fixes before submission. - ---- - -## 1. Related Work Coverage - -### 1.1 Educational ML Frameworks - STRONG βœ… - -**What's Cited:** -- micrograd (Karpathy 2022) - autograd minimalism -- MiniTorch (Rush 2020) - Cornell Tech curriculum -- tinygrad (Hotz 2023) - inspectable production system -- d2l.ai (Zhang 2021) - comprehensive algorithmic foundations -- fast.ai (Howard 2020) - top-down layered API approach - -**Assessment:** -- All major direct competitors cited βœ… -- Comparisons are **fair and strategic** - acknowledge strengths while positioning TinyTorch's unique systems-first angle -- micrograd comparison is accurate (scalar-only, no systems focus) -- MiniTorch comparison is respectful and differentiating (math rigor vs. systems-first) -- tinygrad comparison correctly identifies scaffolding gap - -**What's MISSING:** -- **JAX educational materials** - Only cited as code (bradbury2018jax) but not discussed in related work despite JAX being increasingly used for educational purposes (functional paradigm, explainability) -- **nnfs.io** (Neural Networks from Scratch) - Harrison Kinsley's book/course, similar bottom-up approach but focuses more on algorithms than systems -- **PyTorch tutorials evolution** - The official PyTorch tutorials have become quite pedagogical, worth brief mention - -**Recommendation:** -- Add brief mention of JAX's functional approach in Related Work: - > "JAX~\citep{bradbury2018jax} offers an alternative functional paradigm through composable transformations, teaching automatic differentiation via `jax.grad` and vectorization through `vmap`. While pedagogically valuable for understanding functional programming applied to ML, JAX assumes framework usage rather than framework construction, positioning it complementary to but distinct from TinyTorch's build-from-scratch approach." - -### 1.2 University Courses - GOOD BUT INCOMPLETE ⚠️ - -**What's Cited:** -- Stanford CS231n (Johnson 2016) - CNNs course with NumPy assignments -- CMU DL Systems (Chen 2022) - production ML systems course -- Harvard TinyML (Banbury 2021) - embedded deployment focus - -**Assessment:** -- CS231n citation is appropriate - isolated exercises vs. cumulative framework -- CMU DL Systems positioned correctly as "advanced follow-on" to TinyTorch -- **TinyML comparison is EXCELLENT** - clear differentiation (edge deployment vs. framework internals) - -**What's MISSING:** -- **Berkeley CS182/282A** (Deep Learning) - Widely adopted course, some from-scratch assignments -- **Full Stack Deep Learning** (FSDL) - Production ML course, natural comparison point -- **MIT 6.S191** - Introductory deep learning, large MOOC audience -- **Other Cornell courses** beyond MiniTorch - -**Verdict:** Adequate coverage of major courses. CS231n and CMU DL Systems are the most important, both cited. Berkeley/MIT would strengthen "landscape coverage" but not critical. - ---- - -## 2. Learning Theory Grounding - -### 2.1 Pedagogical Citations - STRONG BUT UNBALANCED βœ…βš οΈ - -**What's Cited:** -- **Constructionism** - Papert 1980 βœ… -- **Cognitive Apprenticeship** - Collins 1989 βœ… (cited 3x, most frequent learning theory) -- **Cognitive Load** - Sweller 1988 βœ… -- **Productive Failure** - Kapur 2008 βœ… (cited 3x) -- **Threshold Concepts** - Meyer 2003 βœ… -- **Situated Learning** - Lave & Wenger 1991 βœ… - -**Assessment:** -This is **exceptionally strong grounding** in learning theory. The six theories cited cover: -- Knowledge construction (Papert, Collins) -- Cognitive constraints (Sweller, Kapur) -- Conceptual transformation (Meyer) -- Contextual learning (Lave & Wenger) - -**Citation frequencies reveal emphasis:** -- Cognitive Apprenticeship (3x) - heavily emphasized -- Productive Failure (3x) - heavily emphasized -- Others (1x each) - mentioned but less central - -**CRITICAL PROBLEMS:** - -1. **CORRUPTED bruner1960process entry:** - ```bibtex - @article{bruner1960process, - author = {Frolli, A and Cerciello, F...}, # WRONG AUTHORS - title = {Narrative Approach and Mentalization.}, # WRONG TITLE - year = {1960}, # But doi is from 2023! - ``` - This appears to be searching for Bruner's scaffolding work but got wrong paper. **FIX IMMEDIATELY** - should cite: - - Bruner, J. S. (1960). "The Process of Education" - classic scaffolding work - - OR Wood, Bruner, Ross (1976). "The role of tutoring in problem solving" - original scaffolding paper - -2. **CORRUPTED perkins1992transfer entry:** - ```bibtex - @article{perkins1992transfer, - author = {Burstein, R and Henry, NJ...}, # WRONG - this is about infant mortality - title = {Mapping 123 million neonatal, infant and child deaths...}, # COMPLETELY WRONG - journal = {Nature}, - year = {1992}, # But doi says 2019! - ``` - This is cited ONCE but appears to be looking for transfer of learning work. Should be: - - Perkins, D. N., & Salomon, G. (1992). "Transfer of learning" - International encyclopedia of education - -**What's MISSING:** - -3. **Bloom's Taxonomy** - Paper mentions "systems analysis" and "evaluation" levels but doesn't cite Bloom - - You have `thompson2008bloom` in bib but NEVER CITED in paper! - - This is about CS assessment using Bloom's - should use it when discussing NBGrader assessment - -4. **Scaffolding** - You discuss scaffolding 5+ times but only cite it via Cognitive Apprenticeship - - Missing direct scaffolding citations: Wood, Bruner, Ross (1976) or Vygotsky (1978) ZPD - - You HAVE vygotsky1978mind in bib but NEVER CITE IT! - -5. **Active Learning** - You discuss peer instruction, engagement, but no citations - - Missing: Freeman et al. (2014) PNAS meta-analysis on active learning effectiveness - - Missing: Mazur (1997) Peer Instruction - -6. **Chunking/Progressive Disclosure** - You claim this as innovation but don't cite HCI/progressive disclosure literature - - Missing: Nielsen (1993) progressive disclosure in UI design - - Missing: Mayer (2009) multimedia learning principles - -**Recommendations:** - -**CRITICAL FIXES (must do before submission):** -1. Fix bruner1960process - find correct Bruner scaffolding citation -2. Fix perkins1992transfer - find correct transfer learning citation -3. Cite thompson2008bloom when discussing NBGrader assessment levels -4. Cite vygotsky1978mind when discussing scaffolding/ZPD - -**STRATEGIC ADDITIONS (strengthen theoretical foundation):** -5. Add Freeman et al. (2014) active learning meta-analysis to justify hands-on approach -6. Add progressive disclosure HCI literature (Nielsen or Mayer) to ground the progressive disclosure pattern claim - -### 2.2 CS Education Research - ADEQUATE ⚠️ - -**What's Cited:** -- NBGrader (Blank 2019) βœ… -- Learner-Centered Design (Guzdial 2015) βœ… -- Peer Instruction (Porter 2013) βœ… -- Auto-grading review (Ihantola 2010) βœ… -- Teaching OOP (KΓΆlling 2001) βœ… -- CS Ed Research (Fincher 2004) βœ… - -**Assessment:** -- Good breadth of CS education foundations -- NBGrader citation is essential - correctly used -- Guzdial citation adds learner-centered credibility -- Porter peer instruction supports engagement claims - -**What's MISSING:** -- **Computing education research methodology** - If you're making pedagogical claims, should cite: - - Robins et al. (2003) "Learning and Teaching Programming: A Review and Discussion" - - Bennedsen & Caspersen (2007) on failure rates in CS1 -- **Notional machines** - Your "mental models of framework internals" aligns with notional machine concept: - - Sorva (2013) "Notional Machines and Introductory Programming Education" -- **SIGCSE/ICER recent work on ML education** - Missing 2023-2024 papers from top CS Ed venues - -**Recommendation:** -- Consider adding notional machine citation when discussing "mental models" -- Conduct targeted search for 2023-2024 SIGCSE/ICER papers on ML education - ---- - -## 3. Systems Education Context - -### 3.1 Systems Thinking - WEAK ❌ - -**What's Cited:** -- TVM compiler (Chen 2018) βœ… -- PyTorch autograd (Paszke 2017) βœ… -- Roofline model (Williams 2009) βœ… (only in future work!) -- ASTRA-sim (Chakkaravarthy 2023) βœ… (only in future work!) - -**Assessment:** -This is the **weakest area** of the related work. You claim "systems-first" as a major contribution but barely ground it in systems education literature. - -**CRITICAL GAPS:** - -1. **No systems thinking pedagogy citations** - - You use "systems thinking" 20+ times but cite NO systems thinking education research - - Missing: Meadows (2008) "Thinking in Systems" - foundational - - Missing: Senge (1990) "The Fifth Discipline" - organizational learning - - Missing: Richmond (1993) "Systems thinking: critical thinking skills for the 1990s and beyond" - -2. **No compiler course pedagogogy** - - You compare to "compiler course model" but cite NO compiler education papers - - Missing: Aho et al. (2006) "Compilers: Principles, Techniques, and Tools" (Dragon Book) - - Missing: Appel (1998) "Modern Compiler Implementation" series - - Should cite actual compiler courses that use incremental construction - -3. **No operating systems pedagogy** - - TinyTorch's "build the whole system" mirrors OS courses (xv6, Pintos, Nachos) - - Missing: Arpaci-Dusseau (2018) "Operating Systems: Three Easy Pieces" - - Missing: Ousterhout (1999) "Teaching Operating Systems Using Log-Based Kernels" - -4. **No software engineering education** - - Package organization, module dependencies, integration - all SE concepts - - Missing: any SE education citations - -**What's PARTIALLY There:** - -5. **ML Systems papers** - You cite: - - MLSys book (Reddi 2024) βœ… - good! - - FlashAttention (Dao 2022) βœ… - technical paper, not educational - - Horovod, DeepSpeed - technical papers, not educational - -**Recommendation - ADD IMMEDIATELY:** - -**Systems Thinking Foundation:** -```bibtex -@book{meadows2008thinking, - author = {Meadows, Donella H.}, - title = {Thinking in Systems: A Primer}, - year = {2008}, - publisher = {Chelsea Green Publishing} -} -``` - -**Compiler Course Model:** -```bibtex -@book{aho2006compilers, - author = {Aho, Alfred V. and Lam, Monica S. and Sethi, Ravi and Ullman, Jeffrey D.}, - title = {Compilers: Principles, Techniques, and Tools}, - edition = {2nd}, - year = {2006}, - publisher = {Addison-Wesley} -} -``` - -**OS Course Model:** -```bibtex -@book{arpaci2018operating, - author = {Arpaci-Dusseau, Remzi H. and Arpaci-Dusseau, Andrea C.}, - title = {Operating Systems: Three Easy Pieces}, - year = {2018}, - publisher = {Arpaci-Dusseau Books} -} -``` - -Then add paragraph in Related Work: -> "TinyTorch's incremental system construction draws pedagogical inspiration from compiler courses~\citep{aho2006compilers} and operating systems courses~\citep{arpaci2018operating}, where students build complete systems (compilers from lexer to code generator, OS kernels from process management to file systems) to develop systems thinking~\citep{meadows2008thinking} through component integration. This ``build the whole stack'' approach has proven effective for teaching complex systems concepts in CS education." - -### 3.2 ML Systems Workforce - PROBLEMATIC ⚠️❌ - -**What's Cited:** -- Robert Half (2024) - industry report ⚠️ -- Keller Executive Search (2025) - industry report ⚠️ - -**Assessment:** -The workforce gap motivates the entire paper, but you rely on **non-peer-reviewed industry sources**. This is risky for academic venues. - -**Problems:** -1. These are recruiting firms, not research organizations -2. No academic backing for "3:1 demand-supply ratio" -3. No academic backing for "only 150,000 skilled practitioners" -4. "78% year-over-year growth" might be inflated by industry hype - -**What's MISSING:** - -Academic sources on ML workforce: -- **ACM/IEEE computing workforce reports** -- **Bureau of Labor Statistics data** on ML engineer demand -- **Academic papers on AI skills gap:** - - Ransbotham et al. (2020) MIT Sloan on AI adoption barriers - - Brynjolfsson & Mitchell (2017) on AI workforce requirements -- **Industry-academic collaboration papers** -- **Survey papers from CACM, IEEE Computer, or similar** - -**Recommendation - CRITICAL for SIGCSE/Educational Venues:** - -Either: -1. **Downplay workforce claims** - Make it secondary motivation, not primary -2. **Add academic backing** - Find peer-reviewed sources on AI skills gap -3. **Reframe as "tacit knowledge problem"** - This is your strongest argument and doesn't need industry stats - -**Suggested Academic Citations:** - -```bibtex -@article{ransbotham2020expanding, - author = {Ransbotham, Sam and Kiron, David and Gerbert, Philipp and Reeves, Martin}, - title = {Expanding AI's Impact with Organizational Learning}, - journal = {MIT Sloan Management Review}, - year = {2020} -} - -@article{brynjolfsson2017machine, - author = {Brynjolfsson, Erik and Mitchell, Tom}, - title = {What can machine learning do? Workforce implications}, - journal = {Science}, - volume = {358}, - number = {6370}, - pages = {1530--1534}, - year = {2017} -} -``` - ---- - -## 4. Citation Balance - -### 4.1 Citation Distribution Analysis - -**Total unique citations:** ~40 entries in references.bib -**Actually cited in paper:** ~35-38 (some in bib never cited) - -**By Category:** -- **Educational Frameworks:** 6 citations (micrograd, MiniTorch, tinygrad, d2l.ai, fast.ai, CS231n) -- **Learning Theory:** 8 citations (Papert, Collins, Sweller, Kapur, Meyer, Lave, Bruner*, Perkins*) -- **CS Education:** 6 citations (NBGrader, Guzdial, Porter, Ihantola, KΓΆlling, Fincher) -- **ML Systems:** 4 citations (Reddi MLSys book, Chen DL Systems, Williams Roofline, ASTRA-sim) -- **Technical ML:** 10 citations (PyTorch, TensorFlow, autograd papers, optimization papers, FlashAttention, etc.) -- **Workforce/Industry:** 2 citations (Robert Half, Keller) -- **Other:** 4 citations (MLPerf, CIFAR, historical ML papers) - -**Assessment:** - -**Over-cited Areas:** -- **Technical ML papers** - You cite lots of algorithm papers (Vaswani attention, Kingma Adam, etc.) but these are for milestone validation, not related work. This is fine but heavy. - -**Under-cited Areas:** -- **ML Systems Education** - Only 2 real educational systems citations (Reddi book, Chen course) -- **Systems Thinking Pedagogy** - Zero citations despite 20+ mentions -- **Recent Work (2023-2024)** - Only 2-3 recent citations, rest are 2020 or older - -**Citation Age Distribution:** -- 2024-2025: 2 citations (Reddi MLSys book, Keller workforce) -- 2022-2023: 4 citations (micrograd, tinygrad, Chen DL Systems, ASTRA-sim) -- 2018-2021: 10 citations (NBGrader, fast.ai, d2l.ai, JAX, etc.) -- 2000-2017: 15 citations (learning theory classics, foundational ML) -- Pre-2000: 5 citations (Papert, Sweller, Bruner, etc.) - -**Verdict:** -- Good balance between classic theory (pre-2000) and recent work (2020+) -- **TOO FEW 2023-2024 citations** for a 2025 paper - looks outdated -- Learning theory foundations are appropriately older (Papert 1980, Sweller 1988) - -### 4.2 Uncited Entries in references.bib - -**Entries in bib but NEVER cited in paper:** -1. `thompson2008bloom` - Bloom's taxonomy for CS assessment ❗ SHOULD CITE -2. `vygotsky1978mind` - Mind in Society, scaffolding/ZPD ❗ SHOULD CITE -3. `bradbury2018jax` - JAX framework - mentioned in text but not formally cited -4. Several technical papers (Baydin autograd survey, Chen gradient checkpointing, etc.) - -**Recommendation:** -- Remove uncited technical papers from bib (clutter) -- ADD citations for thompson2008bloom and vygotsky1978mind in appropriate sections - ---- - -## 5. Competitive Positioning - -### 5.1 Framework Comparison Table (Table 1) - EXCELLENT βœ… - -**Assessment:** -This table is **pedagogically brilliant** and **strategically sound**: - -**Strengths:** -- Separates educational vs. production frameworks clearly -- Five comparison dimensions are well-chosen: Purpose, Scope, Systems Focus, Target Outcome -- TinyTorch row is bolded - appropriate emphasis -- Fair to competitors - doesn't strawman - -**Strategic Positioning:** -- micrograd: acknowledged strength (understand backprop) while showing limitation (no systems) -- MiniTorch: respectful ("build from first principles") while differentiating (embedded systems from M01) -- tinygrad: acknowledges sophistication ("understand compilation") while showing gap (scaffolding) -- PyTorch/TensorFlow: correctly positioned as "what comes after" TinyTorch - -**Minor Suggestions:** -- Consider adding "Assessment" column to highlight NBGrader infrastructure advantage -- Consider adding "Hardware Requirements" to emphasize CPU-only accessibility - -### 5.2 Detailed Framework Comparisons (Prose) - GOOD βœ… - -**micrograd comparison (line 379):** -> "pedagogical clarity comes from intentional minimalism... necessarily omits systems concerns" - -**Verdict:** βœ… Fair and strategic. Acknowledges strength (clarity) while identifying gap (no systems). - -**MiniTorch comparison (line 381):** -> "core curriculum emphasizes mathematical rigor... TinyTorch differs through systems-first emphasis" - -**Verdict:** βœ… Respectful differentiation. Doesn't claim MiniTorch is bad, just different focus. - -**tinygrad comparison (line 383):** -> "pedagogically valuable through its inspectable design, tinygrad assumes significant background" - -**Verdict:** βœ… Acknowledges value while identifying accessibility gap. - -**d2l.ai comparison (line 387):** -> "excels at algorithmic understanding through framework usage" - -**Verdict:** βœ… Generous acknowledgment of widespread adoption and algorithmic strength. - -**fast.ai comparison (line 387):** -> "distinctive top-down pedagogy starts with practical applications" - -**Verdict:** βœ… Accurately describes complementary approach without criticism. - -**Overall Competitive Positioning:** STRONG. Fair, strategic, differentiated without being aggressive. - ---- - -## 6. "What Are Reviewers Likely to Ask 'Why Didn't You Cite X?'" - -### 6.1 High-Risk Omissions - -**SIGCSE/ICER Reviewers Will Ask About:** - -1. **"Why no recent SIGCSE/ICER papers on ML education?"** - - Risk: HIGH for SIGCSE submission - - You cite nothing from 2023-2024 SIGCSE/ICER - - Need: Search SIGCSE 2023, 2024, ICER 2023, 2024 for ML education papers - -2. **"Why no systems thinking education citations despite 'systems-first' claim?"** - - Risk: HIGH for any venue - - You use "systems thinking" 20+ times but cite zero systems thinking pedagogy - - Need: Meadows (2008) or similar foundational systems thinking work - -3. **"Why no Bloom's taxonomy when discussing assessment?"** - - Risk: MEDIUM for education venues - - You have thompson2008bloom in bib but don't cite it - - Need: Cite when discussing NBGrader assessment levels - -4. **"Why no scaffolding citations when you discuss scaffolding 5+ times?"** - - Risk: MEDIUM for education venues - - You have vygotsky1978mind in bib but don't cite it - - Need: Cite Vygotsky or Wood/Bruner/Ross when discussing scaffolding - -**MLSys/Technical Reviewers Will Ask About:** - -5. **"Why no compiler course citations when you compare to 'compiler course model'?"** - - Risk: MEDIUM for MLSys - - You claim to follow compiler course pedagogy but cite no compiler education - - Need: Dragon Book or equivalent compiler course reference - -6. **"Why cite industry reports (Robert Half, Keller) for workforce claims?"** - - Risk: MEDIUM for academic venues - - These aren't peer-reviewed sources - - Need: Academic sources on AI skills gap OR downplay workforce motivation - -**General Academic Reviewers Will Ask About:** - -7. **"Why no recent work? Most citations are 2020 or older."** - - Risk: LOW-MEDIUM for 2025 submission - - Only 2-3 citations from 2023-2024 - - Need: More recent ML education / ML systems education work - -### 6.2 Medium-Risk Omissions - -8. **"Why no active learning meta-analysis when you claim hands-on effectiveness?"** - - Freeman et al. (2014) PNAS is the canonical citation for active learning superiority - - Risk: LOW-MEDIUM - -9. **"Why no progressive disclosure HCI literature when you claim it as innovation?"** - - Nielsen or Mayer on progressive disclosure in UI/learning - - Risk: LOW-MEDIUM - -10. **"Why no notional machines when discussing mental models?"** - - Sorva (2013) on notional machines in programming education - - Risk: LOW - -### 6.3 Low-Risk Omissions (Nice to Have) - -11. Berkeley CS182, MIT 6.S191, Full Stack Deep Learning courses -12. nnfs.io (Neural Networks from Scratch book/course) -13. More JAX educational materials discussion -14. Software engineering education (package design, modularity) -15. Educational data mining / learning analytics for assessing NBGrader - ---- - -## 7. Strategic Recommendations - -### 7.1 MUST FIX Before Submission (Critical Issues) - -**Priority 1: Fix Corrupted Bib Entries** ⚠️⚠️⚠️ -1. Fix `bruner1960process` - Currently has wrong paper (Narrative/Mentalization) - - Find: Bruner "The Process of Education" (1960) OR Wood, Bruner, Ross (1976) scaffolding paper -2. Fix `perkins1992transfer` - Currently has infant mortality paper - - Find: Perkins & Salomon (1992) "Transfer of learning" - -**Priority 2: Cite What You Already Have** -3. Cite `thompson2008bloom` when discussing NBGrader assessment (Section 4.4) -4. Cite `vygotsky1978mind` when discussing scaffolding/ZPD (Section 3.2.2 Related Work) - -**Priority 3: Add Systems Thinking Foundation** -5. Add Meadows (2008) "Thinking in Systems" - cite when using "systems thinking" -6. Add compiler course reference (Dragon Book or equivalent) - cite when comparing to "compiler course model" - -### 7.2 SHOULD ADD for Stronger Positioning (High Value) - -**Priority 4: Recent ML Education Work** -7. Search SIGCSE 2023, 2024 proceedings for ML education papers -8. Search ICER 2023, 2024 proceedings for ML/programming education papers -9. Search MLSys 2023, 2024 for any education-track papers - -**Priority 5: Strengthen Workforce Motivation** -10. Replace or supplement Robert Half/Keller with academic sources: - - Brynjolfsson & Mitchell (2017) Science paper on ML workforce - - Ransbotham et al. (2020) MIT Sloan on AI adoption barriers - - OR downplay workforce statistics, emphasize "tacit knowledge problem" - -**Priority 6: Active Learning Foundation** -11. Add Freeman et al. (2014) active learning meta-analysis to justify hands-on approach - -### 7.3 COULD ADD for Completeness (Medium Value) - -**Priority 7: Progressive Disclosure Grounding** -12. Add Nielsen (1993) or Mayer (2009) on progressive disclosure in learning/UI - -**Priority 8: Notional Machines** -13. Add Sorva (2013) on notional machines when discussing "mental models of internals" - -**Priority 9: OS Course Pedagogy** -14. Add OS education reference (OSTEP or similar) to strengthen "build the whole system" comparison - -### 7.4 REMOVE or DOWNPLAY (Clutter Reduction) - -**Priority 10: Clean Up Bib** -15. Remove uncited technical papers from references.bib (e.g., Baydin autograd survey if not cited) -16. Remove or integrate technical milestone papers (Rosenblatt, Rumelhart, LeCun) - currently just used for historical validation, not related work - ---- - -## 8. Citation Quality Checklist - -Going through your current citations: - -### Educational Frameworks -- βœ… micrograd (Karpathy 2022) - GitHub repo, appropriate -- βœ… MiniTorch (Rush 2020) - Cornell Tech, appropriate -- βœ… tinygrad (Hotz 2023) - GitHub repo, appropriate -- βœ… d2l.ai (Zhang 2021) - arXiv + Cambridge Press, peer-reviewed equivalent -- βœ… fast.ai (Howard 2020) - Published in *Information* journal, peer-reviewed -- βœ… CS231n (Johnson 2016) - Course webpage, appropriate for course citation - -### Learning Theory -- βœ… Papert (1980) - Classic, appropriate -- βœ… Collins (1989) - Routledge chapter, peer-reviewed -- βœ… Sweller (1988) - Cognitive Science journal, peer-reviewed -- βœ… Kapur (2008) - Cognition and Instruction, peer-reviewed -- βœ… Meyer (2003) - Book chapter, peer-reviewed -- βœ… Lave & Wenger (1991) - Cambridge University Press, peer-reviewed -- ❌ Bruner (1960) - **CORRUPTED ENTRY** - fix immediately -- ❌ Perkins (1992) - **CORRUPTED ENTRY** - fix immediately -- ⚠️ Vygotsky (1978) - **IN BIB BUT NEVER CITED** - should cite - -### CS Education -- βœ… NBGrader (Blank 2019) - JOSE, peer-reviewed -- βœ… Guzdial (2015) - Morgan & Claypool, peer-reviewed -- βœ… Porter (2013) - ACM SIGCSE, peer-reviewed -- βœ… Ihantola (2010) - Koli Calling, peer-reviewed -- βœ… KΓΆlling (2001) - ITiCSE, peer-reviewed -- βœ… Fincher (2004) - Taylor & Francis, peer-reviewed -- ⚠️ Thompson (2008) - **IN BIB BUT NEVER CITED** - should cite - -### Workforce/Industry -- ⚠️ Robert Half (2024) - **Industry press release, not peer-reviewed** -- ⚠️ Keller (2025) - **Industry report, not peer-reviewed** - -### ML Systems -- βœ… Reddi MLSys book (2024) - IEEE conference, peer-reviewed -- βœ… Chen DL Systems (2022) - CMU course, appropriate -- βœ… Williams Roofline (2009) - CACM, peer-reviewed -- βœ… ASTRA-sim (2020, 2023) - IEEE ISPASS, peer-reviewed - -### Technical ML -- βœ… PyTorch autograd (Paszke 2017) - NIPS workshop, appropriate -- βœ… TVM (Chen 2018) - OSDI, peer-reviewed -- βœ… FlashAttention (Dao 2022) - NeurIPS, peer-reviewed -- βœ… Vaswani attention (2017) - NeurIPS, peer-reviewed (note: doi shows 2025 reprint, original was 2017) -- βœ… Adam (Kingma 2014) - arXiv preprint widely cited, appropriate -- βœ… Horovod (Sergeev 2018) - arXiv preprint, appropriate -- βœ… DeepSpeed (Rasley 2020) - ACM KDD, peer-reviewed -- βœ… Historical ML (Rosenblatt 1958, Rumelhart 1986, LeCun 1998) - Classic papers, appropriate - -**Quality Issues:** -1. **2 corrupted entries** (bruner1960, perkins1992) - CRITICAL FIX -2. **2 industry reports** (Robert Half, Keller) - risky for academic venues -3. **2 uncited entries** (thompson2008bloom, vygotsky1978mind) - should cite or remove - -**Overall Citation Quality:** 7/10 -- Strong peer-reviewed foundation for learning theory and CS education -- Good mix of classic and recent work -- Technical citations are appropriate -- MAJOR issues: 2 corrupted entries, industry sources for key motivation - ---- - -## 9. Comparison Table: TinyTorch vs. What Reviewers Expect - -| Aspect | What You Have | What Reviewers Expect | Gap | -|--------|---------------|----------------------|-----| -| **Educational Frameworks** | 6 major frameworks cited (micrograd, MiniTorch, tinygrad, d2l.ai, fast.ai, CS231n) | All major educational frameworks | βœ… GOOD | -| **Learning Theory** | 8 theories cited (constructionism, cognitive apprenticeship, cognitive load, productive failure, threshold concepts, situated learning, + 2 corrupted) | Foundational learning theories with 3-5 key frameworks | βœ… STRONG (once corrupted entries fixed) | -| **Systems Thinking** | Zero pedagogy citations despite 20+ mentions | At least 1-2 systems thinking education sources | ❌ CRITICAL GAP | -| **Compiler Course Model** | Mentioned but not cited | Citation to compiler education when claiming to follow model | ⚠️ GAP | -| **Recent Work (2023-2024)** | 2-3 recent citations | 5-10 recent citations showing awareness of field | ⚠️ GAP | -| **Workforce Motivation** | 2 industry reports | Academic sources or downplayed motivation | ⚠️ RISKY | -| **Scaffolding** | Discussed but not directly cited | Vygotsky or Wood/Bruner/Ross when discussing scaffolding | ⚠️ GAP | -| **Assessment** | NBGrader cited but no Bloom's taxonomy | Bloom's when discussing assessment levels | ⚠️ MINOR GAP | -| **Active Learning** | Hands-on approach claimed but not grounded | Freeman et al. meta-analysis or similar | ⚠️ MINOR GAP | -| **Competitive Positioning** | Fair, strategic, differentiated | Fair comparison acknowledging strengths | βœ… EXCELLENT | - ---- - -## 10. Final Recommendations - -### 10.1 Must-Do Before Submission (1-2 hours) - -1. **Fix corrupted bruner1960process entry** - search for correct Bruner or Wood/Bruner/Ross scaffolding paper -2. **Fix corrupted perkins1992transfer entry** - search for correct Perkins & Salomon transfer of learning paper -3. **Add systems thinking citation** - Meadows (2008) "Thinking in Systems" -4. **Add compiler course citation** - Aho et al. (2006) "Compilers" (Dragon Book) -5. **Cite vygotsky1978mind** when discussing scaffolding/ZPD -6. **Cite thompson2008bloom** when discussing NBGrader assessment - -### 10.2 Should-Do for Strong Submission (4-6 hours) - -7. **Search SIGCSE 2023-2024** for recent ML education papers - add 2-3 if found -8. **Replace/supplement workforce citations** with academic sources: - - Brynjolfsson & Mitchell (2017) Science - - Ransbotham et al. (2020) MIT Sloan -9. **Add Freeman et al. (2014)** active learning meta-analysis -10. **Add OS course pedagogy** (Arpaci-Dusseau OSTEP) to strengthen systems course comparison - -### 10.3 Could-Do for Comprehensive Submission (2-4 hours) - -11. **Add progressive disclosure HCI literature** (Nielsen or Mayer) -12. **Add notional machines** (Sorva 2013) for mental models -13. **Add JAX discussion** in related work (functional paradigm) -14. **Search MLSys 2023-2024** for any education-focused papers - -### 10.4 Reframing Recommendations - -**Current Introduction Opening:** -> "Machine learning deployment faces a critical workforce bottleneck: demand for ML systems engineers outstrips supply by over 3:1..." - -**Suggested Reframe (de-emphasize industry stats):** -> "Machine learning systems engineering requires tacit knowledge that resists formal instruction: understanding why Adam requires 2Γ— optimizer state memory, when attention's O(NΒ²) scaling becomes prohibitive, how to navigate accuracy-latency-memory tradeoffs in production. These engineering judgment calls depend on mental models of framework internals, traditionally acquired through years of debugging PyTorch or TensorFlow rather than formal courses~\citep{reddi2024mlsysbook}. While workforce demand for such skills has grown substantially~\citep{brynjolfsson2017machine}, current ML education..." - -**Why:** Leads with the "tacit knowledge problem" (your strongest argument), supported by academic citation, with workforce as secondary motivation. - ---- - -## 11. Success Metrics - -After implementing recommendations, your citation strategy should score: - -| Criterion | Current | Target | Priority | -|-----------|---------|--------|----------| -| **Related Work Coverage** | 7/10 | 9/10 | HIGH | -| **Learning Theory Grounding** | 6/10 (corrupted entries) | 9/10 | CRITICAL | -| **Systems Education Context** | 4/10 | 8/10 | CRITICAL | -| **Citation Balance** | 7/10 | 8/10 | MEDIUM | -| **Competitive Positioning** | 9/10 | 9/10 | βœ… MAINTAIN | -| **Citation Quality** | 7/10 (corrupted entries) | 9/10 | CRITICAL | -| **Recency** | 6/10 | 8/10 | MEDIUM | -| **Academic Rigor** | 7/10 (industry sources) | 9/10 | HIGH | - -**Overall:** 6.5/10 β†’ **8.5/10** with recommended changes - ---- - -## 12. Reviewer Likelihood of "Missing Citation" Comments - -### By Venue: - -**SIGCSE/ICER Submission:** -- **HIGH RISK (>70% chance):** - - "Why no recent SIGCSE/ICER work on ML education?" - - "Why no Bloom's taxonomy when discussing assessment?" - - "Why no scaffolding citations (Vygotsky, Wood/Bruner/Ross)?" -- **MEDIUM RISK (30-70%):** - - "Why no systems thinking pedagogy despite systems-first claim?" - - "Why no active learning citations?" - - "Fix corrupted Bruner/Perkins entries" - -**MLSys/Systems Submission:** -- **HIGH RISK (>70%):** - - "Why no compiler course citations when comparing to compiler pedagogy?" - - "Why no systems thinking education citations?" -- **MEDIUM RISK (30-70%):** - - "Why cite industry reports for workforce claims?" - - "Why no OS course pedagogy for 'build the whole system' claim?" - -**General CS Education Venues (e.g., TOCE, CSE):** -- **HIGH RISK:** - - Systems thinking pedagogy gap - - Recent work gap (2023-2024) - - Corrupted bib entries -- **MEDIUM RISK:** - - Scaffolding citations - - Active learning foundations - - Progressive disclosure HCI literature - ---- - -## 13. Citation Search Queries for Missing Work - -To fill gaps, search these: - -### Google Scholar Queries: - -1. **Recent ML Education:** - - `"machine learning education" 2023 2024 SIGCSE` - - `"teaching machine learning" 2023 2024 ICER` - - `"ML systems education" 2023 2024` - - `"deep learning pedagogy" 2023 2024` - -2. **Systems Thinking Education:** - - `"systems thinking" education pedagogy` - - `"teaching systems thinking" computer science` - - `Meadows "Thinking in Systems"` - -3. **Compiler Course Pedagogy:** - - `"compiler course" pedagogy education` - - `"teaching compilers" incremental construction` - - `Aho "Compilers: Principles, Techniques, and Tools"` - -4. **Scaffolding:** - - `Wood Bruner Ross 1976 scaffolding` - - `Vygotsky "zone of proximal development" education` - -5. **AI Workforce (Academic):** - - `Brynjolfsson Mitchell 2017 machine learning workforce` - - `"AI skills gap" academic research` - - `"machine learning talent" shortage study` - -6. **Active Learning:** - - `Freeman 2014 "active learning increases student performance"` - -7. **Progressive Disclosure:** - - `Nielsen progressive disclosure` - - `Mayer multimedia learning progressive complexity` - -### ACM Digital Library Queries: - -- Search SIGCSE 2023, 2024 proceedings: `"machine learning" OR "deep learning" OR "neural networks"` -- Search ICER 2023, 2024 proceedings: `"machine learning" OR "ML" OR "framework"` - -### arXiv Queries: - -- `cat:cs.CY "machine learning education" 2023` -- `cat:cs.LG "teaching" OR "education" OR "pedagogy" 2023 2024` - ---- - -## Conclusion - -The TinyTorch paper has **solid core citations** for educational frameworks and learning theory, **excellent competitive positioning**, but **critical gaps** in systems thinking pedagogy, recent work, and two corrupted bib entries. - -**Priority actions:** -1. **Fix corrupted entries** (bruner1960, perkins1992) - blocking issue -2. **Add systems thinking** (Meadows 2008) - supports main claim -3. **Add compiler course reference** (Aho 2006) - supports pedagogical model -4. **Cite existing entries** (vygotsky1978mind, thompson2008bloom) -5. **Search for 2023-2024 ML education work** - shows awareness of field -6. **Replace/supplement workforce citations** with academic sources - -With these changes, the citation strategy moves from 6.5/10 to 8.5/10, significantly reducing reviewer pushback risk. - ---- - -**Files Referenced:** -- `/Users/VJ/GitHub/TinyTorch/paper/paper.tex` (1035 lines, ~40,000 words) -- `/Users/VJ/GitHub/TinyTorch/paper/references.bib` (528 lines, 40 entries) - -**Assessment Completed:** 2025-11-18 -**Reviewer:** Dr. James Patterson (Literature Review Specialist) diff --git a/paper/NEW_CITATIONS.bib b/paper/NEW_CITATIONS.bib deleted file mode 100644 index 48218123..00000000 --- a/paper/NEW_CITATIONS.bib +++ /dev/null @@ -1,291 +0,0 @@ -% ============================================================================ -% NEW CITATIONS TO ADD TO references.bib -% TinyTorch Literature Review Recommendations -% Generated: 2025-11-18 -% ============================================================================ - -% ---------------------------------------------------------------------------- -% CRITICAL FIXES - Replace corrupted entries -% ---------------------------------------------------------------------------- - -% REPLACE bruner1960process (currently has wrong paper) -% Original scaffolding work - choose ONE: - -% OPTION A: The Process of Education (1960) -@book{bruner1960process, - author = {Bruner, Jerome S.}, - title = {The Process of Education}, - year = {1960}, - publisher = {Harvard University Press}, - address = {Cambridge, MA}, - isbn = {9780674710009} -} - -% OPTION B: Original scaffolding paper (1976) - RECOMMENDED for scaffolding discussion -@article{wood1976scaffolding, - author = {Wood, David and Bruner, Jerome S. and Ross, Gail}, - title = {The role of tutoring in problem solving}, - journal = {Journal of Child Psychology and Psychiatry}, - volume = {17}, - number = {2}, - pages = {89--100}, - year = {1976}, - doi = {10.1111/j.1469-7610.1976.tb00381.x}, - publisher = {Wiley} -} - -% REPLACE perkins1992transfer (currently has infant mortality paper) -@incollection{perkins1992transfer, - author = {Perkins, David N. and Salomon, Gavriel}, - title = {Transfer of Learning}, - booktitle = {International Encyclopedia of Education}, - edition = {2nd}, - editor = {Husen, Torsten and Postlethwaite, T. Neville}, - year = {1992}, - publisher = {Pergamon Press}, - address = {Oxford, England} -} - -% ---------------------------------------------------------------------------- -% CRITICAL ADDITIONS - Systems Thinking and CS Education Foundations -% ---------------------------------------------------------------------------- - -% Systems thinking foundation - CRITICAL for "systems-first" claim -@book{meadows2008thinking, - author = {Meadows, Donella H.}, - title = {Thinking in Systems: A Primer}, - year = {2008}, - publisher = {Chelsea Green Publishing}, - address = {White River Junction, VT}, - isbn = {9781603580557}, - editor = {Wright, Diana} -} - -% Compiler course pedagogy - CRITICAL for "compiler course model" claim -@book{aho2006compilers, - author = {Aho, Alfred V. and Lam, Monica S. and Sethi, Ravi and Ullman, Jeffrey D.}, - title = {Compilers: Principles, Techniques, and Tools}, - edition = {2nd}, - year = {2006}, - publisher = {Addison-Wesley}, - address = {Boston, MA}, - isbn = {9780321486814}, - note = {The Dragon Book} -} - -% Operating systems pedagogy - for "build the whole system" comparison -@book{arpaci2018operating, - author = {Arpaci-Dusseau, Remzi H. and Arpaci-Dusseau, Andrea C.}, - title = {Operating Systems: Three Easy Pieces}, - year = {2018}, - publisher = {Arpaci-Dusseau Books}, - url = {http://pages.cs.wisc.edu/~remzi/OSTEP/}, - note = {Version 1.00} -} - -% ---------------------------------------------------------------------------- -% HIGH-VALUE ADDITIONS - Strengthen Theoretical Foundation -% ---------------------------------------------------------------------------- - -% Active learning meta-analysis - justifies hands-on approach -@article{freeman2014active, - author = {Freeman, Scott and Eddy, Sarah L. and McDonough, Miles and Smith, Michelle K. and Okoroafor, Nnadozie and Jordt, Hannah and Wenderoth, Mary Pat}, - title = {Active learning increases student performance in science, engineering, and mathematics}, - journal = {Proceedings of the National Academy of Sciences}, - volume = {111}, - number = {23}, - pages = {8410--8415}, - year = {2014}, - doi = {10.1073/pnas.1319030111}, - publisher = {National Academy of Sciences} -} - -% Academic workforce citation - replace/supplement Robert Half/Keller -@article{brynjolfsson2017machine, - author = {Brynjolfsson, Erik and Mitchell, Tom}, - title = {What can machine learning do? Workforce implications}, - journal = {Science}, - volume = {358}, - number = {6370}, - pages = {1530--1534}, - year = {2017}, - doi = {10.1126/science.aap8062}, - publisher = {American Association for the Advancement of Science} -} - -% Academic AI adoption barriers - supports workforce motivation -@article{ransbotham2020expanding, - author = {Ransbotham, Sam and Kiron, David and Gerbert, Philipp and Reeves, Martin}, - title = {Expanding AI's Impact with Organizational Learning}, - journal = {MIT Sloan Management Review}, - volume = {61}, - number = {4}, - pages = {1--6}, - year = {2020}, - url = {https://sloanreview.mit.edu/projects/expanding-ais-impact-with-organizational-learning/} -} - -% Progressive disclosure / cognitive load management -@article{mayer2003cognitive, - author = {Mayer, Richard E. and Moreno, Roxana}, - title = {Nine ways to reduce cognitive load in multimedia learning}, - journal = {Educational Psychologist}, - volume = {38}, - number = {1}, - pages = {43--52}, - year = {2003}, - doi = {10.1207/S15326985EP3801_6}, - publisher = {Routledge} -} - -% Alternative: Nielsen's progressive disclosure (HCI perspective) -@book{nielsen1993usability, - author = {Nielsen, Jakob}, - title = {Usability Engineering}, - year = {1993}, - publisher = {Academic Press}, - address = {Boston, MA}, - isbn = {9780125184069} -} - -% ---------------------------------------------------------------------------- -% OPTIONAL BUT VALUABLE - Strengthen Pedagogical Claims -% ---------------------------------------------------------------------------- - -% Notional machines - for "mental models" discussion -@phdthesis{sorva2013notional, - author = {Sorva, Juha}, - title = {Notional Machines and Introductory Programming Education}, - school = {Aalto University}, - year = {2013}, - type = {Doctoral dissertation}, - url = {https://aaltodoc.aalto.fi/handle/123456789/11299}, - address = {Espoo, Finland} -} - -% CS1/CS2 failure rates and learning difficulties -@inproceedings{bennedsen2007failure, - author = {Bennedsen, Jens and Caspersen, Michael E.}, - title = {Failure rates in introductory programming}, - booktitle = {ACM SIGCSE Bulletin}, - volume = {39}, - number = {2}, - pages = {32--36}, - year = {2007}, - doi = {10.1145/1272848.1272879}, - publisher = {ACM} -} - -% Programming education review -@article{robins2003learning, - author = {Robins, Anthony and Rountree, Janet and Rountree, Nathan}, - title = {Learning and Teaching Programming: A Review and Discussion}, - journal = {Computer Science Education}, - volume = {13}, - number = {2}, - pages = {137--172}, - year = {2003}, - doi = {10.1076/csed.13.2.137.14200}, - publisher = {Taylor \& Francis} -} - -% Peer instruction validation (if needed beyond Porter 2013) -@article{mazur1997peer, - author = {Mazur, Eric}, - title = {Peer Instruction: A User's Manual}, - journal = {American Journal of Physics}, - volume = {67}, - number = {4}, - pages = {359--360}, - year = {1999}, - doi = {10.1119/1.19265}, - note = {Book review of Mazur (1997) Prentice Hall} -} - -% ---------------------------------------------------------------------------- -% PLACEHOLDER - Add Recent ML Education Work (2023-2024) -% ---------------------------------------------------------------------------- - -% TODO: Search SIGCSE 2023-2024, ICER 2023-2024, MLSys 2023-2024 -% Add 2-3 recent papers on ML education here -% Example format: - -% @inproceedings{author2023mleducation, -% author = {LastName, FirstName and LastName, FirstName}, -% title = {Teaching ML Systems in Computer Science Education}, -% booktitle = {Proceedings of the 54th ACM Technical Symposium on Computer Science Education (SIGCSE)}, -% year = {2023}, -% pages = {XXX--XXX}, -% doi = {10.1145/XXXXXXX.XXXXXXX}, -% publisher = {ACM} -% } - -% ---------------------------------------------------------------------------- -% NOTES ON EXISTING ENTRIES TO CITE -% ---------------------------------------------------------------------------- - -% These are ALREADY in references.bib but NOT CITED in paper.tex: -% - thompson2008bloom - SHOULD cite when discussing NBGrader assessment levels -% - vygotsky1978mind - SHOULD cite when discussing scaffolding/ZPD -% - bradbury2018jax - Could discuss JAX in related work (functional paradigm) - -% ============================================================================ -% USAGE INSTRUCTIONS -% ============================================================================ - -% CRITICAL FIXES (Must do): -% 1. REPLACE bruner1960process entry in references.bib with one above -% 2. REPLACE perkins1992transfer entry in references.bib with one above -% 3. ADD meadows2008thinking (systems thinking foundation) -% 4. ADD aho2006compilers (compiler course model) - -% HIGH-VALUE ADDITIONS (Strongly recommended): -% 5. ADD arpaci2018operating (OS course pedagogy) -% 6. ADD freeman2014active (active learning justification) -% 7. ADD brynjolfsson2017machine + ransbotham2020expanding (replace industry citations) -% 8. ADD mayer2003cognitive OR nielsen1993usability (progressive disclosure) - -% OPTIONAL (Nice to have): -% 9. ADD sorva2013notional (notional machines) -% 10. ADD robins2003learning (programming education foundations) -% 11. Search and add 2-3 recent (2023-2024) ML education papers - -% EXISTING ENTRIES TO CITE: -% 12. Cite vygotsky1978mind when discussing scaffolding -% 13. Cite thompson2008bloom when discussing assessment -% 14. Consider citing bradbury2018jax in related work - -% ============================================================================ -% WHERE TO CITE IN paper.tex -% ============================================================================ - -% meadows2008thinking: -% - Related Work: "systems thinking~\citep{meadows2008thinking}" -% - Introduction: when discussing systems-first approach - -% aho2006compilers: -% - Introduction: "compiler course pedagogy~\citep{aho2006compilers}" -% - Related Work: new subsection on Systems Pedagogy Foundations - -% arpaci2018operating: -% - Related Work: "operating systems courses~\citep{arpaci2018operating}" - -% freeman2014active: -% - Related Work: "active learning improves student performance~\citep{freeman2014active}" - -% brynjolfsson2017machine + ransbotham2020expanding: -% - Introduction: replace/supplement Robert Half/Keller citations -% - Reframe workforce motivation as tacit knowledge problem - -% mayer2003cognitive: -% - Related Work: "progressive disclosure reduces cognitive load~\citep{mayer2003cognitive}" -% - Progressive Disclosure section - -% vygotsky1978mind (already in bib): -% - Related Work: "scaffolding~\citep{vygotsky1978mind}" -% - When discussing zone of proximal development - -% thompson2008bloom (already in bib): -% - NBGrader section: "Bloom's taxonomy for computing~\citep{thompson2008bloom}" - -% ============================================================================ diff --git a/paper/PYTHON_DEVELOPER_TECHNICAL_REVIEW.md b/paper/PYTHON_DEVELOPER_TECHNICAL_REVIEW.md deleted file mode 100644 index defde81c..00000000 --- a/paper/PYTHON_DEVELOPER_TECHNICAL_REVIEW.md +++ /dev/null @@ -1,700 +0,0 @@ -# TinyTorch Paper: Senior Python Developer Technical Review - -**Reviewer Perspective**: Senior Python Developer with 10+ years building production ML systems at major tech companies. Extensive experience with PyTorch, TensorFlow, JAX, and production ML infrastructure. - -**Review Date**: 2025-11-18 - -**Paper**: TinyTorch: Build Your Own Machine Learning Framework From Tensors to Systems - ---- - -## Executive Summary - -**Overall Assessment**: This is a pedagogically ambitious and well-structured curriculum with strong educational design, but the paper makes several claims about Python implementation details and production relevance that need significant revision. The paper would benefit from more honest acknowledgment of the educational vs. production trade-offs and correction of several technical inaccuracies. - -**Recommendation**: Major revisions required before publication. The core curriculum idea is sound, but technical claims need careful review by Python/ML systems practitioners. - -**Would I hire someone who completed this?** Yes, with caveats. They'd have excellent mental models of framework internals but would need significant additional training on production systems, modern Python practices, and real-world ML engineering. - ---- - -## 1. Code Pedagogy & Python Best Practices - -### 1.1 MAJOR CONCERNS: Python Anti-Patterns Being Taught - -#### Issue #1: Monkey-Patching as Core Pedagogical Pattern (Lines 598-642, Section 4) - -The paper presents monkey-patching as a "pedagogical innovation" for progressive disclosure. **This is concerning from a production Python perspective.** - -**Code Example from Paper (Listing 2.2, lines 619-634):** -```python -def enable_autograd(): - """Monkey-patch Tensor with gradients""" - def backward(self, gradient=None): - # ... implementation - - # Monkey-patch: replace methods - Tensor.backward = backward - print("Autograd activated!") -``` - -**Problems:** - -1. **Teaching bad habits**: Monkey-patching is widely considered an anti-pattern in production Python. It makes code unpredictable, breaks IDEs, confuses type checkers, and violates the principle of least surprise. - -2. **Better alternatives exist**: The stated goal (gradual feature revelation) could be achieved through: - - Abstract base classes with concrete implementations - - Composition over inheritance patterns - - Protocol-based typing (PEP 544) - - Feature flags within the class - - Separate `SimpleTensor` β†’ `GradientTensor` class hierarchy - -3. **Misleading PyTorch comparison**: The paper claims this "models how frameworks like PyTorch evolved (Variable/Tensor merger)" (line 365). This is **technically incorrect**. PyTorch 0.4's Variable/Tensor merger was a **compile-time refactoring**, not runtime monkey-patching. The C++ codebase was restructuredβ€”users didn't see runtime method replacement. - -**Specific Technical Inaccuracy (line 723):** -> "Early PyTorch (pre-0.4) separated data (`torch.Tensor`) from gradients (`torch.autograd.Variable`). PyTorch 0.4 (April 2018) consolidated functionality into `Tensor`, matching TinyTorch's pattern." - -This statement conflates two different software engineering approaches: -- PyTorch: Static type system changes, compile-time refactoring -- TinyTorch: Runtime method replacement via monkey-patching - -Students learning this pattern might think PyTorch actually uses monkey-patching internally, which would horrify the PyTorch core team. - -**Recommendation**: -- Remove claims that this mirrors PyTorch's evolution -- Acknowledge monkey-patching as "pedagogically expedient but not production practice" -- Add a "Production Python Note" box explaining why real frameworks don't do this -- Consider alternative implementations for progressive disclosure - -#### Issue #2: Missing Type Hints (Observed in code examples throughout) - -**Code Example (Listing 2.1, lines 515-531):** -```python -class Tensor: - def __init__(self, data): - self.data = np.array(data, dtype=np.float32) - self.shape = self.data.shape - - def memory_footprint(self): - """Calculate exact memory in bytes""" - return self.data.nbytes - - def __matmul__(self, other): - if self.shape[-1] != other.shape[0]: - raise ValueError( - f"Shape mismatch: {self.shape} @ {other.shape}" - ) - return Tensor(self.data @ other.data) -``` - -**What's Wrong:** -- No type hints on any methods -- Modern Python (3.5+) strongly encourages type hints for maintainability -- PyTorch, TensorFlow, JAX all have extensive type annotations -- Missing opportunity to teach static typing, which is critical in production ML - -**What It Should Look Like:** -```python -from typing import Union, List, Tuple -import numpy as np -from numpy.typing import NDArray, ArrayLike - -class Tensor: - def __init__(self, data: ArrayLike, dtype: np.dtype = np.float32) -> None: - self.data: NDArray[np.float32] = np.array(data, dtype=dtype) - self.shape: Tuple[int, ...] = self.data.shape - - def memory_footprint(self) -> int: - """Calculate exact memory in bytes""" - return self.data.nbytes - - def __matmul__(self, other: 'Tensor') -> 'Tensor': - if self.shape[-1] != other.shape[0]: - raise ValueError( - f"Shape mismatch: {self.shape} @ {other.shape}" - ) - return Tensor(self.data @ other.data) -``` - -**Impact on Students:** -- Students complete 20 modules without learning type hints -- When they encounter production PyTorch code with type annotations, they'll be confused -- Missing opportunity to teach mypy, which is essential for large Python codebases - -**Recommendation**: Add type hints to all code examples, with a dedicated section explaining static typing in Python. - -#### Issue #3: Adam Optimizer Implementation (Listing 1.2, lines 246-266) - -**Code from Paper:** -```python -class Adam: - def __init__(self, params, lr=0.001): - self.params = params - self.lr = lr - # 2Γ— optimizer state: - # momentum + variance - self.m = [Tensor.zeros_like(p) for p in params] - self.v = [Tensor.zeros_like(p) for p in params] - - def step(self): - for p, m, v in zip(self.params, self.m, self.v): - m = 0.9*m + 0.1*p.grad - v = 0.999*v + 0.001*p.grad**2 - p.data -= (self.lr * m / (v.sqrt() + 1e-8)) -``` - -**Critical Problems:** - -1. **Bug**: The `m` and `v` updates don't actually modify `self.m` and `self.v`. This creates local variables that get garbage collected. The next `step()` call uses the original (wrong) values. - - **Should be:** - ```python - def step(self): - for i, p in enumerate(self.params): - self.m[i] = 0.9 * self.m[i] + 0.1 * p.grad - self.v[i] = 0.999 * self.v[i] + 0.001 * p.grad**2 - p.data -= (self.lr * self.m[i] / (self.v[i].sqrt() + 1e-8)) - ``` - -2. **Wrong hyperparameters**: The code uses `0.9` for beta1 and `0.999` for beta2, but the update rule is wrong. Adam uses: - ``` - m_t = beta1 * m_{t-1} + (1 - beta1) * grad - v_t = beta2 * v_{t-1} + (1 - beta2) * grad^2 - ``` - - The code has `0.9*m + 0.1*grad` which is correct, but `0.999*v + 0.001*grad**2` is correct. However... - -3. **Missing bias correction**: Adam requires bias correction terms that aren't shown: - ```python - m_hat = m / (1 - beta1**t) - v_hat = v / (1 - beta2**t) - ``` - Without these, the optimizer will behave incorrectly in early training steps. - -**Impact**: Students implementing this will create a broken optimizer that appears to work but has subtle bugs. When they read PyTorch's Adam implementation, they'll be confused by the additional complexity. - -**Recommendation**: Either fix the implementation or add a prominent note: "Simplified Adam for pedagogyβ€”production implementations require bias correction and careful state management." - -### 1.2 POSITIVE: Good Pedagogical Choices - -Despite the issues above, several code patterns are excellent: - -1. **Explicit loop-based implementations** (Listing 3.1, lines 749-771): The 7-nested-loop convolution is pedagogically brilliant. Students see exactly what's happening. - -2. **Memory profiling integration** (Listing 2.1, line 521-523): Teaching `memory_footprint()` from day one is excellent. - -3. **Progressive complexity**: Starting with explicit loops, then introducing vectorization is the right approach. - -4. **Error messages** (line 527-529): Good use of f-strings for informative errors. - ---- - -## 2. Technical Accuracy: Python, NumPy, PyTorch Claims - -### 2.1 CRITICAL: Misleading Performance Claims - -**Table 2.1 (lines 779-793): Runtime Comparison** - -| Operation | TinyTorch | PyTorch | Ratio | -|-----------|-----------|---------|-------| -| `matmul` (1KΓ—1K) | 1.0 s | 0.9 ms | 1,090Γ— | -| `conv2d` (CIFAR batch) | 97 s | 10 ms | 10,017Γ— | -| `softmax` (10K elem) | 6 ms | 0.05 ms | 134Γ— | - -**Problems:** - -1. **Unfair comparison**: PyTorch's CPU performance uses MKL/OpenBLAS (highly optimized BLAS libraries), while TinyTorch uses pure Python loops. The comparison should be: - - TinyTorch vs. NumPy (fair Python-to-Python) - - NumPy vs. PyTorch CPU (library optimizations) - - PyTorch CPU vs. PyTorch GPU (hardware acceleration) - -2. **Missing NumPy baseline**: Since TinyTorch "builds on NumPy" (line 772), why not show NumPy's performance? - - **My estimate**: NumPy would be ~10-100Γ— slower than PyTorch CPU, not 1000Γ—, because NumPy also uses MKL. - -3. **Architectural mismatch**: The `matmul` comparison seems wrong. If TinyTorch uses `np.matmul` under the hood (as stated: "minimal NumPy reliance until concepts are established"), it should be much closer to PyTorch CPU. A 1000Γ— difference suggests pure Python nested loops, which contradicts earlier claims about using NumPy. - -**Specific Quote (lines 772-774):** -> "This explicit implementation illustrates TinyTorch's pedagogical philosophy: **minimal NumPy reliance until concepts are established**." - -This is contradictory. Earlier (line 184), the abstract says students "implement PyTorch's core componentsβ€”tensors, autograd, optimizersβ€”to gain framework transparency" **using only NumPy**. - -**Which is it?** -- "Only NumPy" (abstract, line 184) -- "Minimal NumPy reliance" (section 3.2, line 772) - -These are different claims. If you're using `np.matmul`, the 1000Γ— slowdown claim is misleading. - -**Recommendation**: -1. Clarify exactly which operations use NumPy vs. pure Python -2. Provide fair comparisons: TinyTorch vs. NumPy vs. PyTorch CPU vs. PyTorch GPU -3. Remove misleading performance ratios - -### 2.2 CONCERN: Oversimplified Memory Calculations - -**Example (lines 534, 740):** -> "Matrix multiplication A @ B where both are (1000, 1000) FP32 requires 12MB peak memory: 4MB for A, 4MB for B, and 4MB for the output." - -**What's Missing:** - -1. **Intermediate allocations**: In practice, `np.matmul` creates temporary arrays during computation. Peak memory is often higher than input + output. - -2. **Memory alignment**: Modern CPUs require memory alignment for SIMD operations. NumPy may allocate extra bytes. - -3. **Python object overhead**: Each `Tensor` object has Python overhead (dict, refcount, etc.). For small tensors, this dominates. - -4. **Fragmentation**: Memory allocators don't guarantee contiguous allocation. Peak RSS is often higher than theoretical minimum. - -**Real-world example:** -```python -import numpy as np -import psutil -import os - -process = psutil.Process(os.getpid()) -before = process.memory_info().rss / 1024**2 - -A = np.random.randn(1000, 1000).astype(np.float32) -B = np.random.randn(1000, 1000).astype(np.float32) -C = A @ B - -after = process.memory_info().rss / 1024**2 -print(f"Theoretical: 12 MB") -print(f"Actual: {after - before:.1f} MB") # Often 15-20 MB -``` - -**Impact**: Students will be confused when their memory profiling shows higher usage than calculated. - -**Recommendation**: Add a note about "theoretical minimum vs. practical memory usage" and teach students to measure actual memory with `psutil` or similar tools. - -### 2.3 POSITIVE: Accurate Complexity Analysis - -The paper correctly identifies: -- Convolution as O(B Γ— C_out Γ— H_out Γ— W_out Γ— C_in Γ— K_h Γ— K_w) βœ“ -- Attention as O(NΒ²) βœ“ -- Adam's 2Γ— optimizer state overhead βœ“ - -These are accurate and well-explained. - ---- - -## 3. Real-World Relevance & Production Readiness - -### 3.1 MAJOR GAP: What Students WON'T Learn - -The paper acknowledges GPU/distributed training gaps (lines 964-972) but **understates** how critical these are. - -**Missing skills for production ML engineering:** - -1. **GPU fundamentals** (not optional): - - Memory hierarchy (global/shared/local/register) - - Kernel fusion and graph optimization - - Mixed precision training (FP16/BF16) - - Gradient accumulation across devices - - **Reality**: 95% of production ML training uses GPUs. CPU-only knowledge is insufficient. - -2. **Distributed training** (essential for modern models): - - Data parallelism (DDP, FSDP) - - Model parallelism (pipeline, tensor) - - Gradient synchronization - - Communication bottlenecks - - **Reality**: GPT-3 requires 1024 GPUs. Can't train modern models on single CPU. - -3. **Modern Python tooling**: - - Type checking (mypy, pyright) - - Linting (ruff, pylint) - - Testing frameworks (pytest, hypothesis) - - Profiling (py-spy, scalene) - - Packaging (poetry, uv) - -4. **Production ML systems**: - - Model serving (TorchServe, TensorFlow Serving) - - ONNX export and optimization - - Quantization beyond int8 (int4, mixed precision) - - Latency SLAs and throughput optimization - - A/B testing and model versioning - -**Quote from paper (line 356):** -> "Students needing immediate GPU/distributed training skills are better served by PyTorch tutorials" - -**Counter-argument**: This dismisses the **primary skill gap** in ML engineering. The industry needs GPU-literate engineers, not CPU-only framework builders. - -**Recommendation**: Reframe positioning from "prepares students for ML systems engineering" to "prepares students to understand framework internals before learning production systems." - -### 3.2 CONCERN: "Systems-First" Framing vs. Reality - -The paper claims "systems-first curriculum" (line 363) but the actual systems content is **introductory at best**. - -**What the paper calls "systems":** -- Calculating memory footprints (basic arithmetic) -- Counting FLOPs (complexity analysis) -- Measuring wall-clock time (basic profiling) - -**What production systems engineering actually involves:** -- Memory bandwidth analysis and cache optimization -- Kernel fusion and compiler optimizations -- Network topology and communication patterns -- Batch scheduling and request routing -- Cost optimization and resource allocation - -**Example: Module 14 "Profiling" (line 500)** -The paper lists this as teaching "bottleneck identification, measurement overhead" but doesn't mention: -- Flame graphs -- Line profilers (line_profiler) -- Memory profilers (memory_profiler, memray) -- GPU profilers (nvprof, nsys) -- Distributed profilers (torch.profiler with TensorBoard) - -**Recommendation**: Rename "systems-first" to "systems-aware" or "systems-oriented" to set appropriate expectations. - -### 3.3 POSITIVE: Strong Foundation for Further Learning - -**What students WILL gain:** - -1. **Mental models**: Understanding computational graphs, gradient flow, and memory layout -2. **Debugging intuition**: Knowing where gradients come from helps debug shape mismatches -3. **Architecture understanding**: Why Conv2d has fewer parameters than Dense -4. **Trade-off reasoning**: Accuracy vs. speed vs. memory - -**These are valuable**, just not sufficient for production work. - ---- - -## 4. Implementation Concerns & Code Quality - -### 4.1 CRITICAL: Autograd Implementation Pattern - -**Code from listing 3.2 (lines 619-634) and Section 4:** - -The monkey-patching approach for autograd has a **fundamental software engineering problem**: - -**Problem: Thread Safety** -```python -# Module 01-04: Tensor without autograd -x = Tensor([1.0, 2.0]) -y = x * 2 # No gradient tracking - -# Module 05: Enable autograd -enable_autograd() # GLOBAL STATE CHANGE - -# Now ALL tensors track gradients -z = Tensor([3.0, 4.0]) # Gradients enabled -w = x * 3 # Old tensor now has gradients! -``` - -**Issues:** - -1. **Global mutable state**: `enable_autograd()` modifies the `Tensor` class globally. This is a classic anti-pattern. - -2. **No way to disable**: Once enabled, you can't turn it off without reloading the module. - -3. **Context-dependent behavior**: Same code behaves differently based on whether `enable_autograd()` was called. - -4. **Testing nightmare**: Tests that call `enable_autograd()` affect all subsequent tests. - -**Production approach (PyTorch):** -```python -# Context manager for gradient control -with torch.no_grad(): - y = x * 2 # No gradients - -y = x * 2 # Gradients tracked - -# Explicit control -x = torch.tensor([1.0], requires_grad=False) # No gradients -y = torch.tensor([1.0], requires_grad=True) # Track gradients -``` - -**Recommendation**: Implement autograd as an opt-in feature, not a monkey-patched global state change. - -### 4.2 CONCERN: Error Handling & Edge Cases - -**Throughout code examples**, error handling is minimal: - -**Example problems:** - -1. **Division by zero** (Adam optimizer, line 265): - ```python - p.data -= (self.lr * m / (v.sqrt() + 1e-8)) - ``` - What if `v` contains NaN or Inf? No check. - -2. **Shape broadcasting** (Tensor operations): - No validation that broadcasting rules are satisfied. Silent errors. - -3. **Out of memory**: - No guidance on handling OOM errors when creating large tensors. - -4. **Gradient explosion/vanishing**: - No clipping, no checks for NaN/Inf in gradients. - -**Production code includes:** -- Input validation -- Explicit error messages -- Gradient clipping -- NaN/Inf detection -- Resource limits - -**Recommendation**: Add a "Production Hardening" module teaching error handling and edge cases. - -### 4.3 POSITIVE: Clean API Design - -Despite implementation issues, the API design is good: - -1. **PyTorch-compatible imports**: `from tinytorch.nn import Linear` feels familiar -2. **Consistent method names**: `.forward()`, `.backward()`, `.step()` -3. **Progressive accumulation**: Each module adds capabilities naturally - ---- - -## 5. Framework Comparisons - -### 5.1 CONCERN: Oversimplified PyTorch Comparison - -**Table 1.1 (lines 409-435): Framework Comparison** - -The table positions TinyTorch as teaching "systems" while PyTorch has "advanced (implicit)" systems focus. - -**This is misleading.** - -**PyTorch's systems engineering** includes: -- Custom CUDA kernels -- Distributed communication -- Memory allocation strategies -- Graph optimization -- Operator fusion -- Mixed precision training - -These are **explicit and documented**, not "implicit." PyTorch has extensive documentation on: -- `torch.cuda` API -- Distributed training -- TorchScript compilation -- ONNX export - -**Recommendation**: Change "Advanced (implicit)" to "Advanced (production-focused)" for PyTorch/TensorFlow. - -### 5.2 POSITIVE: Fair Positioning vs. Educational Frameworks - -The comparisons to micrograd, MiniTorch, and tinygrad are fair and accurate (lines 379-448). - ---- - -## 6. Specific Technical Corrections Needed - -### 6.1 Line-by-Line Issues - -**Line 180-181**: "understanding *why* Adam requires 2Γ— optimizer state memory" -- **Correction**: Adam requires **3Γ— memory** in practice: - - 1Γ— for parameters - - 1Γ— for first moment (momentum) - - 1Γ— for second moment (variance) - - **Plus** gradient memory during backward pass - - Total: 4Γ— during training (params + gradients + m + v) - -**Line 264-265**: Adam update rule missing bias correction -- **Fix**: Add bias correction terms or note this is simplified - -**Line 534**: "12MB peak memory for 1KΓ—1K matmul" -- **Clarification**: Add "theoretical minimum; actual usage may be higher due to allocation overhead" - -**Line 723**: "PyTorch 0.4 consolidated functionality into Tensor, matching TinyTorch's pattern" -- **Correction**: Remove "matching TinyTorch's pattern" as PyTorch didn't use monkey-patching - -**Line 773**: "minimal NumPy reliance" -- **Clarification**: Specify exactly which operations use NumPy primitives vs. pure Python - -**Line 184**: "using only NumPy" -- **Contradiction**: This conflicts with "minimal NumPy" claim on line 773 - -### 6.2 Missing Technical Details - -**Should add:** - -1. **Computational graph memory**: How much memory does the graph itself consume? - -2. **Gradient accumulation**: Why is this important for large batch sizes? - -3. **In-place operations**: Why do they matter for memory efficiency? - -4. **View vs. copy**: When does NumPy return a view vs. allocating new memory? - ---- - -## 7. Practical Value Assessment - -### 7.1 Would I Hire Someone Who Completed This? - -**Yes, with significant caveats.** - -**What they'd know:** -- βœ… How autograd works -- βœ… Why attention is O(NΒ²) -- βœ… Memory calculation fundamentals -- βœ… Basic optimization trade-offs -- βœ… Framework architecture patterns - -**What they'd still need:** -- ❌ GPU programming (CUDA, cuDNN) -- ❌ Distributed training -- ❌ Production serving -- ❌ Modern Python tooling (mypy, ruff, pytest) -- ❌ MLOps (experiment tracking, versioning) -- ❌ Real-world debugging (profilers, debuggers) - -**Hiring scenario:** - -- **ML Research Engineer role**: Strong candidate with good fundamentals -- **ML Infrastructure role**: Would need 6+ months additional training -- **Production ML Engineer role**: Would need significant mentoring on systems/GPU - -**Comparison to other backgrounds:** - -- **TinyTorch grad vs. CS229 grad**: TinyTorch student has better internals knowledge -- **TinyTorch grad vs. PyTorch power user**: PyTorch user has better practical skills -- **TinyTorch grad vs. Stanford CS231n student**: Roughly comparable, different emphases - -### 7.2 What Would They Still Need to Learn? - -**Immediate gaps (3-6 months):** -1. Modern Python development (type hints, testing, tooling) -2. GPU fundamentals and CUDA basics -3. Production serving and deployment -4. Experiment tracking and MLOps - -**Medium-term gaps (6-12 months):** -1. Distributed training systems -2. Advanced optimization techniques -3. Model compression beyond basic quantization -4. Cost optimization and resource allocation - -**Long-term expertise (1-2 years):** -1. Custom CUDA kernels -2. Compiler optimizations -3. Hardware-software co-design -4. Large-scale system architecture - ---- - -## 8. Overall Recommendations - -### 8.1 Critical Changes Needed - -1. **Fix Adam implementation** (Listing 1.2): Add bias correction or explicit disclaimer - -2. **Remove/revise monkey-patching claims**: Don't present this as "how PyTorch works" - -3. **Add type hints**: Teach modern Python practices - -4. **Clarify NumPy usage**: "Only NumPy" vs. "minimal NumPy" contradiction - -5. **Fix memory calculations**: Add overhead discussion - -6. **Tone down "systems-first" claims**: Be honest about scope limitations - -### 8.2 Recommended Additions - -1. **"Production Python" boxes**: Throughout paper, add notes on production practices - -2. **Comparison table**: TinyTorch concepts β†’ PyTorch implementations - -3. **"What's Next" section**: Clear roadmap from TinyTorch to production work - -4. **Error handling module**: Teach production-grade code quality - -5. **Type checking module**: Introduce mypy and static typing - -### 8.3 Positioning Recommendations - -**Current framing**: "TinyTorch prepares students for ML systems engineering" - -**Better framing**: "TinyTorch builds mental models of framework internals, preparing students to learn production ML systems" - -**Key message**: This is **foundational education**, not **production training**. - ---- - -## 9. Strengths Worth Emphasizing - -Despite criticisms above, the paper has significant strengths: - -1. **Pedagogical innovation**: Progressive disclosure (despite implementation concerns) is creative - -2. **Historical milestones**: Brilliant motivational device connecting history to implementation - -3. **Integration testing**: Understanding that components must compose is crucial - -4. **Memory-first thinking**: Teaching memory awareness from day one is excellent - -5. **Accessibility**: CPU-only design democratizes access to ML education - -6. **Honest scope**: Section 5.1 (lines 962-972) honestly acknowledges GPU/distributed gaps - ---- - -## 10. Final Verdict - -**Technical Accuracy**: 6/10 -- Several misleading claims about PyTorch, performance, and production systems -- Good on complexity analysis, weak on implementation details - -**Code Quality**: 5/10 -- Monkey-patching anti-pattern is concerning -- Missing type hints throughout -- Adam implementation has bugs -- Good API design - -**Pedagogical Value**: 8/10 -- Excellent curriculum structure -- Creative teaching techniques -- Clear learning progression -- Good accessibility - -**Production Relevance**: 4/10 -- Significant gaps in GPU, distributed, and production skills -- Overstates "systems" preparation -- Good foundation but not sufficient alone - -**Overall**: 6/10 - Strong educational concept with significant technical issues that need addressing. - ---- - -## Appendix: Suggested Text Revisions - -### Original (Line 180-181): -> "understanding *why* Adam requires 2Γ— optimizer state memory" - -### Suggested: -> "understanding why Adam requires additional optimizer state memory (momentum and variance buffers, often doubling memory footprint)" - ---- - -### Original (Lines 723-725): -> "Early PyTorch (pre-0.4) separated data (`torch.Tensor`) from gradients (`torch.autograd.Variable`). PyTorch 0.4 (April 2018) consolidated functionality into `Tensor`, matching TinyTorch's pattern." - -### Suggested: -> "Early PyTorch (pre-0.4) separated data (`torch.Tensor`) from gradients (`torch.autograd.Variable`). PyTorch 0.4 (April 2018) consolidated functionality into `Tensor` through a compile-time refactoring of the C++ codebase. While the end resultβ€”a unified Tensor classβ€”resembles TinyTorch's design, PyTorch's implementation used static type system changes rather than runtime method enhancement." - ---- - -### Original (Line 356): -> "Students needing immediate GPU/distributed training skills are better served by PyTorch tutorials" - -### Suggested: -> "TinyTorch provides foundations for understanding framework internals; students should follow up with GPU programming (PyTorch tutorials, NVIDIA DLI) and distributed training courses (PyTorch Distributed, DeepSpeed) for production ML engineering roles." - ---- - -## Conclusion - -This is an ambitious and thoughtful educational project that would significantly benefit from technical review by production Python/ML engineers. The core curriculum idea is sound, but the paper needs revision to: - -1. Fix technical inaccuracies -2. Remove misleading comparisons -3. Add modern Python practices -4. Set realistic expectations about production readiness - -With these revisions, this could be an excellent contribution to ML education. As written, it risks teaching anti-patterns alongside valuable concepts. - -**Bottom line**: I'd enthusiastically recommend this course to someone who wants to understand framework internals, with the explicit caveat that they'll need significant additional training for production ML work. diff --git a/paper/paper.pdf b/paper/paper.pdf index 1e36c6f48e5b742bf5b3c543ad723c705f473fbf..685f97d85a8bd7d9f35568a22694c1b679eb0517 100644 GIT binary patch delta 151808 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

xnnXMMt7!!)PXblD?Ce-l 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 delta 148992 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 diff --git a/paper/proposed_figures.tex b/paper/proposed_figures.tex deleted file mode 100644 index 076e98c2..00000000 --- a/paper/proposed_figures.tex +++ /dev/null @@ -1,396 +0,0 @@ -% PROPOSED PEDAGOGICAL FIGURES FOR TINYTORCH PAPER -% Generated: 2025-11-17 -% Status: Draft - Ready for Review and Integration - -\documentclass{article} -\usepackage{tikz} -\usetikzlibrary{shapes,arrows,positioning,decorations.pathreplacing,calc} -\usepackage{geometry} -\geometry{margin=1in} -\usepackage{xcolor} - -% Define colors matching paper -\definecolor{accentcolor}{RGB}{255,87,34} -\definecolor{dormantgray}{RGB}{200,200,200} -\definecolor{activeorange}{RGB}{255,152,0} - -\begin{document} - -\section*{Proposed Pedagogical Figures for TinyTorch Paper} - -% ============================================================ -% FIGURE A: PROGRESSIVE DISCLOSURE TIMELINE -% ============================================================ -\subsection*{Figure A: Progressive Disclosure Timeline (HIGHEST PRIORITY)} -\textbf{Location:} Section 3.1 (Progressive Disclosure), after Listing 2\\ -\textbf{Pedagogical Value:} Visualizes the paper's most novel contribution - how Tensor capabilities evolve across modules while maintaining single mental model. - -\begin{figure}[h] -\centering -\begin{tikzpicture}[ - scale=0.9, - every node/.style={font=\small}, - module/.style={rectangle, draw, fill=blue!20, minimum width=1.2cm, minimum height=0.8cm}, - dormant/.style={rectangle, draw=dormantgray, fill=dormantgray!20, text=gray}, - active/.style={rectangle, draw=activeorange, fill=activeorange!30, text=black, font=\small\bfseries} -] - -% Timeline axis -\draw[thick, ->] (0,0) -- (14,0) node[right] {Modules}; - -% Module markers -\foreach \x/\label in {1/01, 3.5/03, 6/05, 8.5/09, 11/13, 13.5/20} { - \draw (\x, 0.1) -- (\x, -0.1); - \node[below] at (\x, -0.2) {\texttt{M\label}}; -} - -% Feature layers - stacked above timeline -% Layer 1: Basic Tensor (always present) -\node[active] at (1, 1.5) {\texttt{.data}}; -\node[active] at (2.5, 1.5) {\texttt{.shape}}; -\draw[activeorange, thick] (0.3, 1.5) -- (13.7, 1.5); -\node[left, font=\scriptsize] at (0.2, 1.5) {Core}; - -% Layer 2: Dormant until Module 05 -\node[dormant] at (1, 2.5) {\texttt{.requires\_grad}}; -\draw[dormantgray, thick, dashed] (0.3, 2.5) -- (5.5, 2.5); -\node[active] at (7, 2.5) {\texttt{.requires\_grad}}; -\draw[activeorange, thick] (6.3, 2.5) -- (13.7, 2.5); -\node[left, font=\scriptsize] at (0.2, 2.5) {Gradient}; - -\node[dormant] at (2.5, 3.2) {\texttt{.grad}}; -\draw[dormantgray, thick, dashed] (0.3, 3.2) -- (5.5, 3.2); -\node[active] at (7, 3.2) {\texttt{.grad}}; -\draw[activeorange, thick] (6.3, 3.2) -- (13.7, 3.2); - -\node[dormant] at (1.5, 3.9) {\texttt{.backward()}}; -\draw[dormantgray, thick, dashed] (0.3, 3.9) -- (5.5, 3.9); -\node[active] at (7, 3.9) {\texttt{.backward()}}; -\draw[activeorange, thick] (6.3, 3.9) -- (13.7, 3.9); - -% Activation marker at Module 05 -\node[draw, fill=yellow!30, circle, font=\scriptsize\bfseries] at (6, 4.8) {ACTIVATION}; -\draw[thick, ->] (6, 4.6) -- (6, 4.1); - -% Annotations -\node[align=center, font=\scriptsize] at (3, 5.5) { - \textbf{Modules 01-04:}\\ - Features visible but dormant\\ - \texttt{.backward()} is no-op -}; - -\node[align=center, font=\scriptsize] at (10, 5.5) { - \textbf{Modules 05-20:}\\ - Autograd fully active\\ - Gradients flow automatically -}; - -% Legend -\node[dormant, minimum width=1cm] at (2, -1.5) {Dormant}; -\node[active, minimum width=1cm] at (4.5, -1.5) {Active}; - -\end{tikzpicture} -\caption{Progressive disclosure of \texttt{Tensor} capabilities across modules. Gradient-related features (\texttt{.requires\_grad}, \texttt{.grad}, \texttt{.backward()}) exist from Module 01 but remain dormant (gray, dashed) until Module 05 activates them via monkey-patching (orange, solid). Students work with a single \texttt{Tensor} interface throughout, but capabilities expand progressively. This manages cognitive load while maintaining conceptual unity.} -\label{fig:progressive-timeline} -\end{figure} - -\clearpage - -% ============================================================ -% FIGURE B: MEMORY HIERARCHY BREAKDOWN -% ============================================================ -\subsection*{Figure B: Memory Hierarchy Breakdown (HIGH PRIORITY)} -\textbf{Location:} Section 4.1 (Memory Profiling), after Table 1\\ -\textbf{Pedagogical Value:} Clarifies that "Adam uses 3× parameter memory" refers to optimizer state, while activations typically dominate total memory. Visual makes this concrete. - -\begin{figure}[h] -\centering -\begin{tikzpicture}[ - scale=0.85, - every node/.style={font=\small} -] - -% Define bar widths and positions -\def\barwidth{1.5} -\def\unitheight{0.3} - -% SGD Memory Breakdown (Left) -\node[font=\normalsize\bfseries] at (2, 8) {SGD Optimizer}; - -% Parameters (1x) -\fill[blue!60] (0.5, 0) rectangle +({\barwidth}, {1*\unitheight}); -\node[right, font=\scriptsize] at (2.1, {0.5*\unitheight}) {Parameters (1×)}; - -% Gradients (1x) -\fill[green!60] (0.5, {1*\unitheight}) rectangle +({\barwidth}, {1*\unitheight}); -\node[right, font=\scriptsize] at (2.1, {1.5*\unitheight}) {Gradients (1×)}; - -% Activations (10-100x) -\fill[red!40] (0.5, {2*\unitheight}) rectangle +({\barwidth}, {30*\unitheight}); -\node[right, font=\scriptsize, align=left] at (2.1, {17*\unitheight}) { - Activations\\(10-100×)\\ - \textbf{Dominates!} -}; - -% Total annotation -\draw[thick, <->] (-0.3, 0) -- (-0.3, {32*\unitheight}); -\node[left, font=\scriptsize, align=right] at (-0.4, {16*\unitheight}) { - Total:\\32× params -}; - -% Adam Memory Breakdown (Right) -\node[font=\normalsize\bfseries] at (8, 8) {Adam Optimizer}; - -% Parameters (1x) -\fill[blue!60] (6.5, 0) rectangle +({\barwidth}, {1*\unitheight}); -\node[right, font=\scriptsize] at (8.1, {0.5*\unitheight}) {Parameters (1×)}; - -% Gradients (1x) -\fill[green!60] (6.5, {1*\unitheight}) rectangle +({\barwidth}, {1*\unitheight}); -\node[right, font=\scriptsize] at (8.1, {1.5*\unitheight}) {Gradients (1×)}; - -% Adam states: momentum (1x) -\fill[orange!60] (6.5, {2*\unitheight}) rectangle +({\barwidth}, {1*\unitheight}); -\node[right, font=\scriptsize] at (8.1, {2.5*\unitheight}) {Momentum (1×)}; - -% Adam states: variance (1x) -\fill[orange!80] (6.5, {3*\unitheight}) rectangle +({\barwidth}, {1*\unitheight}); -\node[right, font=\scriptsize] at (8.1, {3.5*\unitheight}) {Variance (1×)}; - -% Brace for optimizer states -\draw[decorate, decoration={brace, amplitude=5pt}] - (6.3, {2*\unitheight}) -- (6.3, {4*\unitheight}) - node[midway, left, xshift=-3pt, font=\scriptsize] {+2× states}; - -% Activations (10-100x) - same as SGD -\fill[red!40] (6.5, {4*\unitheight}) rectangle +({\barwidth}, {30*\unitheight}); -\node[right, font=\scriptsize, align=left] at (8.1, {19*\unitheight}) { - Activations\\(10-100×)\\ - \textbf{Still dominates!} -}; - -% Total annotation -\draw[thick, <->] (5.7, 0) -- (5.7, {34*\unitheight}); -\node[left, font=\scriptsize, align=right] at (5.6, {17*\unitheight}) { - Total:\\34× params -}; - -% Key insight box -\node[draw, thick, fill=yellow!20, align=center, font=\scriptsize] at (6.5, -1.5) { - \textbf{Key Insight:} Adam adds 2× parameter memory\\ - (3× total vs 1× for SGD), but activations\\ - still dominate overall memory usage -}; - -% Grid lines for easier reading -\foreach \y in {0,5,10,15,20,25,30} { - \draw[dotted, gray] (0, {\y*\unitheight}) -- (10.5, {\y*\unitheight}); -} - -\end{tikzpicture} -\caption{Memory hierarchy breakdown comparing SGD and Adam optimizers. While Adam requires 3× parameter memory (parameters + gradients + momentum + variance) compared to SGD's 2× (parameters + gradients), activation memory typically dominates total memory consumption by 10-100×. This visualization clarifies that optimizer choice affects parameter memory overhead, but activation memory remains the primary concern for most models. Students learn to calculate each component from Module 01 onwards.} -\label{fig:memory-breakdown} -\end{figure} - -\clearpage - -% ============================================================ -% FIGURE C: BUILD-USE-REFLECT CYCLE -% ============================================================ -\subsection*{Figure C: Build→Use→Reflect Cycle (HIGH PRIORITY)} -\textbf{Location:} Section 2.3 (Module Structure), replacing or supplementing paragraph text\\ -\textbf{Pedagogical Value:} Core pedagogical pattern structuring all 20 modules. Visual makes the iterative cycle explicit. - -\begin{figure}[h] -\centering -\begin{tikzpicture}[ - scale=1.0, - every node/.style={font=\small}, - phase/.style={ - circle, - draw, - thick, - minimum size=2.8cm, - align=center, - font=\normalsize\bfseries - }, - example/.style={ - rectangle, - draw, - fill=blue!10, - rounded corners, - align=left, - font=\scriptsize, - text width=4cm - } -] - -% Three main phases in circular arrangement -\node[phase, fill=blue!30] (build) at (0, 4) { - BUILD\\[0.3em] - \normalfont\scriptsize Implementation -}; - -\node[phase, fill=green!30] (use) at (4, 0) { - USE\\[0.3em] - \normalfont\scriptsize Integration -}; - -\node[phase, fill=orange!30] (reflect) at (-4, 0) { - REFLECT\\[0.3em] - \normalfont\scriptsize Analysis -}; - -% Arrows connecting phases -\draw[->, ultra thick, blue!70] (build) to[bend left=20] node[midway, above right, font=\scriptsize] {Test} (use); -\draw[->, ultra thick, green!70] (use) to[bend left=20] node[midway, below, font=\scriptsize] {Analyze} (reflect); -\draw[->, ultra thick, orange!70] (reflect) to[bend left=20] node[midway, above left, font=\scriptsize] {Iterate} (build); - -% Example boxes for each phase -\node[example, below=0.8cm of build] (build-ex) { - \textbf{Module 05 Example:}\\ - ‒ Implement \texttt{backward()}\\ - ‒ Build computation graph\\ - ‒ Create gradient accumulation\\ - ‒ Scaffold: Connection maps -}; - -\node[example, right=0.8cm of use] (use-ex) { - \textbf{Module 05 Example:}\\ - ‒ Unit test: Does \texttt{.backward()} work?\\ - ‒ Integration: Gradients through Module 03 layers?\\ - ‒ NBGrader: Autograde results\\ - ‒ Milestone: Train network end-to-end -}; - -\node[example, left=0.8cm of reflect] (reflect-ex) { - \textbf{Module 05 Example:}\\ - ‒ Memory: Gradient storage overhead?\\ - ‒ Complexity: $O(?)$ for backprop?\\ - ‒ Design: Why computational graphs?\\ - ‒ Transfer: How does PyTorch differ? -}; - -% Connect examples to phases -\draw[dotted] (build) -- (build-ex); -\draw[dotted] (use) -- (use-ex); -\draw[dotted] (reflect) -- (reflect-ex); - -% Center annotation -\node[align=center, font=\scriptsize\itshape] at (0, 0) { - Repeats for\\ - all 20 modules -}; - -% Title annotation -\node[above=0.3cm of build, font=\normalsize\bfseries] { - Pedagogical Cycle: Every Module -}; - -\end{tikzpicture} -\caption{Build→Use→Reflect pedagogical cycle structuring all TinyTorch modules. \textbf{Build:} Students implement components in Jupyter notebooks with scaffolded guidance (connection maps, TODOs). \textbf{Use:} Integration testing validates cross-module functionality via NBGrader unit tests and milestone checkpoints. \textbf{Reflect:} Systems analysis questions probe memory footprints, computational complexity, and design trade-offs. This cycle addresses cognitive apprenticeship by making expert thinking patterns explicit and assessment visible through automated feedback. Examples shown for Module 05 (Autograd).} -\label{fig:build-use-reflect} -\end{figure} - -\clearpage - -% ============================================================ -% BONUS FIGURE: MILESTONE PROGRESSION -% ============================================================ -\subsection*{Bonus Figure D: Historical Milestone Progression (MEDIUM PRIORITY)} -\textbf{Location:} Section 4.3 (Historical Validation), after milestone description\\ -\textbf{Pedagogical Value:} Shows 70-year capability accumulation and which modules unlock each milestone. - -\begin{figure}[h] -\centering -\begin{tikzpicture}[ - scale=0.9, - every node/.style={font=\small}, - milestone/.style={ - rectangle, - draw, - thick, - rounded corners, - minimum width=2cm, - minimum height=1.2cm, - align=center, - font=\scriptsize - } -] - -% Timeline axis -\draw[thick, ->] (0, 0) -- (14, 0) node[right] {Time}; - -% Year markers -\foreach \x/\year in {0/1957, 2.4/1969, 5.8/1986, 8.2/1998, 11.6/2017, 13/2024} { - \draw (\x, 0.1) -- (\x, -0.1); - \node[below, font=\tiny] at (\x, -0.3) {\year}; -} - -% Milestones -\node[milestone, fill=blue!20] (m1) at (0, 2) { - \textbf{M1: Perceptron}\\ - Modules 01-04\\ - Linearly separable\\ - classification -}; - -\node[milestone, fill=blue!30] (m2) at (2.4, 3.5) { - \textbf{M2: XOR}\\ - Modules 01-07\\ - Multi-layer\\ - learning -}; - -\node[milestone, fill=green!20] (m3) at (5.8, 2) { - \textbf{M3: MNIST MLP}\\ - Modules 01-08\\ - 95\%+ digit\\ - recognition -}; - -\node[milestone, fill=green!30] (m4) at (8.2, 3.5) { - \textbf{M4: CIFAR-10 CNN}\\ - Modules 01-09\\ - 75\%+ image\\ - classification -}; - -\node[milestone, fill=purple!20] (m5) at (11.6, 2) { - \textbf{M5: Transformer}\\ - Modules 01-13\\ - Text generation\\ - with attention -}; - -\node[milestone, fill=red!30] (m6) at (13, 3.5) { - \textbf{M6: Production}\\ - All 20 modules\\ - Optimized system\\ - (Olympics) -}; - -% Connect milestones to timeline -\foreach \m in {m1, m2, m3, m4, m5, m6} { - \draw[dotted] (\m) -- (\m |- 0,0); -} - -% Capability accumulation arrows -\draw[->, thick, blue!50, dashed] (m1) -- (m2); -\draw[->, thick, blue!50, dashed] (m2) -- (m3); -\draw[->, thick, green!50, dashed] (m3) -- (m4); -\draw[->, thick, purple!50, dashed] (m4) -- (m5); -\draw[->, thick, red!50, dashed] (m5) -- (m6); - -% Accuracy progression annotation -\node[align=center, font=\scriptsize, fill=white] at (7, -2) { - \textbf{Capability Progression:} Each milestone validates cumulative module integration.\\ - Students recreate 70 years of ML history using \emph{only} their own code. -}; - -\end{tikzpicture} -\caption{Historical milestone progression spanning 1957-2024. Each milestone requires progressively more modules, validating cumulative implementation correctness through historically significant achievements. Students experience ML's evolution from single-layer perceptrons (M1) through modern transformer architectures (M5) to production-optimized systems (M6). Arrows show capability accumulation - later milestones build on earlier foundations.} -\label{fig:milestone-progression} -\end{figure} - -\end{document}