Phenomenological Programming

A new approach to designing code-first learning environments for students and teachers with no prior programming experience.

Project Overview

Figure 1. An example phenomenological algorithm.

Phenomenological programming is a novel approach to designing introductory programming environments for science learning. In phenomenological programming, high-level primitives are designed based on students’ intuitive understanding of the real-world objects, patterns, and events. Each primitive is made up of two components: a procedural statement that indicates action and a phenomenological statement that indicates behavior. Each phenomenological statement embeds assumptions about the modeled objects that students may be intuitively aware of but (1) may not have coherent knowledge, and (2) may not have competence in formal notations or domain-specific vocabulary to express their thoughts explicitly and/or unambiguously. These phenomenological statements are developed based on previously documented naive student conceptions to facilitate expression of intuitive notions and theories through code.

It is trivially easy to recognize the behavior of a phenomenological code block and predict the outcome through a quick mental simulation. It is also possible to include small doses of ambiguity in code blocks that can be beneficial for novice learners. For example, students can easily recognize a “move” command with a phenomenological component called “zig-zagging” and predict its behavior even if figuring out its exact nature would require some tinkering. Achieving the same outcome in general-purpose procedural programming languages would require mastering the use of sophisticated constructs such as loops, state variables, and angles.

With phenomenological programming, we aim to create coding activities that can be taught by science teachers with no prior training in programming to students with no prior exposure to programming. We also aim to enable students to create fairly sophisticated models which would be outside the scope of popular novice-friendly programming environments.

We have not yet reached a definitive set of design principles or guidelines. However, we compiled a retrospective summary of the steps that we followed while creating our very first design prototype:

  1. Analyze the target scientific phenomenon and documented student thinking patterns such as:
    1. Prevalent misconceptions and learning difficulties
    2. Challenging aspects of the formal science and mathematics concepts
    3. Challenges in thinking across levels (micro and macro)
  2. Create a map of the relevant phenomenological constructs:
    1. Explore the examples, metaphors, and analogies used in teaching materials (e.g., textbooks, worksheets, videos).
    2. Interview teachers:
      • Which kinds of examples, metaphors and analogies do they use in their teaching?
      • Which experiments do they conduct?
      • What is the familiarity of their students with the phenomenological constructs? Which terms or idioms are they more familiar with?
  3. Create a base agent-based model of the target phenomenon. Then divide the model into small sub procedures that correspond to phenomenological constructs from step 2.
  4. Create a small set of the phenomenological blocks and iterate on the initial design based on teachers’ and subject matter experts’ feedback.

Example phenomenological programming environment: NetTangoWeb Gas Particle Sandbox

The idea of phenomenological programming emerged during our work on creating a computational activities for an ideal gas laws unit. We wanted students to be able to construct their own scientific models of kinetic molecular theory, yet we also knew that underlying physical phenomena was extremely difficult to calculate and program even for experienced programmers. Therefore, our first design prototype that makes use of phenomenological programming is the NetTangoWeb Gas Particle Sandbox.

Figure 2. The progression of a lesson from investigating a real world object (air duster) to constructing a computational model of it using a phenomenological programming environment.


Umit Aslan, Uri Wilensky, Michael Horn, Nicholas LaGrassa


Aslan, U., LaGrassa, N., Horn, M., & Wilensky, U. (2020). Phenomenological Programming: a novel approach to designing domain specific programming environments for science learning

Aslan, U., LaGrassa, N., Horn, M., & Wilensky, U. (2020). Code-first learning environments for science education: a design experiment on kinetic molecular theory

Aslan, U., LaGrassa, N., Horn, M., & Wilensky, U. (2020). Putting the Taxonomy into Practice: Investigating Students' Learning of Chemistry with Integrated Computational Thinking Activities


Aslan, U., Horn, M., & Wilensky, U. (2019). NetTangoWeb Gas Particle Sandbox Model. Center for Connected Learning and Computer-Based Modeling, Northwestern University. Evanston, IL.


Aslan, U., LaGrassa, N., Horn, M., Wilensky, U. (2019). Ideal Gas Laws - Connected Chemistry 2019. [curricular unit]. Evanston, IL: Center for Connected Learning and Computer-Based Modeling, Northwestern University. (Based on Wilensky, U., Levy, S. & Novak, M. (2005, 2009). Connected Chemistry Model-based Curriculum 3.0.).


This work was made possible through generous support from the National Science Foundation (grants CNS-1138461, CNS-1441041, DRL-1020101, DRL-1640201 and DRL-1842374) and the Spencer Foundation (Award #201600069). Any opinions, findings, or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the funding organizations.