Here is a time line for the development of VPython, an extension to the Python programming language that makes it unusually easy to generate navigable real-time 3D animations (vpython.org).
1997: While at Carnegie Mellon, after writing a volume on introductory electricity and magnetism, Ruth Chabay and I teach introductory “modern mechanics” for the first time, including having the students program computational models, using the cT language I had created, something a bit like a good Basic, with (2D) graphics built-in, but running in a windowing environment on Unix workstations, Macintosh, and Windows (cT overview). cT was based on the TUTOR language of the PLATO computer-based education system (see my home page for links to videos of a conference about the history of the PLATO system).
1998: We have a remarkable student in our mechanics class, David Scherer. While in high school he led a team of his friends to create a 3D game that later won a national prize. He’s intrigued that cT has allowed students to write computational models that work on all platforms, but he glimpses a more powerful approach that would support 3D.
2000: We abandon cT, and in the spring Scherer creates VPython, with Ruth and me deeply involved in design and testing. Many powerful programmers have no interest in or patience for novice programmers, but Scherer saw it as an interesting challenge how to make programmatic 3D animations accessible to novices. His answer is to make real-time navigable 3D animations a side effect of computations, lifting a huge task from the shoulders of the novice. Of course this is also a huge benefit to sophisticated programmers as well. The original version of VPython is now called “Classic” VPython. It requires installing Python, the “visual” module, and an improved program editor based on the IDLE editor that comes with Python. In the fall of 2000 we start having students use VPython to do computational modeling in our course.
2002-2006: Jonathan Brandmeyer, an engineering student at NCSU, makes major contributions to VPython 3. He introduces the use of the C++ Boost libraries to glue the core of VPython, implemented in threaded C++ code, to those components written in Python, and builds autoconfigurable installers for Linux. In the 19 year history of VPython only three people made major contributions to the complex C++ code, Scherer, Brandmeyer, and me.
2008: Scherer, having sold his first software company and thinking about what to do next, and I work on VPython 5. Jonathan Brandmeyer provided support in VPython 4beta for opacity, local lighting, and textures, and made some important architectural changes, but had to stop work on the project before it was completed. Further development led to API changes that were incompatible with the VPython 4beta release, so there was no version 4.
2011: Kadir Haldenbilen, a retired IBM engineer in Turkey, and I collaborate to create the 3D text object and the extrusion object for VPython 5.
2013: Release of VPython 6, based on wxPython, which was initiated by me in June 2012 to address the serious problem that the Carbon programming framework for the Mac will no longer be supported. Major contributions to the release were made by Steve Spicklemire, a physics professor at the University of Indianapolis.
Fall 2015: Some institutions using our textbook, including Georgia Tech, report switching from Classic VPython to GlowScript VPython, and note with surprise how much more enthusiastic students are about using VPython now that they don’t have to install anything. In contrast, Classic VPython requires the installation of Python, the installation of the visual module, and, on the Mac, installation of an update to Tcl. This can be daunting and can fail for non-obvious reaons. The use of GlowScript VPython rises rapidly; here is a graph of usage vs. time.
January 2016: Coady, Ruth and I, and several well-known physics education colleagues (all of them users of our textbook and of VPython) publish a document on the further evolution of VPython, in which we announce abandonment of the 16-year-old Classic VPython in favor of the GlowScript and Jupyter versions. Here is that document, detailing our reasons.
January-September 2016: In collaboration with Coady, Ruth and I modify and complete Jupyter VPython to use the GlowScript VPython API instead of the Classic API that Coady had started with, because it is much better suited to the distributed nature of the Jupyter environment. Steve Spicklemire and Matthew Craig, a physics professor at Minnesota State University Moorhead, contribute mechanisms for creating pip and conda installers. Here are demo programs running in Jupyter notebooks.
July 2016: 3D text object implemented in GlowScript, with major contributions from Kadir Haldenbilen. I complete the GlowScript implementation of the extrusion object, though it is still missing some capabilities that were present in Classic VPython.
February 2017: I make the 3D text object and extrusion object available in Jupyter VPython.
June 2017: In response to requests from users, I release a version of the Python module vpython that can run outside the Jupyter notebook environment. The module detects whether the program is running in the notebook, and if not, it sets up http and websocket server mechanisms that display the 3D animations in a browser page. This makes it possible to work in IDLE or Spyder or other environment that can launch Python programs. I thank John Coady for providing helpful advice, Matt Craig for new installers, and Ruth Chabay for useful discussions. We now call VPython used with installed Python “VPython 7”.
February 2019: Matt Craig carries out a major restructuring of the code base and, with the help of John Coady, enables use with Jupyterlab and current Spyder.
Here is a description of the architecture of GlowScript VPython and VPython 7.