
Why should children program? A review of Seymour Papert's Mindstorms - dannas
http://dannas.github.io/2016/08/27/review-of-seymor-paperts-mindstorms.html
======
todd8
At my age I can barely read the article's thin, small, low-contrast font, but
I believe that I agree with the author. I read Mindstorms back when it was
first published and thought it was reasonable. Now, I'm more skeptical. I see
the early introduction of technology into schools as distractions.

I have the benefit of experiencing life before the impact of computers on
society. Heck, my parents wouldn't even let me get toys that required
batteries (too expensive to replace). So, I played with toy trucks and I read
and I climbed trees and I drew. I drew pictures of locks, of circuits, of
mazes, of buildings.

My own children grew up very differently. Playing video games, and their
schools insisted on early introduction of laptops, convertible laptop/tablets,
and iPads. At an age where I would be drawing complicated diagrams of
electrical relays to play tick-tack-toe (which, because I was just a 13 year
old kid with no training would have never worked) they played XBox.

I tried to get the schools to use paper and pencil for math lessons instead of
iPads, but the forces at work in school systems end up encouraging many
distracting technologies being introduced with no discernible benefit.

Furthermore, the development of abstract thinking, necessary for programming,
happens over time in children. Is there any evidence that early programming
instruction hastens it's development? Real research in education seems pretty
weak.

~~~
sneak
Perhaps the false dichotomy of electrical/paper is obscuring the very real one
of video games/not video games.

Playing XBox is a waste of time in any generation.

~~~
taliesinb
That's too easy. Think of a game like Civilization. Granted, it's limited what
you can learn from reading the in-game Civopedia, but probably thousands of
kids have more awareness and interest in the historical progression of human
civilization from playing that game.

And even if it is superficial awareness, those kinds of games exercise the
fantasy-making faculties that make history itself interesting to learn about,
even later as an adult.

Another example. There was this flop of a game in the early 90s, called
SimEarth, that I have very fond memories of. It taught me about the Gaia
hypothesis and the carbon cycle and stuff. Gameplay was pretty wacky though.

~~~
todd8
I remember SimEarth a modern version could be very educational, but not Gaia,
isn't it a wacky theory?

~~~
taliesinb
Hehe, yeah. Worse, it's a _wrong_ theory. But still kinda interesting, no harm
learning about it.

Agree a modern SimEarth would be awesome.

------
bobbylox
If you find this essay compelling, you might be interested in the game I'm
working on, Codemancer (
[http://codemancergame.com/](http://codemancergame.com/) ). A game that
teaches programming, with a compelling story about a girl on a journey to
rescue her Father. Coming this Fall to Mac, PC and Tablets.

I tried to hew closely to the principles of Constructionism which were
pioneered by Papert, and to make the game accessible to kids who wouldn't
normally be interested in programming.

~~~
MichaelGG
Love the look. And female protagonist is a huge plus - I've two daughters and
it amazes me just how much they _really_ want female characters. As a boy I
didn't care but perhaps I was unusual.

My first question is how will this teach the use of variables and conditional
logic? My daughter has been playing around with programming using Scratch and
things like that. But she is stuck with just linear "programs", basically just
creating animated stories.

There's other games that seem to have the same mechanics as yours: get the
robot from A to B by entering sequential instructions. How do you
differentiate? (I mean this as a positive question not a bad criticism.)

I've tried sitting down with her and doing some basics of functions, but it
doesn't seem to go over well (she's 10). She _did_ love DragonBox, the
algebra-instruction game. Even at 6 she was able to "solve for x" for simple
equations. So I think it's possible to sneak stuff in, somehow.

~~~
bobbylox
Yes, I find that to be the case more often than not: boys don't care about the
gender of their avatar. Girls do.

Codemancer has variables and conditionals, and uses them for various things.
Some of the game is very tactical, so conditionals are used to deal with
enemies who have semi-random behaviour. There are also levels that take place
"in the dark" (with a limited field of view).

Yes, "code your way to the target" games have become somewhat of a genre. I
think the story is one source of differentiation, as is the programming
interface -- Codemancer has no numbers greater than 5 (arithmetic is mod 6),
to keep the game from getting math-heavy. All the functions are symbolic, so
there's no reading required.

In Codemancer user-defined functions are "pages" in your spell book. Players
can call other pages, and even the page they're on (this is much later in the
game). You can also Cast a page onto an enemy who has been weakened. We've
seen that kids are pretty comfortable with the idiom of "Pages."

~~~
akkartik
Interesting. Do 'pages' support being called with arguments? That was the
place I found things like LightBot to be lacking.

~~~
bobbylox
Yes, in a roundabout way -- feeding arguments sets the variables on that page.

------
erikpukinskis
Preface: I'm going to use a really loose definition of AI here for a minute,
which includes any computer agent that makes decisions a human might make. So,
your alarm clock is an AI, the code that rejects your credit application is an
AI, but the code that decides how exactly to paint this letter C is not. Now
on to my comment:

I think children should learn to think about programs at a young age, because
understanding AIs will be equally as important as understanding other humans
in the coming century.

We will see more and more interaction with AIs who have powerful capabilities
beyond what most humans can do. We will start to see AIs with emotional
palettes and developmental trajectories that will allow them to integrate with
us socially. But also, the little AIs like the alarm clock and the credit
check are already more and more common gating structures in peoples' lives.

As long as the majority doesn't think about programs too much, you can ignore
them too. But as more and more people program, like reading it will become
more and more of a disability not to. Being able to think "natively" in
software is going to be important. Not mandatory, but important.

Why isn't that employment AI you met finding any construction jobs for you?
Does the physician AI really understand the probability that your Dad is NOT,
zero probability, going to cut back his saturated fat? Your gardening AI
(which is crossed with several other AIs that help you manage your household)
says to plant corn, but your neighbors haven't yet, does it know something
they don't?

If you can read code, those are questions you can ask.

~~~
twa927
I think you are severely underestimating difficulty of understanding non-
trivial code. Even good programmers would need days if not weeks to understand
how software like card processing AI works. And even when you understand the
code behind it the AI like deep networks produce models that cannot tell to a
human "how" it works.

So when a person uses a software component for real-life purposes I don't
think there's a difference between someone who knows how to code and someone
who doesn't - it's a black box.

~~~
erikpukinskis
> Even good programmers would need days if not weeks to understand how
> software like card processing AI works

I think there will be a shift in how we design software. Right now, software
is mostly organized into monolithic packages which are about the maximum size
a professional developer can make sense of in 40 hours per week. For the most
part, all corners of the codebase are written with the expectation that they
will be read by an expert in the language who understands the whole codebase.
Lots of side effects, advanced control structures, etc. In order for
programming literacy to take off, we will first have to start organizing some
of our software for widespread human understanding.

Instead of one giant pro-level repository, you will have a toplevel layer
which is mostly configuration code, but which is written in very domain-
relevant language, using only simple programming primitives: functions and
literals. It will be boxed into small, understandable modules, and editable in
a browser like any simple document.

The next layer down will be generic algorithms and data structures, also
written using simple programming primitives, and designed with very forgiving
APIs, again using as much domain-specific language as possible and pushing
non-domain specific implementation details down into libraries.

The third layer will be implementation-specific code, highly optimized, using
the full spectrum of language tools and programming constructs. Only the
domain of professional programmers.

Everyone, including children and executives will dabble in the top layer.
Domain professionals (everyone in your organization who is not a full-time
programmer) will work in the second layer, only in the part of the software
that they specifically interact with in their work. Full-time coders will
maintain the third layer, and will think of their role more as a support role,
building tools to support the organization, rather than maintaining total
control over the codebase.

~~~
twa927
So far there were multiple approaches that looked something like what you
described: component programming, visual programming, "4GL" languages. Heck,
even Steve Jobs wanted to sell software components. But these things failed.
"Coding" won.

~~~
erikpukinskis
Nothing I described is "not coding". I described using a subset of existing
language constructs for certain parts of a codebase, and structuring some
interfaces in a certain way.

I certainly didn't say anything about visual programming.

4GL... I think you meant something else there? Ruby and PHP are 4th generation
languages and are obviously doing quite well.

As for component programming... I think that's the closest historical
precedent for what I'm describing so I'll go deeper there...

Unlike "component people", I don't think there is any single interface for
high level domain-specific libraries. Every domain will be different. Objects
are certainly not a panacea. And I have no illusions that domain-specific
libraries would ever be automatically compatible with one another. I have no
illusions of some universe of easily integrated components. I'm just talking
about an isolated, high-level API on top of a single, internally consistent
codebase.

A simple example, instead of a repo with a bunch of configuration data and a
"start" command, build a service as a library without any deployment
specifics, and then have a separate repo that has a simple script that uses
that library to set up a specific instance.

Or, build a site as a library without any content, and then have a separate
repo that just binds in the content to the app, so that anyone could play
around with the content without having to dig through the implementation
details, and with a smaller chance of breaking something.

It's just about separating the part of the codebase that vaguely makes sense
to non-engineers from the part of the codebase that makes zero sense. I'm not
talking about any kind of radical technological shift.

~~~
twa927
> 4GL... I think you meant something else there? Ruby and PHP are 4th
> generation languages and are obviously doing quite well.

I meant languages with integrated GUIs and databases:
[https://en.wikipedia.org/wiki/Fourth-
generation_programming_...](https://en.wikipedia.org/wiki/Fourth-
generation_programming_language)

> A simple example, instead of a repo with a bunch of configuration data and a
> "start" command, build a service as a library without any deployment
> specifics, and then have a separate repo that has a simple script that uses
> that library to set up a specific instance.

If the service does something useful then it must use things like databases
and external APIs. So you need interfaces to abstract them - and they will be
big and complex. It looks like you end with the "component problem"?

------
Fiahil
I used to play a lot with Lego when I was young, and programming is not much
different from that.

Given a simple manual and a set of basic pieces you learn on your own the
basics, and then move to higher order constructions by experimentation. I bet
you can just give a child a basic black and white terminal and a "refined
documentation", and they'll be okay just as much. Just remove everything
unnecessary and sandbox the whole thing (you should expect the kids to break
it to install games at some point, but that's okay).

~~~
taliesinb
... segue to the wonderful LEGO Mindstorms, named after Papert's book, which
had a graphical programming language very similar to Squeak, which itself goes
back to Kay's dynabook, influenced by Papert.

OT, but I'm very grateful to Mindstorms, it took me to the next level when I
was a teen, from QBasic to C. Not because of its visual block language, which
I hated as I could already code, but because I found out about a thing called
NQC (Not Quite C).

NQC was a hobbled dialect of C that you could use instead of the LEGO's visual
language to program the RCX (the main computer brick with batteries in it).
I'd never tried C before, and it was a _revelation_.

And it unlocked wondrous hacks, like using the IrDA transceiver on the RCX as
a psuedo-lidar so that your robot could stop short of walls, it could even
estimate distance. At the time, it was so cool to me. From playing with my
stumbling robot trying not to hit obstacles I got interested in Rodney Brooks
and subsumption architectures. So it just inflamed my passions in AI and
programming at a critical part of my adolescence.

Ironic, though, that a Papert-inspired graphical language was the antagonist
in this story. The breakthrough came from wanting to scale the walls of the
little garden LEGO had built.

~~~
erlehmann_
> And it unlocked wondrous hacks, like using the IrDA transceiver on the RCX
> as a psuedo-lidar so that your robot could stop short of walls, it could
> even estimate distance.

Ha, I did that as well with Mindstorms RCX in like 11th grade or so! Later, in
university, Mindstorms NXT was used: Our first assignment was to follow a
track on the ground and the team I was the only one had two programs, one for
recording the track with the sensors and another for following the previously
recorded track in high speed without using sensors at all.

~~~
taliesinb
Cool hack. So you had to do multiple laps? It's interesting that dead
reckoning actually worked, we had lacquered wooden floor in my house and the
slip was quite bad, dead reckoning never worked.

~~~
erlehmann_
We were allowed to do multiple laps. I stopped attending the (non-mandatory)
course after I saw that the other teams were no challenge and some even had
problems to just follow a line.

------
Whackbat
To write good programs that provide any useful functionality often a solid
understanding of architecture and Mathematics is required. These skills are
better understood in my opinion without focusing on software development as
the end goal. A child is likely to be self motivated to write software if they
have these skills and, most importantly, a desire to do so.

~~~
tzakrajs
Mathematics? Wat? Software development is way more intuitive than mathematics
and high level abstraction obviates the need for mathematics skill.

~~~
khedoros
Mathematical concepts are usually pretty intuitive. I think that the problem
is more the notation that we teach than math itself being unintuitive and
difficult.

I'd also say that programming is a mathematical endeavor by nature; logical
manipulation is a branch of mathematics. If you're working at a level of
abstraction where you aren't specifying logical manipulations, then you're
filling out a template, not what I'd call "programming".

------
conceptpad
"Learning from Seymour Papert" \- MIT Media Lab Published on Aug 1, 2016 A
panel from the Spring 2014 Member Event. Panelists: Mitch Resnick, Marvin
Minsky, Alan Kay, and Nicholas Negroponte.
[https://www.youtube.com/watch?v=Pvgef9ABDUc](https://www.youtube.com/watch?v=Pvgef9ABDUc)

------
endswapper
I think children should program, and I think they should do it as early as
possible. It's a form of mental calisthenics that when coupled with the right
parent/mentor will prove invaluable in development and beyond.

In the same way that child gymnasts(or insert appropriate example) get the
benefits of developing physical strength and range of motion I think child
programmers can reap mental benefits.

I think most education is focused on data accumulation as opposed versatility.
Usually, it is when you get to some level of advanced education that it starts
to teach you how to think. I think that is backwards, but perhaps a different
conversation. For example, my lawyer friends are quite proud that their law
degree "taught them how to think."

What I find most exhilarating (yes, exhilarating) about programming is the
problem solving aspect, which forces you to think differently. Finding comfort
in patterns has a certain pleasantness to it, however, my experience is that
you will eventually run in to situations that challenge your experience and
expectations. For me, that's not just a benefit of programming, but a metaphor
for life.

The more modes of thinking, or perspectives you possess the better you
understand yourself, how you think, your strengths and weaknesses. Then you
can hack yourself to improve or leverage each.

------
kpwagner
His conclusion, to "not try to make programmers out of kids, but rather enable
kids to be makers", seems like the right idea. "Hacky coding", which would be
an accurate description for the programming I've done outside of front-end
dev, is comparable to "making". Making is more about creativity and trying
than syntax and optimization.

It's not about encouraging mediocrity; it's about saying there's nothing wrong
with failing.

------
nicolethenerd
This is a bit of a tangent, but you guys seem like the right crowd. Logo has
been on my mind the past few days, as I'm rapidly approaching my 20th
"codeversary" (ie. 20 years since my very first programming lesson, in what I
believe was Berkeley Logo). To mark the occasion, I've been trying to figure
out what a Logo tribute tattoo might look like - the "turtle" is the obvious
thing that comes to mind, but in the version of Logo I learned on, the
"turtle" was just a triangle. I'm trying to come up with an image that's
aesthetically pleasing, doesn't actually include any code, and is recognizable
as Logo. So maybe the "turtle" drawing something, but what? (No idea whether
I'll actually muster the courage to get this inked on my body, but it's a fun
thought exercise either way.) Any ideas?

~~~
sn9
The obvious solution to me is an image of a turtle in the process of being
drawn by a Logo triangle.

You'd want it to be incomplete, but complete enough to have transformed from
an arrangement of lines to something that's unambiguously a turtle.

~~~
nicolethenerd
Thanks! Or a turtle being drawn by a turtle being drawn by a turtle... turtles
all the way down! ^_^

Seriously, though - I appreciate the suggestion - I was thinking of triangles
drawing triangles, and turtles drawing turtles - but it didn't occur to me to
mix the two. Great idea!

~~~
Intermernet
> triangles drawing triangles

Reminds me of a Sierpinski triangle[1]. Can you have a turtle infilled with
the Sierpinski pattern, or maybe a Sierpinski triangle being drawn by a
turtle?

Also, you could get a tattoo with something like:

    
    
        to e :s :l
        if :l>0[repeat 3[e :s/2 :l-1 fd :s rt 120]]
        end
        e 99 5
    

Which is Logo code to draw a Sierpinski triangle (main credit [2], you can
demo at [3]).

[1]:
[https://en.wikipedia.org/wiki/Sierpinski_triangle](https://en.wikipedia.org/wiki/Sierpinski_triangle)
[2]:
[http://codegolf.stackexchange.com/a/10793](http://codegolf.stackexchange.com/a/10793)
[3]: [http://www.calormen.com/jslogo/](http://www.calormen.com/jslogo/)

------
pfooti
If you liked this essay (which I did), you are probably going to be interested
in Audrey Watters's Hack Education blog. [0]

In particular there is a big difference between the kinds of Papert-inspired
computatiinal environments that provide microworlds for learning and a lot of
what is being produced today (which Watters rightly calls out as a rediscovery
of Skinner behaviorism and teaching machines). She has a lot of content and a
couple of essay collections.

0: [http://hackeducation.com/](http://hackeducation.com/)

------
gavinpc
Thoughtful and clearly written. I also have a six-year-old daughter and many
of the same concerns.

Even as a shameless Alan Kay fanboy, I'd managed to miss his 2007 TED talk
until last night. It includes a kind of front-to-back demo of how they were
using computers (and other means) to teach six-year-olds at that time, which I
haven't seen in his longer talks for technical audiences.

[https://archive.org/details/AlanKay_2007](https://archive.org/details/AlanKay_2007)

~~~
e12e
Also related, Alan Kay's talk on "Rethinking CS education (2015)":

[https://m.youtube.com/watch?v=N9c7_8Gp7gI](https://m.youtube.com/watch?v=N9c7_8Gp7gI)

------
vegabook
they shouldn't. They will be subjected to a relentless digital world from age
10 onwards, and before that, they should at least be given the chance to fully
bathe themselves in our intrinsically analogue reality, with all its subtle,
unabstracted, and beautiful detail.

------
twa927
I think programming is for adults. Programming abstractions we use and ways of
thinking are tailored to an adult's brain. I think that "programming"
environments for children are SOMETHING DIFFERENT than real-world's
programming. I don't see how what you learn in the former translates to the
latter.

I remember actually not liking programming when introduced in a school. They
didn't teach abstractions like functions, data types but rather long, math-
oriented series of instructions which needed visualizing in a notebook to
understand (I think environments like MIT's Scratch are something similar). I
only started to love programming when I saw it consists mainly of things like
functions, objects, different data types. But this kind of things is probably
too abstract for a kid to understand.

------
tdkl
> And when I watch her friends using the tablet in kindergarten, I see
> educational apps that introduces numbers, letters and simple logic. But
> couldn’t those subjects have been taught just as well without a computer?

Of course they could, but corporations couldn't earn millions in this case.

~~~
jdminhbg
No, people are very capable of earning millions by selling non-computerized
educational materials. See the textbook industry for an example.

------
mc42
I always look at the Lego windstorms with a degree of curiosity, as their
software libraries are derived from LabVIEW.

------
nojvek
This hits home. Lego mind storms is what made me get into programming. I had
so much fun tinkering with both the hardware and software.

Although labview based software was utter crap. There was an open source C
based version. That was my first building blocks.

I'm thinking of getting my nephew one.

------
anfroid555
Understand how to make games is different then playing games and surfing the
web looking at junk.

------
kasparsklavins
I teach kids low level programming. It can be quite rewarding.

------
edtechdev
Nice article, but I think you'd do many a favor by increasing the text color
contrast to make it more readable:
[http://wave.webaim.org/report#/https://dannas.github.io/2016...](http://wave.webaim.org/report#/https://dannas.github.io/2016/08/27/review-
of-seymor-paperts-mindstorms.html)

~~~
jwr
Also, please don't disable zooming on iOS devices. There is no good reason to
do it and it prevents some of us from reading at all.

~~~
dannas
Sorry for the inconvienence.

I wasn't aware that the site was blocking zooming, I had just copy-pasted an
old jekyll theme.

I've removed the references to viewport and a scale_fix.js file, hope that
helps.

~~~
jwr
Thanks! This is very much appreciated.

------
behnamoh
I think schools should teach only functional programming, because it's much
more challenging and better suits the purpose of educating the students.

When it comes to FP, I suggest Haskell without second thought, because it's
pure and forces children to think functionally. Haskell's clean syntax also
makes it easier for children to read and write code.

On a side note, Haskell also resembles much of mathematical notations kids
learn in school anyway, more so than any other language (guards, functions,
etc.) Teaching it would not only help kids with programming, but also would
serve as a tool to implement math lessons on a computer.

~~~
taeric
Contrast this with the tinkering view that students should be given devices
that do things. Often described in very imperative languages. It is not
shocking that many actually find imperative easier to get things done in.

This is not to say that I think functional is bad. But blind advocacy that
ignores how you got to the spot you are is not helpful in getting others to
the same spot.

~~~
behnamoh
Certainly imperative-style also has its own advantages, and I'm not saying FP
is better or anything.

You might be right about the tinkering view, and to be honest, I know that
sometimes procedural thinking is a must-have ability that kids should posses.

But then again, programming is not just coding, and kids getting used to
imperative-style would probably miss the whole point, which is finding
challenge.

Anyway, you know how hard it is for a person who is used to imperative to get
it out of his system and program functionally. I have found the other way
around much easier. Just a thought.

~~~
taeric
Why not both? Progress is usually the important part. Offering both is
expensive; but going all in on a single approach is dangerous in the failure
case.

~~~
technomancy
Teaching both would work for older kids, but a lot of Papert's work suggests
that most kids under 12 haven't yet developed enough capability for abstract
thought to use explicitly mathematical concepts to model the world, so
teaching FP style at that point is just going to lead to frustration.

If you're going to teach kids at younger ages, you need to introduce it in a
way that they can relate to physically, which is why Logo makes the turtle
central; it has a heading and position just like a child's body, and it moves
in a similar way to the way you think about moving yourself.

Anyway, you should read Mindstorms if you're interested in this topic; it does
a great job explaining why the Logo approach is specifically grounded in a
thorough understanding of childhood cognitive development.

~~~
taeric
Apologies for the late response here. This makes sense, I was not thinking we
were talking lower grade levels. So, 12+ is what I had in mind.

