- Move development artifacts to development/archived/ directory
- Remove NBGrader artifacts (assignments/, testing/, gradebook.db, logs)
- Update root README.md to match actual repository structure
- Provide clear navigation paths for instructors and students
- Remove outdated documentation references
- Clean root directory while preserving essential files
- Maintain all functionality while improving organization
Repository is now optimally structured for classroom use with clear entry points:
- Instructors: docs/INSTRUCTOR_GUIDE.md
- Students: docs/STUDENT_GUIDE.md
- Developers: docs/development/
✅ All functionality verified working after restructuring
7.9 KiB
TinyTorch + nbgrader Integration Proposal
Executive Summary
This proposal outlines how to integrate nbgrader with TinyTorch to create a comprehensive course management system that supports both self-paced learning and formal assessment from the same source materials.
The Problem
Current TinyTorch has excellent educational content but lacks:
- Automated grading for large courses
- Formal assessment workflow
- Immediate feedback for student implementations
- Grade tracking and LMS integration
- Scalable evaluation for hundreds of students
The Solution: Dual-Purpose Content
Current System (Enhanced)
class Tensor:
def __init__(self, data):
"""Create tensor from data"""
#| exercise_start # TinyTorch marker
#| hint: Use np.array() to convert data
#| difficulty: easy
### BEGIN SOLUTION # nbgrader marker
self._data = np.array(data)
### END SOLUTION
#| exercise_end
### BEGIN HIDDEN TESTS # nbgrader auto-grading
def test_init():
t = Tensor([1, 2, 3])
assert t._data.tolist() == [1, 2, 3]
### END HIDDEN TESTS
Generates Two Student Versions
1. Self-Learning Version (Current TinyTorch Style)
class Tensor:
def __init__(self, data):
"""Create tensor from data"""
# 🟡 TODO: Implement tensor creation (easy)
# HINT: Use np.array() to convert data
# Your implementation here
pass
2. Assignment Version (nbgrader Compatible)
class Tensor:
def __init__(self, data):
"""Create tensor from data"""
### BEGIN SOLUTION
# YOUR CODE HERE
raise NotImplementedError()
### END SOLUTION
### BEGIN HIDDEN TESTS
def test_init():
t = Tensor([1, 2, 3])
assert t._data.tolist() == [1, 2, 3]
### END HIDDEN TESTS
Implementation Strategy
Phase 1: Enhanced Marking System ✅
- Add nbgrader markers to existing framework
- Enhance student notebook generator
- Create dual generation system
- Demonstrate with tensor module example
Phase 2: nbgrader Integration
- Set up nbgrader environment
- Configure auto-grading workflows
- Extend
titoCLI for assignment management - Create grade tracking system
Phase 3: Course Deployment
- Deploy to production course
- Train instructors on new workflow
- Collect student feedback
- Iterate and improve
Benefits
For Instructors
- Single Source, Multiple Outputs: Write once, generate both learning and assessment materials
- Automated Grading: Reduce grading workload by 80%+
- Consistent Evaluation: Standardized testing across all students
- Immediate Feedback: Students get instant results
- Analytics: Track student progress and identify common issues
For Students
- Flexible Learning: Choose between self-paced exploration or structured assignments
- Immediate Feedback: Know if implementation is correct instantly
- Progressive Building: Verified implementations become foundation for next modules
- Real-World Practice: Same testing standards as production ML frameworks
For Course Management
- Scalability: Handle 100+ students with automated systems
- Quality Assurance: Consistent educational experience
- Data-Driven: Analytics on student learning patterns
- Reusability: Assignments work across multiple semesters
Technical Implementation
Enhanced CLI Commands
# Generate regular student notebooks
tito notebooks --student --module tensor
# Generate nbgrader assignments
tito notebooks --assignments --module tensor
# Batch generate all
tito notebooks --student --all
tito notebooks --assignments --all
# nbgrader integration
tito assignment --create tensor # Create assignment
tito assignment --release tensor # Release to students
tito assignment --collect tensor # Collect submissions
tito assignment --grade tensor # Auto-grade
tito assignment --feedback tensor # Generate feedback
Workflow Integration
Instructor Development:
modules/tensor/tensor_dev.py (complete implementation)
↓
tito sync --module tensor (export to package)
↓
tito notebooks --student --module tensor (self-learning)
↓
tito notebooks --assignments --module tensor (formal assessment)
↓
tito assignment --create tensor (nbgrader setup)
↓
[Student work and submission]
↓
tito assignment --grade tensor (auto-grading)
↓
Grade feedback and analytics
Concrete Example: Tensor Module
Student Learning Experience
Self-Learning Track
- Exploration: Rich educational content with step-by-step guidance
- Implementation: TODO sections with extensive hints
- Testing: Immediate feedback via notebook testing
- Iteration: Self-paced learning with no pressure
Assignment Track
- Structured Implementation: Clear requirements and hidden tests
- Submission: Formal submission through nbgrader interface
- Auto-grading: Instant feedback with partial credit
- Analytics: Instructor sees class-wide performance patterns
Assessment Breakdown
- Tensor Creation (Easy): 10 points
- Properties (Easy): 10 points
- Basic Operations (Medium): 15 points
- Matrix Multiplication (Hard): 20 points
- Error Handling (Hard): 10 points
- Total: 65 points per module
Migration Path
Existing Modules
- Minimal Changes: Add nbgrader markers alongside existing TinyTorch markers
- Backward Compatible: Existing workflow continues to work
- Gradual Adoption: Instructors can choose which modules to use for formal assessment
New Modules
- Dual-Purpose by Default: All new modules support both tracks
- Comprehensive Testing: Hidden tests for every major component
- Progressive Complexity: Easy → Medium → Hard exercises within each module
Success Metrics
Educational Outcomes
- Completion Rate: % of students completing all modules
- Comprehension: Performance on assessments vs. self-learning
- Retention: Long-term retention of concepts
- Engagement: Time spent in learning vs. assessment modes
Operational Efficiency
- Grading Time: Reduction in instructor grading hours
- Feedback Speed: Time from submission to feedback
- Scalability: Students supported per instructor
- Quality Consistency: Variance in grading across instructors
Conclusion
The TinyTorch + nbgrader integration represents a paradigm shift from traditional course management to an intelligent, scalable educational system that:
- Preserves TinyTorch's pedagogical philosophy while adding assessment capabilities
- Scales to large courses without sacrificing educational quality
- Provides flexibility for different learning styles and course structures
- Maintains single-source truth for all educational materials
- Enables data-driven improvement through comprehensive analytics
This system transforms TinyTorch from a learning framework into a complete course management solution that can handle everything from individual self-study to large-scale university courses.
Next Steps
- Review and approve this proposal
- Implement Phase 2 (nbgrader integration)
- Pilot with one module (tensor recommended)
- Gather feedback and iterate
- Scale to full course deployment
The enhanced system is ready for immediate implementation and testing. The dual generation capability is already working, and the nbgrader integration requires only standard nbgrader setup and configuration.
This proposal demonstrates how thoughtful integration of existing tools can create something greater than the sum of its parts - a truly scalable, intelligent educational system that adapts to both students and instructors' needs.