# Notebook interface

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/Notebook_interface
> Markdown URL: https://mediated.wiki/source/Notebook_interface.md
> Source: https://en.wikipedia.org/wiki/Notebook_interface
> Source revision: 1314989581
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

{{Short description|Programming tool blending code and documents}}
[[File:Paws notebook showing how to load wikidata item dictionary.png|thumb|upright|[Jupyter Notebook](/source/Jupyter_Notebook), an example of a notebook interface]]

A '''notebook interface''' or '''computational notebook''' is a virtual [notebook](/source/notebook) environment used for [literate programming](/source/literate_programming), a method of writing [computer program](/source/computer_program)s.<ref>{{cite web |url=https://biowize.wordpress.com/2015/03/13/literate-programming-rstudio-and-ipython-notebook/ |first=Daniel |last=Standage |title=Literate programming, RStudio, and IPython Notebook |work=BioWize |publisher=Wordpress |date=2015-03-13 |access-date=2016-12-01}}</ref> Some notebooks are [WYSIWYG](/source/WYSIWYG) environments including executable calculations embedded in formatted documents; others separate calculations and text into separate sections. Notebooks share some goals and features with [spreadsheet](/source/spreadsheet)s and [word processor](/source/word_processor)s but go beyond their limited data models.

Modular notebooks may connect to a variety of computational back ends, called "kernels". Notebook interfaces are widely used for [statistics](/source/computational_statistics), [data science](/source/data_science), [machine learning](/source/machine_learning), and [computer algebra](/source/computer_algebra).<ref>{{cite web |last1=Jupyter |first1=Project |title=JupyterLab is Ready for Users |date=20 February 2018 |url=https://blog.jupyter.org/jupyterlab-is-ready-for-users-5a6f039b8906 |access-date=30 May 2018}}</ref>

At the notebook core is the idea of literate programming tools which "let you arrange the parts of a program in any order and extract documentation and code from the same source file."<ref>{{Cite journal|last=Ramsey|first=N.|date=September 1994|title=Literate programming simplified|journal=IEEE Software|volume=11|issue=5|pages=97–105|doi=10.1109/52.311070|s2cid=18593796 |issn=0740-7459}}</ref> The notebook takes this approach to a new level, extending it with some graphic functionality and a focus on [interactivity](/source/Interactive_computing).  According to [Stephen Wolfram](/source/Stephen_Wolfram): "the idea of a notebook is to have an interactive document that freely mixes code, results, graphics, text and everything else,"<ref name=":2" /> and according to the Jupyter Project Documentation: "the notebook extends the console-based approach to [interactive computing](/source/interactive_computing) in a qualitatively new direction, providing a web-based application suitable for capturing the whole computation process: developing, documenting, and executing code, as well as communicating the results."<ref>{{Cite web|title=The Jupyter Notebook — Jupyter Notebook 6.2.0 documentation|url=https://jupyter-notebook.readthedocs.io/en/stable/notebook.html#introduction|access-date=2021-05-03|website=jupyter-notebook.readthedocs.io}}</ref>

== History ==
[VisiCalc](/source/VisiCalc), the first [spreadsheet](/source/spreadsheet) for [personal computer](/source/personal_computer)s, was published in 1979. Its idea of visual calculations is still widely used today but limited to documents that fit into a [table](/source/table_(information)).

Research on WYSIWYG mathematical systems supporting mixed text and calculations with a document metaphor begin to be published in 1987:<ref>Dennis S. Arnon, ed., "Workshop on Environments for Computational Mathematics (July 1987)", ''Computer Graphics'' '''22''':1 (February 1988)</ref> Ron Avitzur's ''Milo'',<ref>Richard J. Fateman, "Computer Systems for the Representation and Manipulation of Mathematical Knowledge", Final report, August 1987 (DTIC [https://apps.dtic.mil/sti/pdfs/ADA193547.pdf AD-A193 547])</ref> William Schelter's ''INFOR'', [Xerox PARC](/source/Xerox_PARC)'s ''Tioga''<ref>Butler W. Lampson, "Personal Distributed Computing: The Alto and Ethernet Software", ''A history of personal workstations'', 1988, {{isbn|0201112590}}, p. 318.</ref> and ''CaminoReal''.<ref>Dennis Arnon, Richard Beach, Kevin McIsaac, "CaminoReal: An Interactive Mathematical Notebook", in J.C. van Vliet, ed., ''Document Manipulation and Typography'', Proceedings of the International Conference on Electronic Publishing, Document Manipulation and Typography, Nice, April 20–22, 1988, {{isbn|0521362946}}, p. 2.</ref>

The earliest commercial system using the document metaphor was ''[MathCAD](/source/MathCAD)'', which also came out in 1987.<ref>N. Kajler, N. Soiffer, "A Survey of User Interfaces for Computer Algebra Systems", ''Journal of Symbolic Computation'' '''25''':2:127-159 (February 1998), {{doi|10.1006/jsco.1997.0170}}</ref> ''[Wolfram Mathematica](/source/Wolfram_Mathematica)'' 1.0 followed in 1988.<ref>{{Citation|last=The ReDiscovered Future|title=Macintosh + Mathematica = Infinity - April 1989|date=2016-04-04|url=https://www.youtube.com/watch?v=3A5moyhfaQo|access-date=2016-11-23}}</ref><ref>{{Cite journal|last=Hayes|first=Brian|year=1990|title=Thoughts on Mathematica|url=http://bit-player.org/wp-content/extras/bph-publications/Pixel-1990-01-Hayes-Mathematica.pdf|journal=PIXEL|volume=January/February 1990|pages=28–35}}</ref><ref>{{Cite web|url=http://blog.wolfram.com/2016/11/16/launching-wolfram-player-for-ios/|title=Launching Wolfram Player for iOS—Wolfram|date=16 November 2016 |access-date=2016-11-23}}</ref> Later came ''[Maple](/source/Maple_(software))'' 5.2 (1992)<ref>{{Cite web |title=Maple V Release 2 - Maple Help |url=https://www.maplesoft.com/support/help/Maple/view.aspx?path=updates/v52 |access-date=2023-01-18 |website=www.maplesoft.com}}</ref> and ''[Macsyma 2.0](/source/Macsyma)'' (1995).<ref>"Macsyma 2.0", ''Design News'', [https://amsso.designnews.com/automation-motion-control/macsyma-20/25416657139708 April 24, 1995]</ref>

As the notebook interface increased in popularity over the next two decades, notebooks for various computational back ends ("kernels") have been introduced, including [MATLAB](/source/MATLAB), [Python](/source/Python_(programming_language)), [Julia](/source/Julia_(programming_language)), [R](/source/R_(programming_language)), [Scala](/source/Scala_(programming_language)), [Elixir](/source/Elixir_(programming_language)), [SQL](/source/SQL), and others.<ref name=":0" /><ref name=":1">{{Cite web|url=http://blog.fperez.org/2012/01/ipython-notebook-historical.html|title=The IPython notebook: a historical retrospective|website=blog.fperez.org|access-date=2016-11-23}}</ref>

The variety of notebook interface has since been extended and new forms are still evolving.<ref>{{cite book |last1=Lau |first1=Sam |last2=Drosos |first2=Ian |last3=Markel |first3=Julia M. |last4=Guo |first4=Philip J. |title=2020 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC) |chapter=The Design Space of Computational Notebooks: An Analysis of 60 Systems in Academia and Industry |date=August 2020 |pages=1–11 |doi=10.1109/VL/HCC50065.2020.9127201|isbn=978-1-7281-6901-9 |s2cid=219572399 }}</ref>

== Use ==
Notebooks are traditionally used in the sciences as [electronic lab notebook](/source/electronic_lab_notebook)s to document research procedures, data, calculations, and findings. Notebooks track methodology to make it easier to reproduce results and calculations with different data sets.<ref name=":0" /><ref name=":1" /> In [education](/source/Educational_technology), the notebook interface provides a digital learning environment, particularly for the teaching of [computational thinking](/source/computational_thinking).<ref>Barr, Valerie; Stephenson, Chris (2011). "Bringing computational thinking to K-12: what is involved and what is the role of the computer science education community?".</ref><ref name=":2">{{Cite journal|url=http://blog.stephenwolfram.com/2016/09/how-to-teach-computational-thinking/|title=How to Teach Computational Thinking—Stephen Wolfram|website=blog.stephenwolfram.com|date=7 September 2016 |access-date=2016-11-23 |last1=Wolfram |first1=Stephen }}</ref> Their utility for combining text with code makes them unique in the realm of education. Digital notebooks are sometimes used for presentations as an alternative to [PowerPoint](/source/Microsoft_PowerPoint) and other presentation software, as they allow for the execution of code inside the notebook environment.<ref>{{Citation|last=Databricks|title=Spark Summit 2015 demo: Creating an end-to-end machine learning data pipeline with Databricks|date=2015-07-06|url=https://www.youtube.com/watch?v=NR1MYg_7oSg|access-date=2016-11-23}}</ref><ref>{{Cite web|url=http://blog.wolfram.com/2018/04/17/announcing-wolfram-presenter-tools/|title=Announcing Wolfram Presenter Tools|last=Frazier|first=Cat|date=2018-04-17|access-date=2018-11-27}}</ref> Due to their ability to display data visually and retrieve data from different sources by modifying code, notebooks are also entering the realm of [business intelligence software](/source/business_intelligence_software).<ref name=":0" /><ref>{{Cite news|url=https://www.oreilly.com/ideas/delivering-information-in-context|title=Delivering information in context|last=Andrews|first=Ian|date=2016-03-30|newspaper=O'Reilly Media|access-date=2016-11-23}}</ref><ref>{{Cite web|url=https://github.com/jupyter-incubator/dashboards|title=jupyter-incubator/dashboards|website=GitHub|access-date=2016-11-23}}</ref><ref>{{Cite web|url=https://www.wolfram.com/broadcast/video.php?c=88&v=109|title=Business Intelligence with Mathematica and CDF|last=Sharma|first=Shad|access-date=2018-11-27}}</ref>

== Notable examples ==
Example of projects or products of notebooks:<ref>https://datasciencenotebook.org</ref>

=== Free/open-source notebooks ===
* [Apache Spark](/source/Apache_Spark) Notebook<ref>{{Cite web |title=Spark Notebook |url=http://spark-notebook.io/ |access-date=2018-09-30 |archive-url=https://web.archive.org/web/20181001104051/http://spark-notebook.io/ |archive-date=2018-10-01 |url-status=dead}}</ref> &ndash; [Apache License](/source/Apache_License) 2.0
* [GNU TeXmacs](/source/GNU_TeXmacs) (a document processor which can act as notebook interface as well) &ndash; GPLv3<ref>{{Cite web |title=Welcome to GNU TeXmacs |url=https://www.texmacs.org/tmweb/home/welcome.en.html |access-date=2020-11-28}}</ref>
* [IPython](/source/IPython) &ndash; [BSD](/source/BSD_licenses)
* [Jupyter Notebook](/source/Jupyter_Notebook) (formerly [IPython](/source/IPython)) &ndash; [Modified BSD License](/source/BSD_licenses) (shared copyright model)<ref>{{cite web |author=Jupyter Development Team |title=Licensing terms |work=Jupyter Notebook |publisher=GitHub |date=2015-04-22 |url=https://github.com/jupyter/notebook/blob/master/COPYING.md |access-date=2018-12-20}}</ref>
* [JupyterLab](/source/JupyterLab) &ndash; [Revised BSD License](/source/BSD_licenses)<ref>{{cite web |work=Project Jupyter Contributors |title=LICENSE |date=2018-07-19 |url=https://github.com/jupyterlab/jupyterlab/blob/master/LICENSE |access-date=2018-12-20}}</ref>
* [Org-mode](/source/Org-mode) on emacs (with the built-in babel addon) &ndash; GPL
* [R Markdown](/source/R_Markdown)<ref>{{Cite web |title=R Markdown |publisher=R Studio |url=https://rmarkdown.rstudio.com/ |access-date=2018-09-30}}</ref> &ndash; GPLv3<ref>{{cite web |title=Licene |work=Readme |publisher=GitHub |date=2018-12-07 |url=https://github.com/rstudio/rmarkdown/blob/master/README.md |access-date=2018-12-20}}</ref>
* [SageMath](/source/SageMath) &ndash; [GPLv3](/source/GPLv3)

=== Partial copyleft ===
* [Anaconda](/source/Anaconda_(Python_distribution))
* [SMath Studio](/source/SMath_Studio) &ndash; Freeware, not libre: licensed under [Creative Commons Attribution-No Derivatives](/source/Creative_Commons_licenses)

=== Proprietary notebooks ===
* [CoCalc](/source/CoCalc)
* [Google Colab](/source/Google_Colab)
* [Wolfram Mathematica](/source/Wolfram_Mathematica)
* [Kaggle Notebooks](/source/Kaggle)
* [Mathcad](/source/Mathcad) 
* [MATLAB](/source/MATLAB) &ndash; Live Editor since 2016.
* [Databricks](/source/Databricks) cloud (founded 2013).<ref name=":0">{{Cite news |last=Osipov |first=Matt |title=The Rise of Data Science Notebooks |website=Datanami |publisher=Tabor Communications |date=2016-05-04 |url=https://www.datanami.com/2016/05/04/rise-data-science-notebooks/ |access-date=2016-12-20}}</ref><ref>{{cite web |title=Databricks Unified Analytics Platform |publisher=Databricks Inc. |location=San Francisco, CA |year=2018 |url=https://databricks.com/product/unified-analytics-platform |access-date=2018-12-20}}</ref><!--Proprietary-->
* [WolframAlpha](/source/WolframAlpha) Notebooks<ref>{{cite web|title=WolframAlpha Notebook Edition | url=https://www.wolfram.com/wolfram-alpha-notebook-edition/|access-date=2021-01-12}}</ref> <!--Assume as Proprietary-->

==See also==
* [List of online integrated development environments](/source/Online_integrated_development_environment)
* [Read-eval-print loop](/source/Read-eval-print_loop)

== References ==
{{Reflist}}

Category:Notebook interface
Category:Graphical user interfaces
Category:Literate programming
Category:Technical communication tools

---
Adapted from the Wikipedia article [Notebook interface](https://en.wikipedia.org/wiki/Notebook_interface) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/Notebook_interface?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
