
Using Programming Language Concepts to Teach General Thinking Skills (2008) [pdf] - lainon
https://people.csail.mit.edu/rinard/paper/wowcs08.pdf
======
davekinkead
While I think programming can be a good way to teach general thinking skills
like perspective, clarity, precision, and abstraction, I'm dubious about the
claim that it is the best way to do so (§2.1).

Perspective - does learning multiple programming languages engender more
awareness of different perspectives than say, learning multiple foreign
natural languages?

Abstraction - does learning programming languages develop better use of
conceptual abstraction than say, mathematics?

Precision and clarity - does learning programming languages develop better
precision and clarity than studying philosophy and logic?

These are all empirical questions and no empiric data is provided. The lack of
support in the argument for the conclusion given also hints that maybe
learning programming isn't _the best_ way to learn clarity & precision after
all.

Where I thinking learning to program stands out as superior is that it teaches
a skill that is currently in high demand - programming.

~~~
seanmcdirmid
It is difficult to gather empirical data on human behavior and efficiency, so
I wouldn't ding Rinard points for that (as a systems PL researcher from MIT,
he surely knows how to measure numbers). You'll find the lack of useful
empirical data for most any pedagogic technique (what we can measure is
performance in simple tasks, by this doesn't scale up).

Math and philosophy are hella abstract, while learning through programming at
least has the learner building something concrete that can be more gratifying.
When maintaining the student's interest is much of the battle, it might not
matter as programming is not better than the other approaches, it only needs
to be good enough.

~~~
ujal
"[…] Students can work with them in an interactive setting that provides
immediate feedback and requires completely precise thinking." \--

Math and philosophy provide the latter but not the former. I guess the tight
feedback loop programming provides guides us by reducing the solution space.

------
hasenj
I don't know. I think general thinking skills are a pre requisite to
understanding programming.

I've seen many people try hard to learn programming but fail miserably no
matter how much they try.

~~~
mannykannot
Agreed. Furthermore, if programming can be a good way to teach general
thinking skills like perspective, clarity, precision, and abstraction, why is
there so much code lacking these properties?

I am particularly skeptical of the author's suggestion that developing a
domain-specific language would be one of the ways to teach general thinking
skills through programming. Absent an example to prove me wrong, I would think
that writing a DSL is so laden with task-specific minutiae that those parts of
the job that extend general thinking skills would be highly diluted.

On the other hand, I think programming helps with one thing: programs are, in
some sense, half-way between the physical world of discrete objects, and the
abstract world of words and symbols. I have seen it suggested (but I cannot
find the reference) that all abstract reasoning developed from an ability to
mentally model the physical world. If so, then programming may be a stepping-
stone from the latter to the former (though only if it is taught as such; most
programming instruction makes programming the goal, not a waypoint (which is
not surprising))

~~~
Jtsummers
I may be misreading the article, but the author doesn't suggest having the
students write a DSL, but using DSLs with students so that they can focus on
the specific problem domain. Think things like (classically) Logo, or recently
Scratch.

~~~
mannykannot
I believe that approach is also mentioned, but I was referring to section 5,
"Potential Teaching Approaches", and specifically 5.1, "Domain Specific
Language": "This approach would organize the course around designing and
implementing a language for computations in a particular domain."

------
naskwo
I'm Dutch, and in the Netherlands, for a certain level of high school, Latin
and Greek are required.

Learning Latin, and its framework (grammar) has been very helpful to me in
improving my German, Italian, French and Portuguese (I like languages).
However: it's important to have a solid grasp on one (mother tongue) language.

If you look at LearnXinY, you can see a lot of semantic parallels between most
programming languages.

I've been developing web apps since 1996 (Perl > ColdFusion > PHP and mainly
Ruby/Rails these days) and found that, intuitively, it's not so much the
programming language itself, but rather the act of programming itself that
helps me think more clearly.

------
jarek-foksa
When programming you learn practical ways to distinguish between good and bad
abstractions. A good abstraction should make it easier to reason about given
problem and make you more efficient. A bad abstraction complicates the problem
or even makes it impossible to solve because of the assumptions imposed by the
abstract system.

The skill to tell apart working vs non-working abstraction is useful in real
life. For example to distinguish a religion from a cult, you don't study the
bible or some other holy book, instead you look how that abstract believe
system has been working so far, e.g. by checking how many generations have
been successfully raised with it and how much progress they made.

You also learn that almost every programming abstraction is leaky to some
extent. You are very likely going to run into edge cases where the abstraction
needs to be adjusted or replaced with a lower level one in order to get things
done. Again, using the religion analogy, sticking to the dogma that the Earth
is 6000 years old is going to make it impossible to reason about e.g. the
theory of evolution.

~~~
cr0sh
> For example to distinguish a religion from a cult, you don't study the bible
> or some other holy book, instead you look how that abstract believe system
> has been working so far, e.g. by checking how many generations have been
> successfully raised with it and how much progress they made.

Note - I am not an expert in any of this, but that said:

“In a cult there is a person at the top who knows it's a scam. In religion
that person is dead.” - Anon

Examples:

Mormonism - started by a known documented and convicted con artist

Scientology - started (apocryphally) because of a bet

Both of these new religions, both started within the last 200 years (1830 for
Mormonism, 1954 for Scientology), the former having in common only certain
general themes with Christianity, and then ret-conning new material in to
complete the "history", and the latter making up everything out of whole, bad
sci-fi cloth.

One could easily argue that all religions started out as cults; certainly what
we know of the historical parts of Christianity makes it a likely candidate.
Likely only the very earliest naturalism-based quasi-religions lost to pre-
history are among the only ones which could honestly count as "pure".

Not that any of them have led to honest understanding of the world (I will
allow for philosophical introspection and discussion, which definitely and
ultimately led to our current scientific methods, though those methods too
were influenced and pre-empted by earlier non-religious philosophical methods,
particularly those by the early Greek societies).

Again - these are my (perhaps flawed) understandings, though I am open to
learning more, even if that new knowledge contradicts what I already know...

~~~
jarek-foksa
An abstraction layer can be still useful even though its core assumptions
don't reflect the reality and could be easily disproven by a scientific
experiment. Take classical physics for example.

Just to be clear, I was not defending any religious system here, I just meant
it's easier to judge their usefulness based on a practical basis because of
their complexity.

------
grashalm01
Factorio does an amazing job teaching programming concepts without even
noticing.

------
newbear
Programming def helped me understand exactly what focus means - making sure
all details are intentional.

------
sitkack
General writing skills teaches thinking skills. We already have DSLs for
humans to communicate human ideas.

