Skip to main content

Phenomenological programming

Table of Contents

A screenshot of students’ progress from conceptual model to computational model with phenomenological programming.
An illustration of students recreating their conceptual models with phenomenological programming.

Try Phenomenological Programming

Project description

Phenomenological programming is a new approach to creating code-first science learning environments to make computer programming similar to how students intuitively perceive the world around them. It is a block-based programming approach (similar to Scratch or PencilCode) but aims to help students create sophisticated agent-based models of real-world phenomena using custom-made code blocks with little to no programming instruction by their teachers.

The idea of phenomenological programming emerged during my work on creating computational activities for an ideal gas laws unit. I wanted students to be able to develop computational models of kinetic molecular theory from scratch, yet I also knew that underlying physical phenomena were extremely difficult to calculate and program, even for experienced programmers.

I decided to design code blocks according to students’ intuitive understanding of real-world objects, patterns, and events instead of traditional commands used in other computer programming environments. For example, instead of using blocks such as “move 10”, “turn 15 degrees,” or “bounce” in Scratch, which always execute the same underlying code unambiguously, my phenomenological programming sandbox gives students code blocks like “move erratically” or “bounce like a balloon.” that are contextual and leverage ambiguity.

It is trivially easy for students to recognize the behavior of a phenomenological code block and predict the outcome through a quick mental simulation. For example, students can quickly parse a “move” command with a phenomenological component called “zig-zagging” and predict its approximate behavior, even if figuring out its exact nature would require some testing and tinkering. Achieving the same outcome in a general-purpose, procedural programming language would require mastering sophisticated constructs such as state variables, cartesian coordinates, and angles.


Aslan, U., LaGrassa, N., Horn, M., & Wilensky, U. (2020). Phenomenological programming: A novel approach to designing domain specific programming environments for science learning. In Proceedings of the Interaction Design and Children Conference, IDC 2020 (pp. 299-310). Association for Computing Machinery, Inc.

Aslan, U., LaGrassa, N., Horn, M. S., & Wilensky, U. (2020). Code-first learning environments for science education: a design experiment on kinetic molecular theory. In Proceedings of the Constructionism Conference, Constructionism 2020 (pp. 206-219).

Aslan, U., LaGrassa, N., Horn, M., & Wilensky, U. (2020). Putting the Taxonomy into Practice: Investigating Students’ Learning of Chemistry with Integrated Computational Thinking Activities. Paper accepted to American Education Research Association (AERA) 2020 Annual Meeting (meeting cancelled due to Covid-19).


In progress: I am still building my webpage. I could not finish this project’s page yet but I will soon.