Questions
Objectives
In our experience the development of training material, tutorials and lessons for programming can be fairly ad-hoc. The process usually goes something like this:
Of course this assumes the perfect world where eveything works first time. The ususal story is by the time we start working on the second example, we notice a mistake in the first example, or something else that is needed, or a better way of writing it. At this stage we need to go back stage 2 and typically several iterations are required. This process is time consuming, reduces the time we invest in the content and means, even minor changes can take significant effort and creating new material. Likely, if you are in this position, you just find someone elses material and hope that it fits your needs.
One example of a source of pre-packaged training material is Software Carpentry. We think this is a great example of how lessons should be organised, but the format doesn't lend itself to being readily edited.
One approach to mixing code with the text of training material is a Jupyter notebook. This platform allows a user to write narrative and code simultaneously. The narrative is in markdown, a lightweight markup language with basic formatting. An ever increasing number of programming languagues are supported, with code executed and output viewed all in the same document. It is for this reason that we use notebooks as the basis for NBfancy.
While markdown is lightweight, as a superset of HTML
notebooks can be made prettier by including additional fotrmatting, however this requires using yet another language while introducing additional debugging layer. We solve these issues by using NBfancy, a set of tools written to augment notebooks, to allow you to develop training material more effectively. We do this by
NBfancy is also customisable and includes features that allow you to change the system to make it a tool suitable for your needs.