Jupyter (formerly IPython) notebooks are another tool that I would highly recommend for anyone writing code that needs to be presented/explained well. They're great in fields such as data science and scientific computing, but can also be used to explain how your code works, whether for a presentation or for a tutorial.
Jupyter in the real world
Jupyter notebooks see lots of use outside of hobby programming due to how they make it much easier to fully explain code in a way that is easy for anyone who is reading to understand. Many of the benefits that Jupyter has brought to research were explained in this Nature article, which states outright that "the free [Jupyter] notebook makes data analysis easier to record, understand, and reproduce." Many prominent examples of them being used in practical applications can be seen here:
- Project LIGO, the government-funded large-scale physics experiment to detect gravitational waves, uses Jupyter so that their results are easily reproducible and understandable.
- Here is an example of a series of tutorials on data science with Python that, because of Jupyter, are completely reproducible and easy to follow along with.
- For more examples, see the list of interesting Jupyter notebooks, hosted on Jupyter's GitHub repository's wiki.
Hopefully by clicking through some of those notebooks you were able to get a sense of how these notebooks are structured/how they can be usedful. The fact that they allow you to effectively annotate/present code without being there to explain it in person is a huge development over sending someone a file of code and telling them to figure it out themselves (even if it's documented, this can often be a challenge!)
Learning to use Jupter
Fortunately, there isn't a lot to learn about Jupyter itself, as it is effectively just a text editor that also lets you put in blocks of code and see their output. Most of the knowledge you need will be for writing the code that actually goes into your notebooks. Because of this, Jupyter tutorials are fairly straightforward. I personally found this one to be very useful, but if you want to read more/learn about some of the history behind Jupyter, this longer article is a good read as well.