Speaker 1: Jeremy Howard Speaker 2: (Unidentified) Speaker 3: (Unidentified) Speaker 4: (Unidentified)
0:00 | Introduction to Jupyter Notebooks 0:15 | Why Jupyter Notebooks are often criticized 0:42 | Jeremy’s experience with Jupyter Notebooks 1:17 | Fast.ai library and its documentation 2:23 | NbDev for notebook development 3:08 | Examples of code written in notebooks 4:38 | Hemal Hussain’s comment on NbDev 5:06 | Refactoring code for simplicity 5:27 | Deep Learning for Coders book 6:14 | FastDoc for converting notebooks to books 6:41 | Fast.ai course taught in Jupyter Notebooks 7:40 | Literate programming and exploratory programming 8:43 | NBDev source code and its evolution 9:43 | Live coding environment 10:11 | Smalltalk as a live coding environment 10:46 | Sam Aaron’s live coding performance 11:17 | Brett Victor’s live coding environment 12:11 | Aspiring to create engaging live coding experiences 12:30 | Chris Latner’s Playground system 13:14 | Joel Groves’ coding approach 13:37 | Joel’s coding style and its limitations 15:37 | APL as a powerful programming language 16:10 | Dead coding environments and their limitations 16:42 | Errors in Joel’s book 17:54 | Joel’s presentation “I Don’t Like Notebooks” 18:42 | Addressing Joel’s criticisms 19:17 | Joel’s presentation slides 19:29 | Joel’s self-deprecating statement 20:12 | Joel’s reference to Jeremy’s opinion 20:33 | Joel’s criticisms of Jupyter Notebooks 21:24 | Key reasons for Joel’s criticisms 21:39 | Hidden state in notebooks 21:48 | Running cells in order 22:04 | Restart and run all functionality 22:44 | Restart and clear output functionality 23:05 | NbDev’s ability to run all cells in order 23:20 | Copying and pasting code and outputs 23:40 | Sharing notebooks for bug reports 24:13 | Fast.ai documentation and courses as notebooks 25:04 | ReviewNB for reviewing pull requests 25:53 | Sharing notebooks using GISTIT 26:24 | Working with non-textual data 26:57 | Reproducibility of notebooks 27:40 | Creating reproducible environments 28:06 | Seeing the programmer’s steps 28:20 | Creating bad notebooks 28:32 | Good software engineering in notebooks 29:01 | Following software engineering rules 29:30 | Domain expertise and environments 30:19 | Modularity in notebooks 30:40 | Fast.ai’s modularity 31:14 | Testability in notebooks 31:26 | Tests in dead coding environments 31:54 | Tests in notebooks 32:34 | Running tests across notebooks 33:00 | Learning in notebooks 33:14 | Shift-enter execution 33:40 | Removing outputs for learning 33:58 | Experimenting in a live coding environment 34:20 | Jupyter vs. text editors 34:42 | IDE completion in Jupyter 35:08 | IDE completion in VS Code 35:29 | Jupyter’s dynamic introspection 35:49 | VS Code’s limitations 36:15 | Joel’s suggestions for winning him over 36:25 | IDE style autocomplete in Jupyter 36:50 | Real-time type checking and linting 37:07 | Fastcore library’s type checking 37:28 | MyPy’s limitations 38:01 | Python’s dynamic nature 38:13 | Manual typing in MyPy 38:46 | Dependency management in notebooks 38:54 | NBDev’s dependency management 39:31 | Refactoring code out of notebooks 39:45 | NBDev’s ability to create Python projects 40:15 | Convincing Joel to use notebooks 40:32 | Focusing on NBDev 40:49 | Export comments in NBDev 41:14 | Splitting a class into separate cells 41:39 | Patch decorator for adding methods 42:05 | Reading documentation step by step 42:15 | Settings.ini file 42:29 | Centralized configuration 42:49 | Synchronization between notebooks and editors 43:14 | Editing in editors and synchronizing back 43:37 | Notebook to script functionality 43:56 | Nbdev build command 44:03 | Staying in the notebook environment 44:24 | Done to all best practice 44:36 | Namespace pollution 44:55 | Automatic done to all creation 45:45 | Manual done to all creation 46:04 | Hyperlinking in documentation 46:21 | NbDev’s ability to hyperlink symbols 46:44 | Avoiding hyperlinking of parameter names 46:53 | Documentation features 47:14 | Nbdev build docs command 47:20 | Parallel documentation building 47:33 | GitHub action for building docs 47:41 | Index.ipynb and readme.md 48:00 | Synchronized information across platforms 48:17 | Creating user-friendly experiences 48:32 | Using nbdev for small projects 48:50 | FastWebhook example 49:03 | Creating a webhook for fast.ai 49:28 | Version control challenges with notebooks 49:38 | Notebook level diffs 49:48 | Ignoring cell output differences 50:04 | Opening diffs in Jupyter 50:08 | Parallel test execution 50:27 | Math equation support 50:41 | Catech library for math equations 50:47 | Fast pages blogging system 51:03 | Writing technical content in notebooks 51:13 | Avoiding copying and pasting 51:28 | Simplicity of using notebooks 51:32 | Fastdoc for creating books 51:40 | Encouraging users to try Jupyter Notebooks 51:46 | Nbdev.fast.ai website 51:53 | Creating an nbdev repo 52:01 | Conclusion and call to action 52:08 | End of video