This will be my 3rd year speaking at the annual Wolfram Technology Conference on programmer training methodology – specifically using Mathematica / Wolfram language. Each year, I’ve presented alongside a new cohort of high school students from Torrey Pines High School. One day back in 2015, I cold-called Abby Brown, a pioneering math teacher at Torrey Pines who’s been teaching her math students Mathematica for years. We’ve been working together ever since.
In 2016, we proposed a plan for a scalable network of extra-curricular high school coding clubs that could develop and support visual simulations of scientific concepts for teachers’ use in the classroom. Such simulations are particularly useful for highlighting abstract conceptual distinctions.
Here’s a simple example showing a rocket trajectory (a la Tsiolkovsky’s rocket equation), LEFT does not use a variable mass model, while RIGHT does. The difference in final altitude is visible at a glance. For beginners, pictures are better than text for understanding the essence of concepts. Interactive pictures (simulations) are even better, because learners can test their mental models by first predicting an outcome and then trying it out and seeing if it’s right.
In 2017, we presented an example of a learning tool that would analyze a user’s practice data for a given skill and return high-resolution, visual feedback. We started with a piano, because it has an existing data interface (MIDI) and it’s a relatable skill for most people, but we are ultimately interested in many other skills (incl. programming). Here’s an example visualization that shows which keys are seeing the most mistakes and which key the student is mistakenly playing instead. A perfect practice session would generate a flat plane.
We selected Mathematica as our training language for beginner programmers for the following reasons. (We wrote more about that here, but here’s a short(er) summary):
- It provides almost instantaneous capability to answer real, interesting questions through computation, often in a single line of code. WolframAlpha, the knowledge engine which powers many of the responses on Alexa and Siri is built-in the Wolfram language.
- It supports everything you need in a single tool. No libraries. No package managers. Just install, open a notebook, and start writing code.
- It’s a cathedral, not a bazaar – and thus, it is more structurally and stylistically coherent than an analogous OSS language like Python. Conceptual “noise” is exponentially more distracting and frustrating to beginners than competent or expert practitioners.
- It favors functional over object-oriented programming. OOP tends to quickly demand too much structural complexity for a beginner to follow effectively, so they will attempt to simplify and immediately begin forming bad habits that hinder their future development. Better to learn OOP when the GoF Design Patterns are also conceptually within reach.
- In the vein of simplification and accomplishing a lot with a little, Mathematica has entry-level functions that automate things you’d normally have to configure by hand. E.g. a classifier or predictor. Wolfram language (WolfLang) picks the ML algorithm and sets the hyperparameters. Feed in reasonably good labeled data, and you can prototype a useful image recognition app and then deploy it directly to the cloud or instantly generate an API for it – all in 2-3 lines of code. (You can also define your own neural net, when ready).
- There are actually a lot of free, cloud-based (no download) resources for interactively learning Wolfram. The puzzles are fairly accessible to learners of any age (even young kids), with curiosity as the driver. A few examples:
6.1. Elementary Introduction to Wolfram Language (EIWL) (for beginners)
6.2. Wolfram Programming Lab (fun programming challenges for kids)
6.3. Fast Introduction for Programmers (for programmers in other languages)
6.4. Wolfram Language Code Gallery (showcase of cool projects)
6.5. Wolfram Challenges (interesting questions with forms for code submissions)
6.6. Wolfram Demonstrations (interactive, visual simulations using WolfLang)
6.7. And more…
- Wolfram may not be the programming language of choice for most production software systems, but it is extremely useful for science and engineering students (if you can do it in Matlab, you can usually do it in Mathematica an easier way). And truly, there is no non-computational discipline anymore – the liberal arts and business schools would also benefit from incorporating more computation into their curricula.
This year, the focus is on the programmer training life cycle, including best practices I’ve internalized (either through study or through trial) in the years I’ve been training students.
Here’s the short-list of topics.
- Conceptual Progression – What is the sequence of ideas and associated study and practice materials that you put in front of a novice programmer in order to reliably get them to Competent and then to Expert?
- Assessment of Understanding – How do you (teacher/trainer) know what learners understand, what they don’t understand, and what they have misunderstood? (Remembering != Understanding)
- Knowledge vs. Insight – How do you stage learning activities to emphasize the essential over the trivial? Tactics can be interpreted much more quickly and effectively after a learner has understood the Strategies.
- Teamwork & Collaborative Learning – How do you make good use of the different background knowledge, skills, personalities, and synergies brought to the table by each member of a learning cohort? What’s the on-ramp to collaboration and then how is it sustained?
- Cultivating Intrinsic Motivation – How do you draw upon the internal energies of each individual to do their best work? What are the environmental conditions that enable people to act autonomously, per their own vision, without going totally off-track?
- Mentorship & Tutoring – What are the behavioral indicators that it’s time to bring in higher-order capabilities to guide the learner to better understanding? When should the learner be left alone? What is an efficient use of scarce training resources?
- Timing & Project Checkpoints – How do you stage project checkpoints to keep people on track towards a compelling objective but not overwhelmed in the midst of their obligations.
- Accomplishment – How do you put all this training effort to work in order to accomplish something useful? What are practical goals that can also contribute to intrinsic motivation?
I’ll be presenting specific guidance, with examples, for each of the above topics (and possibly more) at this year’s Wolfram Technology Conference, alongside one of my programmer apprentices Isaac Gelman, now a student at the University of Southern California. Specifically, we’ll be presenting at 4:30pm on Thursday, October 18th. Once the video of the presentation is available, I’ll write a detailed follow-up post and link the video.
Until then, happy trails.
About the Author
Eric Nelson is a Sr. Software Engineer with MS3, Inc., living in Minneapolis, MN with his wife Alisa, 6yo daughter Freyda, and 4yo son Arthur. Eric received his BS in Electrical Engineering from University of Minnesota and worked in photovoltaics & thin films, both at MN tech start-ups. In 2013, Eric helped found an inner-city charter middle school and taught courses in technology and entrepreneurship. In 2015, he founded his own cloud software consulting firm Augment LLC. And began training student cohorts in software design & development skills. He is now focused on building large-scale, secure, futureproof production software systems for smart brands as a member of the MS3 family. Meanwhile, he continues his effort to develop a scalable programmer training network for high school and college students. He also serves on the board of Minnesota Innovates, a nonprofit dedicated to cultivating MN technology startups building products in emergent technologies (e.g. AI, AR/VR, Gene-editing, Drones, etc.)