Why I Stopped Using nbdev
Summary
Hamel Husain, a key contributor to nbdev, explains why he has stopped using the literate programming environment despite his prior advocacy and extensive use. He notes that nbdev's idiosyncratic workflow, which integrates code, documentation, and tests within Jupyter notebooks before transpiling them, conflicts with the expectations of modern AI coding tools. These AI tools, trained on conventional source code, struggle to differentiate between notebook edits and final source code, creating friction. Husain also observes that the promised benefits of literate programming, such as improved documentation, are often not realized in practice, and AI can now provide on-the-fly code understanding and documentation maintenance. He emphasizes that collaboration with AI is crucial, and nbdev's unique system isolates developers. His current toolkit includes Amp, Cursor, and Claude Code, and he now uses different languages like Next.js for web development, moving beyond a "Python for everything" mindset, recognizing AI's superior performance on domain-specific, well-typed languages like TypeScript.
Key takeaway
For NLP Engineers evaluating their development environment, you should assess how well your current tools integrate with AI coding assistants. If your workflow is highly idiosyncratic, like nbdev's notebook-centric approach, you might find yourself fighting the AI rather than collaborating with it. Consider adopting more conventional, domain-specific tools and languages, such as TypeScript for web development, where AI models have more training data and can provide more reliable assistance, ultimately increasing your productivity and team collaboration.
Key insights
AI coding tools are shifting development paradigms, making idiosyncratic workflows like nbdev less efficient and collaborative.
Principles
- Tool choice should prioritize AI compatibility for maximum leverage.
- Good documentation stems from effort, not just tooling.
- Idiosyncratic tools can hinder team and AI collaboration.
Method
The author transitioned from a unified notebook-based literate programming environment (nbdev) to a diverse toolchain (Amp, Cursor, Claude Code) and polyglot approach, favoring domain-specific languages like TypeScript for web development, to optimize for AI-assisted coding.
In practice
- Evaluate development tools for AI compatibility.
- Consider typed languages for AI-generated code reliability.
- Adopt a polyglot approach for diverse tasks.
Topics
- nbdev
- AI Coding Tools
- Literate Programming
- Jupyter Notebooks
- Developer Tooling
Best for: NLP Engineer, Software Engineer, AI Engineer, Machine Learning Engineer
Related on AIssential
Editorial summary, takeaway, and curation by AIssential. Original article published by Hamel Husain's Blog.