Tuesday, March 24, 2015

Madeup: a Programming Language for Making Things Up

One of the things I have been wondering about is how to make a real connection between 3D printing and learning computer science. Sure most 3D printers are attached to computers and CAD software is used to create models for printing. That is not quite computer science to me. And it sure isn’t programming. Recently I learned about a project to create a language to program 3D models for printing. It looks interesting even though it is still under development.

Chris Johnson at the University of Wisconsin, Eau Claire is working on it and it is called Madeup. Madeup is a Logo-like language that can be used to “walk paths through 3D space, and then generate models based on those paths. Previews of the models are rendered on every keystroke in a WebGL canvas.”

Chris has a KickStarter (https://www.kickstarter.com/projects/1975355456/madeup-a-programming-language-for-3-d-models) to raise some funds to allow him more time to finish the project up so that it can be used in classrooms. I’ve contributed a small amount so that I can get an early copy for my own use.

I think the 3D renderings alone will make things more interesting than 2D graphics but being able to create a physical representation is really exciting to me. Take a look at the video on the KickStarter and let me know what you think. Does this look useful to you?


Kubisys said...

A three-dimensional printer is a very interesting device. But why was it necessary to look for a special programming language for 3D modeling?

Alfred Thompson said...

What does "necessary" have to do with anything? :-)

Chris Johnson said...

Alfred's point is a good one, and I think there are other good reasons too. I offer a few.

Madeup is a language and a development environment. Giving immediate visual feedback and non-threatening error messages to learners is important to me. This forces me to write my own interpreter. I could have written one for another language, but if I'm going to do all the work, why not pick a language that more directly expresses what its coders are trying to do? Using another language relegates Madeup commands to a library, and that indirection means students spend more time thinking about the mechanics of the system they are using than the algorithm they are trying to work out.

A paper at ITiCSE 2014 conducted a meta-analysis of many CS education studies and reported that only about 66% of students across the globe make it through their first university computer science course. Whether that course was taught in Java, C++, or Python didn't seem to matter. If that's our success rate with these esteemed languages, I feel little obligation to pick one of them.

There's also a temptation to think that learning one language distracts a learner from another, perhaps more important one. However, only the syntax of Madeup is different from more traditional languages. At its heart are loops, conditionals, functions, symbolic thinking, mathematical expression, arrays, and all the important parts of computational thinking. In the arena of spoken languages, an experimental group studied Esperanto of 6 months and French for 1.5 years. A control group studied French for 2 years. Who had the better control of French after the 2 years? The experimental group who had been wasting their time with another language. See http://www.fluentin3months.com/2-weeks-of-esperanto for more discussion on this.