This project started a few years ago as a way to provide a uniform means for students to have an electronic notebook for their lab experience in a physics classroom. It targets entry level students in an environment where explorations of quantitative reasoning would benefit from an integrated document that allows them to keep notes (including the ability to easily mix in mathematical reasoning, read: formulae) as well as manipulate calculations and data. There are variety of commercial products with this same goal which are used and well regarded for their capabilities in professional environments. The expense and overhead for maintaining these tools, however, can be prohibitive for many schools. Some years ago iPython developed into what is, today, a widely used system that works well for students and teachers as well as researchers. Many university science and engineering programs use this tool as the backbone for their classroom and laboratory settings. Jupyter's flexibility also allows the notebook system to work as an instructional tool for high school and community colleges as well. It provides a way to deliver basic starting notes and focused problems the students can do on the fly. They can practice the concepts they learn and provide the opportunity to explore the range of considerations within any physical model.
This collection of materials is aimed at the secondary school environment as well as introductory classes in two year colleges in mathematics and physical sciences. Jupyter is a powerful tool built on a flexible framework that satisfies the needs of professionals as well as first timers. Examples provided in the materials here may, indeed, not be the 'best' way to do something (from a computational point of view) but is always presented for students who may be new to this kind of environment and one they can easily master. That said, an eye is always kept toward teaching techniques so students don't need to 'unlearn' something if they advance. (Coding examples try to hew toward PEP8 standards, for example. Authoring techniques applied to Labs are designed to scaffold toward conventional publication standards, etc.) When starting out using any tool, physical or virtual, there are many possibilities as to how it might be used but we all have to start somewhere with the simple, most obvious application first. Hammers, for all the ways they can be used, are principally designed to drive nails.
In short, there are many rabbit holes and efficiencies that can certainly be applied to any of these instructional materials but the goal is to keep as close to the default arrangement as possible. To this end, most of the material was developed with Google's CoLab, an openly available, cloud based Jupyter environment that allows easy document sharing and meshes with Google's Classroom management system. That done, many (if not most) of the notebooks here also work with little or no modification (external file references within a document would always need to be tweaked whenever they are moved about) in a standalone JupyterLab environment loaded on a personal machine. Visual Studio Code is another, easily installed, open source tool that can also provide a standalone environment for opening and editing notebooks. Many of the documents have been tested in this local application as well.
For those already knowledgeable about Jupyter know that the chosen 'kernel' is python (>=3.9 as of this writing) as it is usually the default for many installations. Jupyter is not limited to using python, however. Indeed the name is a portmanteau of 'Julia, Python, and R' indicating that the structure grew up trying to be language neutral. Many devoted contributors have since allowed the use of many more programming languages for the environment beyond these three.
Jupyter (or more formally, jupyter notebook or jupyterlab), looked at one way, is a document structure like a word processing document that also has a built-in 'calculator'. This allows a student or teacher to take notes, analyze data, model physical phenomenon, and present conclusions all within one framework. As such, when you open a notebook you are presented with a choice of building a series of 'cells' which are either 'Text' or 'Code'.
Text cells are where you would type notes or descriptions of your methods in modelling or analysis. You might describe a derivation or proof of principal. The means by which the text is formatted uses an 'in-line' style tagging called 'markdown' which is easily mastered as it is intentionally simple and supported by a clickable menu. In addition to text editing, there is a built in mechanism of coding mathematical expressions which is nearly universal in the STEM world called LaTeX. It, too, is fairly easy to learn (at least for basic needs) and allows the user to communicate in both prose and mathematical language. Finally, there are ways to embed illustrations and link to external material which is equally easy to learn.
Code cells are, as the name implies, a window into a programming environment (by default, python, but can be something else if needed) which allows for interactive calculations, mathematical model building and graphing for exploring the practical elements of the mathematical frameworks used to investigate physical phenomenon. The real power of the Jupyter (iPython) environment is that there is no need to build whole programs to do simple tasks. Variables declared in one code cell are available in another. In this way, data analysis, development and evaluation can happen incrementally with space in between to annotate (usually with a text cell) why something is being done.