
Coding is not the new literacy - oskarth
http://www.chris-granger.com/2015/01/26/coding-is-not-the-new-literacy/
======
brd
In Zen and the Art of Motorcycle Maintenance, the author talks about the
importance of being able to carve up ideas in different ways to understand it
more thoroughly. I'd say knowing how to code, as in going through the process
of understand how to think through a logical sequence of steps, is a highly
effective means of handing someone a proverbial scalpel.

In my experience, most people cannot break things down logically nor do they
appreciate what it takes to provide clear instructions. There is an emphasis
in the world on communication which is a fine start, but being able to convey
an idea clearly really only becomes helpful once you understand the idea
clearly.

Besides programmers and mathematicians, the only people I've met with the
faculties to properly break things down are lawyers*. Law school trains you in
the ability to approach an idea from different angles in order to identify
attack vectors. As such, lawyers tend to be highly capable of feats of logic
but are equipped in such a way that they are almost entirely adversarial and
deconstructive.

So while I completely agree with Chris's point and understanding that this is
a banner he raises constantly, I'm a little disappointed to see him attack
this initiative to get more people into coding. I'm all for better modeling
tools and better teaching practices but I think teaching people to code is a
wonderful solution in the interim. Framing an argument like this will only
stir controversy in an otherwise worthy cause.

edit: I've met plenty of people who aren't programmers, mathematicians, or
lawyers that are logically capable. But as a general rule of thumb, those are
the only three professions I've interacted with personally that have
consistently shown that aptitude. Either way, please don't let this personal
anecdote distract from the overall message, I only left that comment in there
because I wanted to emphasize how rare the ability is across most disciplines.

~~~
ibdknox
> I'm a little disappointed to see him attack this initiative to get more
> people into coding.

That's because I'd rather people have the freedom to be mathematicians,
nurses, lawyers, physicists, writers, and accountants while still being able
to leverage computers. Instead of forcing people to become professional
programmers to get the computer to model things for you, we should focus on
teaching people how to model in general and build more tools like Excel that
let people do that.

Hell, I'd stand behind a movement to just teach people Excel. With Excel, we
don't have to spend the next several years worrying about what flavor of MVC
we have to use. Instead, we can focus on doing actually important things like
curing cancer.

> Besides programmers and mathematicians, the only people I've met with the
> faculties to properly break things down are lawyers.

My point is we should fix that, instead of focusing on teaching people Python.

~~~
MrDosu
So much this...

The goal should be for programmers to provide tools with interfaces that one
can use without actual knowledge of "the machine".

Imagine driving a car would require you to have intimate knowledge of
combustion engines, mechanics and the electronic systems therein vs just
pedals + wheel.

~~~
klibertp
> Imagine driving a car would require you to have intimate knowledge of
> combustion engines, mechanics and the electronic systems

So, for this analogy to be fair, we'd need to have computers which you can't
operate unless you know how to use transistors to build logic gates, how to
build your CPU out of those, how this CPU executes instructions and so on. Of
course, that's "vs just keyboard and mouse".

Of course there's room for improvement, but current computers _are not_ orders
of magnitude harder to use than cars. I'd say that they never were, but right
now they're not for sure: 3 years old kid won't drive a car, but he can have
some meaningful and fun time with a tablet.

Learning programming is secondary issue in my opinion. A "new literacy" is
something else: it's ability to stop and think about how the pieces fall
together, how they work, how you can make them do what you want. Programming
is certainly a way of learning this ability, but it's also full of pointless
ritual and irrelevant things and operates on completely wrong - for the normal
user - level of abstraction. I don't know what is the most efficient way of
teaching this to people, but I strongly believe that we _need_ to teach them
this. If we have no better way, then let it even be via programming, it's
still better than nothing.

~~~
MrDosu
Ofc there is some amount of hyperbole in the analogy.

Computers ARE orders of magnitude harder to use than cars. A car has (at the
simplified level) a single wheel that goes either left or right and 3 pedals.
The hardest concept relating to hardware is what a gear is and why you need to
shift it (among a few others).

It is correct though that software CAN be more simple than that in their use.
Those pieces of software tend not to solve complex or any problems in our real
world though.

When it comes to 'coding as literacy' this has not much to do with using a
highly simplified UI. It has to do with the fact that if I want to use most of
the features of the machine we call PC, you HAVE to be able to program.

Sticking with the car analogy my kid can have great fun if I show her how to
use the horn in the car. It will not allow her to do anything meaningful with
the car (getting from A to B). All she can do is use the car as a toy.

I agree with you on the core problem though. Things are abstraced away from
everyone in our daily lives in such a way, that people sometimes are unable to
be 'precise'. By that i mean the ability to fully describe a problem and
formulate an executable solution. I personally don't think programming is the
solution to that. Personally I learned that concept in school in philosophy
class.

------
copsarebastards
This is completely pedantic. If you want to argue that coding is different
from modeling, true, but there's a great deal of modeling implied in coding. I
don't think anyone would refer to someone who could only write if statements
and for loops that didn't model anything as a coder.

And if we're going to be this pedantic: when you're saying "we don't need to
teach coding, we need to teach modeling," you're saying the equivalent of "we
don't need to teach reading and writing, we need to teach offloading data
storage." How exactly do you plan to teach modeling in the void? There are
other ways to model, but coding is by far the most expressive and widely
applicable. The way you learn to offload data storage is by learning to read
and write. The way you learn to model is by learning to code.

~~~
woah
This is the essay of a man trying to sell a 'visual coding' tool.

~~~
coldtea
Yeah, because marketing explains everything.

I, for one agree 100%, and I'm NOT selling a visual coding tool.

~~~
woah
My comment was a statement of fact. Maybe he was inspired to sell the visual
coding tool BECAUSE of his beliefs, not the other way around.

------
mncolinlee
What Chris Granger is explaining is pedantry. It's a difference without a
distinction.

I used to teach AP Computer Science. On the first day of class, I'd hand out
paper and have the class make paper airplanes. I'd then ask them to write out
the instructions they used and would play "human parser" as they turned them
in to me, building lopsided airplanes by interpreting their instructions too
literally. Sure, modeling will teach them the necessary skills as well as any
programming language. I would argue that my students were coding. The
difference between coding and algorithms is important, but it's mere semantics
as far as this discussion is concerned.

Yes, coding isn't literally "the new literacy," but his point destructs the
discussion in the way pedantry usually does in political spheres. In politics,
being right often gets the wrong result. Coding is an awesome, interactive way
to explore algorithms and how technology works.

~~~
ibdknox
The simplest possible distinction: coding is writing code in a programming
language[1][2][3], modeling is breaking down systems without regard for
computer or programming language and is not specific to any domain.

When we say "coding" the accepted definition has to do with giving
instructions in a programming language to a computer. I'm saying that the
fundamental skill for people has nothing to do with Python or computers at
all.

[1]: [https://www.google.com/webhp?sourceid=chrome-
instant&ion=1&e...](https://www.google.com/webhp?sourceid=chrome-
instant&ion=1&espv=2&ie=UTF-8#q=define%3A%20coding) \- "write code for (a
computer program)."

[2]:
[http://en.wikipedia.org/wiki/Computer_programming](http://en.wikipedia.org/wiki/Computer_programming)
\- "commonly referred to as coding"

[3]: [https://www.google.com/webhp?sourceid=chrome-
instant&ion=1&e...](https://www.google.com/webhp?sourceid=chrome-
instant&ion=1&espv=2&ie=UTF-8#safe=off&q=coding) \- everything on the first
page is talking about writing code as instructions to a computer.

~~~
seanmcdirmid
Well then, by those definitions coding is to programming what typing is to
writing a novel. Mostly uninteresting and barely taught at all in my UW CSE
courses.

~~~
seanmcdirmid
Just to be superclear, my problem isn't Chris's thesis, but that somehow
learning programming is "learning how to code", which, given any decent
computer science education, is definitely not the case (maybe a few weeks in
an intro CS class, that's it).

So with that in mind, I don't get how they are going to shortcut 2 or 3 years
of intensive specialized training with this realization, given that we already
base our education on this anyways?

He also brings up something like Sherry Turkle's* software bricolage argument,
which I also totally agree with. HCI was also founded on these premises
(starting as a fork of the PL community focusing on VPLs). Obviously there is
not much new under the sun, it's all in the execution, and I hope they succeed
with that.

* not surprising since...MIT

------
michaelfeathers
> We build mental models of everything - from how to tie our shoes to the way
> macro-economic systems work. With these, we make decisions, predictions, and
> understand our experiences. If we want computers to be able to compute for
> us, then we have to accurately extract these models from our heads and
> record them. Writing Python isn't the fundamental skill we need to teach
> people. Modeling systems is.

I think he's missing something. Modeling is only a small part of what people
learn when they learn to program. The real lesson of programming is to be able
to to create models that stand up against the cold asphalt of reality.

They, first of all, have to be consistent enough to execute and secondly, they
have to be tested with data.

The hurdle everyone goes through when they learn to program is the unforgiving
nature of the machine - it's not what you think you are saying that counts,
it's what you are actually saying. And, that's an important lesson.

~~~
gnaritas
> The hurdle everyone goes through when they learn to program is the
> unforgiving nature of the machine - it's not what you think you are saying
> that counts, it's what you are actually saying. And, that's an important
> lesson.

Spot on, it's also a lesson everyone would benefit from as it makes you learn
to think and communicate clearly.

~~~
gfodor
It's a good lesson, but it also goes against the grain of how humans operate.
A humane computer system will tolerate ambiguity and imprecision better than
any modern day programming environment currently does. The trick is giving the
human an environment to explore and learn, which can _evolve_ into one that is
robust and precise. The act of creation is a back-and-forth, but we are using
tools whose roots lie in a model where if you literally sit down and type out
the solution into a terminal, that is the idealized model of creation.

Imagine a way to create models that is context sensitive to the capabilities
and knowledge of the user, both in general and specifically in light of the
problem being modelled. Modern day programming is one-size-fits all and forces
you to overspecify too many details correctly before you get a working
program. (some languages and paradigms more than others)

~~~
gnaritas
> It's a good lesson, but it also goes against the grain of how humans
> operate.

Which is why they need to learn to think better.

> A humane computer system will tolerate ambiguity and imprecision better than
> any modern day programming environment currently does.

I have no interest in such a thing, it's a fantasy.

------
neovive
I've been running a weekend programming club for grades 3-5 using Scratch
(scratch.mit.edu) and notice some of Chris' points first-hand. For those
unfamiliar, Scratch provides a LEGO-like programming environment--it's roots
go back to LOGO.

After much initial enthusiasm, the club is down to a core group of dedicated
students. The drop-off started when I switched from directed instruction to
self-guided projects. Although Scratch contains a relatively small set of core
programming blocks, the amount detail involved in building moderately-complex
programs (multi-level games, scrolling, interaction) is a lot to overcome for
someone without experience. I think some of it relates to the "fundamental
disconnect" discussed: A student might be thinking "I want the background to
follow the goblin," but needs to translate that into code blocks not part of
his/her everyday language. It takes practice and experience to learn the
computer's vocabulary for describing a process.

~~~
shamney
practice, experience AND intelligence

~~~
rmxt
I would venture to say that what you focus on in your comment runs explicitly
counter to what the GP was trying to emphasize in their post. For the people
who teach kids of grades 3-5/ages 8-10, I doubt that they are in the business
of dissuading children who are apparently "not intelligent" by whatever metric
you imply. Kids at that age deserve every open door that can be given to them,
and implicitly shutting them out of a computer science club because they can't
immediately grok how to do the described task is doing the entire community a
disservice. The lesson to be learned isn't that some kids can't (or won't
ever) cut it, it's that the learned elders need to formulate better ways of
passing along programming knowledge to the younger generation.

~~~
neovive
Great points. It's very important not to classify at such a young age. Kids in
the club are encouraged to try new things, experiment, make mistakes and have
fun without worrying about assessments or grades. There are no success rubrics
and the computer, in this situation, is just a tool for creative expression--
like LEGO or clay. Scratch works well since it's very approachable and is a
fun introduction to computer programming as creative tool.

The drop-off effect is normal, just as some people choose to stop art and
music classes after an initial introduction. For some, there is a "fundamental
disconnect" when expressing themselves creatively with music or art and they
will naturally gravitate away from those areas. However, a child should not be
excluded from art class for not being able to draw a perfect portrait.

My hope is that being introduced to programming concepts in this club forms
mental models that can be referenced later on when learning other subjects
and, perhaps, motivate some students to further explore computer science.
Either outcome is a success.

------
jgrahamc
Object permanence for children is interesting but not the best example. Far
more interesting is the fact that children fundamentally don't understand
geography at a young age because they can't see it and have to imagine it, and
geography breaks something down into types (city, village, country etc.) and
there's a hierarchy. Understanding geography is close to the sorts of abstract
thinking required of programming.

Small children have a great deal of problems with "Paris is in France. We are
in Paris." They also have almost no concept of distance as related to
geography because they have no internal map of the world. So when you drive
out of Paris you are still in France, but if you drive over the border into
Belgium you are in another country.

So, teach kids geography.

I experienced this while teaching LOGO to small children (yes, this was years
ago). Given a LOGO turtle and a set of instructions it's fascinating to watch
them work out how to draw a square.

PS You might think showing small children a map or satellite view would help,
but it doesn't help (much) because they have no internal way of breaking down
the data presented into what they experience.

~~~
TeMPOraL
> _geography breaks something down into types (city, village, country etc.)
> and there 's a hierarchy. Understanding geography is close to the sorts of
> abstract thinking required of programming_

It's one of the tools, but - probably because being heavily promoted by books
and articles on Object Oriented Programming - it seems to be abused to the
point of making some programmers dumber than they were before.

What one really needs to grok here is that categories are arbitrary and rated
only by their utility. With your example - yes, we divide countries into
cities and villages, etc. but not only there are tons of exceptions breaking
the perfect tree-like structure - the whole hierarchy exists only on the map,
not in the territory.

So yes, I'm all for teaching people hiearchies - followed by explaining that
they're totally arbitrary, that real world is fuzzy, and that best ways to
categorize do not always yield tree-like structures.

(and maybe then people will stop listening to stories like "European Commision
believes snails are fish" and then assigning stupidity to the authorities
instead of themselves)

~~~
jgrahamc
I never mentioned OOP and never would.

------
agentultra
To paraphrase William S. Burroughs from his 1978 lectures, "Creative Reading,"

 _In teaching creative writing there is the implicit assumption that the
student can write; that is put words to paper._

He instead eschews the traditional method of teaching a student to write well
and instead focuses on teaching them how to _read_ well on a hunch that it
will help the student to recognize good writing and why they appreciate it.

An idea I've been revisiting (as other luminaries such as Donald Knuth and
Peter Siebel have gone before) is why code is hardly ever read _creatively_.
Is it something about the procedural epistemology of certain languages? Are
inductive or deductive styles easier to comprehend? Why is the artifact of our
labor so divorced from its realization (source vs. execution)?

Siebel says we should approach the reading of code as the Natural Philosophers
of their time approached a new specimen. Knuth, as far as I know, still
advocates literate programming but admitted in _Coders at Work_ that he
doesn't read that much code.

And a new idea being popularized is data-oriented programming which suggests
that the design of the program should be divorced from its implementation
which should model the data flow as closely to the hardware as possible --
implying that readability is a secondary concern; further divorcing source
code from intent and purpose.

Literacy when it comes to code... appears to me at this point to be an
oxymoron.

It's not a novel idea to teach kids to code. I rode the tail end of a hysteric
push to teach kids to code in the 80s. A difficulty for me is that the
languages we have today are far more complicated. But we also have some better
tools... scratch has worked well when one curious niece and nephew asked what
I was doing.

Programming need not be this intense mental task with textual interfaces and
machine-oriented semantics. It's a useful skill to have: abstracting ideas to
symbols and applying transformations to them. A skill worth picking up, some
cynical types postulate, if you want to have a job in the next 10 years.

------
throwawaymsft
Thank you. Seriously, it'd be so much better (and easier) for people to master
Excel than Python. Excel is interactive, undo-able, documented, shareable,
graphical, etc. It's a much better tool for modeling. We don't need people to
master mechanical engineering to drive a car.

~~~
belgianguy
Managing a spreadsheet does not equal programming by a long shot, and given
large enough complexity, you'll run head first into VBA macros and abominable
one-liners with so much different branch points that it only makes sense to
its author, who could have written a program that seperated the code from the
presentation instead of munging up the two.

Sure, it'd get the job done, but the successor would have to rewrite it, as it
can hardly be documented, plus, from personal experience, people who are
versed in Excel trying to tackle data problems at companies have come up with
rather brow-raising solutions. (What's this MySQL you speak of? Does it work
with Excel, too?)

Programming is not just hammering away in [language], it's deconstructing a
problem into smaller, less complicated problems, to generify and abstract away
common properties to allow for repetition in similar contexts. It stimulates
efficiency, speeds up rote administration tasks, and allows the programmer to
learn something new each time he tackles a new problem.

More so, the writing of code should enlighten a person to write readable
functionality, as code is read, compiled code is executed. Using clear and
descriptive terms to state the moving parts in his solution, using verbs in
function names, not abbreviating unless absolutely necessary, are all tasks
that should allow for a person to better state his problem domain and its
intended solution.

~~~
throwawaymsft
> Programming is not just hammering away in [language], it's deconstructing a
> problem into smaller, less complicated problems, to generify and abstract
> away common properties to allow for repetition in similar contexts.

This is exactly what you learn in Excel. How to take some data, transform it
slowly (column by column), check your work, save intermediate results, etc.

In minutes you can go from your idea to some crude version of it. Then you
refine it.

Look, Excel is like LogoWriter. We're not asking people to design rockets with
it. But it's a hell of a lot better than sitting them in front of a terminal
and asking them to learn about variables, loops, print statements, etc. Excel
is type and go.

------
mathattack
The problem with calling coding "Literacy" is that it implies it's necessary
for everything else in life. It's not. Even 50 years from now, technology will
evolve to empower those who can't program. (One can argue that the advance in
technology has come from it being easier to use, not harder.)

That said, programming is a form of screening for IQ and rigor than perhaps a
Philosophy degree was in the past. People who can program are used to dealing
with Right and Wrong answers, difficult problems, and working around rules
that might seem wrong. It's a great skillset, but by no means mandatory.
(Neither is modeling) This is one reason why CS majors are in demand for a lot
of non-CS jobs.

------
teamhappy
I've thought about this just the other day. Most people here would probably
agree that teaching kids to code in school would be pretty cool (never mind
the usefulness of that for a second). I think one mistake we all make is
imagine a world in which everybody can and enjoys writing code as a result of
that. That makes no sense at all. A lot of people would probably hate it, and
even more obvious, most people would just forget. I've learned latin in school
( _don 't_ do that). Equus means horse, that's what I remember.

\---

BTW: We need higher-level languages on top of maths (that are not general
purpose programming languages) so that people can talk about complex processes
and what not.

~~~
yourad_io
> I think one mistake we all make is imagine a world in which everybody can
> and enjoys writing code as a result of that. That makes no sense at all. A
> lot of people would probably hate it, and even more obvious, most people
> would just forget.

I thought the idea of teaching kids to code is to show them that it can be
immensely rewarding and fun, thus encouraging those that "click" with it to
explore it further on their own.

As a guy who gets bored often, I consider myself to be extremely lucky to have
discovered a "passion" for computer-y things early on. I'm pretty sure I'd
have been bored out of my mind if I had pursued any other discipline.

Coding/Computing/... is the best game there is: we play "Simon^H^H^H^H^H Coder
Says" with machines all day long. We'll never completely win it, but the mini-
bosses along the way make it totally worth it. I feel like a lot of my
classmates would probably get it as well if they were guided into it, but
instead "computing class" was basically an MS Word tutorial. Something like
Logo (or Sketch, nowadays) would have been much more effective and fun.

If I had to teach high schoolers to code, I'd absolutely approach and present
it as a game ("Imagine if you were the benevolent dictator of the
universe..."). Because it is. It'll stick with some, it won't with others, and
as always - the delivery method will affect the outcome more than the actual
message (ever had a $SUBJECT_YOU_DISLIKED teacher that was so awesome that he
actually made you perform well in $SUBJECT that year?)

EDIT: forgot this:

> BTW: We need higher-level languages on top of maths (that are not general
> purpose programming languages) so that people can talk about complex
> processes and what not.

If it isn't evaluated/compiled, then we'll classify it under the "Maths"
nebula anyway. See mathematical logic/boolean algebra, etc.

~~~
teamhappy
I agree with every single paragraph.

Showing kids that coding is very rewarding and fun is great, as long as we
don't waste the other kids time for no real reason (that's a means-end
question and we're clearly biased, which is why I think this is so important
to consider).

2D games are a great way to learn about trigonometry and these kind of things,
no question about it.

It has to be a interpreted/compiled language, of course, otherwise it wouldn't
be useful at all. But that doesn't mean it needs to be Python. I wonder what a
modern-day Scheme would look like. Or maybe visual (think node-based)
programming would be more suitable.

~~~
yourad_io
> Showing kids that coding is very rewarding and fun is great, as long as we
> don't waste the other kids time for no real reason (that's a means-end
> question and we're clearly biased, which is why I think this is so important
> to consider).

But a major percentage of any educational process will waste time for every
student. Not the same parts for each student, but invariably there will be
some subjects that offer _you_ nothing, while they will trigger something in
other kids, e.g. Art. Coding class would hardly be the first to do this, nor
do I see any way around it in general.

------
hawleyal
Reading/writing and comprehension/composition are the same thing. The author
is just attributing specific meanings to those terms to draw superficial
semantic differences. Reading is just another word for comprehension.

Only a narrow view of reading would be limited to the physical act of moving
ones eyes across a page.

Similarly, the word coding is often used to describe a plethora beyond typing
if statements and for loops.

The author does have some good points despite this problem, but the entire
hypothesis is based on a weak argument of semantics.

------
mark_l_watson
Chris is correct that being able to model is a prerequisite for effectively
doing a lot of things, coding is one of them. Sort of like saying that schools
need to teach 'critical thinking.'

BTW, I especially like the section starting with the Alan Kay quote. I have
recently started (yet one more time) hacking in Pharo Smalltalk which is one
of the better programming environments for exploring code and understanding
it. I am sure that Chris was strongly inspired by Smalltalk when he created
Light Table.

------
puranjay
I have a BA and a MA in English (don't get your pitchforks out yet) and I'm
learning how to code.

I'm not doing this because I want to get a job as a coder. I do well enough
for myself with my existing business.

I'm learning to code because I see all these wonderful apps and products and
games and experiences, and I feel left out. I have tons of ideas. I just want
to see them come alive.

Whatever business potential these ideas have is just added bonus.

At the same time, even though I have been around computers since I was 10 and
know enough of math, logic and basic programming to pick up coding at a
competitive level, I do recognize that this isn't something "everyone should
do"

You _need_ to learn how to write and read because otherwise you can't write a
check or read a contract.

I doubt we'll come to a point where you will need to look at the source code
to run Word on your computer.

So no, coding really is not the 'new literacy'.

Coding is hard work, and 30 hours of Python will equip you to build nothing,
do nothing of note beyond looking at a Github repository and wondering "gee,
what kind of modules are those? And what's that fancy trick with objects?"

If you are going to do this, you'll have to buckle in and do the time. 3
months of intensive, 40 hours/week is the bare minimum dosage to build a
decent web app.

Multiply that by 10x to actually become an engineer and not just a programmer

------
ZenoArrow
There are all sorts of analogies we could use to explore this problem space,
but I'd say music is an ideal one. In music, the "material" for consumption is
sound and the tools for creation vary wildly, from the intuitive to the
complex, but the act of creation and consumption of music is open to us at
every level.

One detail that perhaps is overlooked with the popularity of Excel is that it
is visual. Not just by using a GUI to control its logic, but that the results
of changes are always made apparent. As an Excel beginner you might not know
why something is broken, but you can figure out that something you did was
wrong (logic errors can creep in, but can be minimised through breaking down
concepts to contain fewer points where assumptions are encoded). Knowledge is
then shared with other users in order to get Excel to perform as desired.

I'm rambling a little bit here, as I'm thinking out loud, but wouldn't an
ideal starting point for a better Excel be Excel with cell types? If you think
about it, a type system for Excel cells solves so many of the problems you get
from trying to use Excel at scale. I could elaborate if the potential
improvements are not obvious.

------
danso
I've been teaching programming to non-CS students at Stanford for the past
month...they're all clearly smarter than me. But what they lack, as does
virtually every non-programmer I've worked with, is the ability to (initially)
understand a for-loop.

It's not that they don't get that there is such a thing as a "loop", or that a
task can be broken up into iterations...they just don't know what it means to
design something that can iterate across a collection and, for each member of
that collection, perform a task on it. It's not merely not understanding the
syntax, or the overall result...it's not comprehending that you can design and
control such a thing.

I've worked with non-programming professionals in which I've taken a
repetitive task, such as extracting a bit of text from each page of thousands
of pages of documents, and boiled it down to a program that saves them days of
work. The effect of such a program is greatly appreciated...but time and time
again, these non-programmers are delighted/astounded when I perform the same
task in another scenario...what bothers me is all the times when I'm not there
to recognize how such a problem can be abstracted, and they dive in head first
into a meaningless, repetitive chore.

The abstraction of a task, so that it can be performed in a loop...it's so
fundamental that once you've done it, it's hard _not_ to think in those terms.
And I wish it were the case that very intelligent people could just _get_ it,
in the same way that those who've never played an instrument can at least
appreciate Mozart. But I just haven't seen it...we programmers take for
granted the ability to think in this profound way, and even though it's fairly
basic, as far as ComSci education goes, it really is a gamechanger in all
areas of life and work. This is why I think programming deserves consideration
as a kind of literacy.

Edit: To focus on something from the OP:

> _We don 't want a generation of people forced to care about Unicode and UI
> toolkits. We want a generation of writers, biologists, and accountants that
> can leverage computers._

Well, sure, if you boil coding down to "Unicode" and front-end web
development, then yes, it's not "literacy". In the same way that if I boiled
down traditional literacy to iambic pentameter and the debate between
prescriptive and descriptive linguistics, I could make a compelling case for
not learning to read and write.

Edit 2: I'm willing to consider programming as _not_ a new literacy, but
"just" a branch of math...but math practiced in a pragmatic, visceral way, not
in the tepid, abstract way that it is forced upon us in primary school. I do
think that programming is math, but with programming, you are actively
building and testing something using the principles of math. If there's a way
to teach that kind of math without programming, I'm game for it.

~~~
pwr22
Perl as a language has "unless" as a keyword and a lot of people, who are not
inexperienced with programming, have trouble using it at first. Some even
rebel against its use and claim they hate it

So it is interesting that even similar seeming things can still require some
time to internalise and comprehend

~~~
0942v8653
Am I missing something about this `unless` keyword? From what it looks like,
it's just syntactic sugar for `if not`, and it makes much more sense…

    
    
        (unless (string= a b)
          (fail))
        ;; much more readable than
        (when (string/= a b)
          (fail))

------
dmgarland
While the overall tone was a bit antagonistic for me, I tend to agree with the
premise of the title of this article. As someone who runs coding training
programs for adults, I don't think you can teach someone coding in a matter of
weeks, anymore than you can teach them Spanish in a matter of weeks. However,
if you're going to make coding your career, a course that covers the basics
and puts you on a good footing, especially if linked with work experience, is
the best way to embark on the learning and exploration that the author
discusses.

Nevertheless, I don't see why we could put say HTML in the same category as
Excel- why shouldn't everyone in the world be able to make a webpage? We teach
reading + writing, not to make everyone a journalist or a novelist, but so
that we can express our thoughts and communicate our ideas. HTML (and even
CSS) are basic enough for any professional to pick-up and are empowering
skills to learn; without relying on third-party means to publish your own
information on-line.

One last thing - in the UK, Excel is one of the skills listed under I.T.
apprenticeships, if you can find a company who offers that.

------
mszyndel
This article is deeply wrong. Literacy and universal schooling got masses of
people out of poverty because they were able to get more "advanced" jobs. Most
of them didn't have composition skills etc, yet at one point we had rows of
typists in every office of better part of 20th century (remember this job
requires just very basic skills centred around literacy).

Writing was art for a long part of human history but it's not anymore. Same is
going to be true for programming.

Nowadays programmers like to think about themselves as special, but in reality
the ability to write simple programs to process input and give output will be
just as a normal skill in the future as writing a report is now.

Programmers will only be as special as book writers are nowadays - just a
little better in putting words-code together so their work has bigger impact.

~~~
TheOtherHobbes
Programming and literacy are fundamentally different.

Programming is about building machines. It doesn't have to include modelling,
although some of the most useful machines do. (How much modelling was needed
for the HN code?)

Reading and writing are about sharing experiences, learning from them, making
moral judgements about them, and persuading, or being persuading by, fellow
humans.

Only people who don't understand either believe they're equivalent.

At best, programming makes sense if you teach it as a practical add-on to math
and strict logic. It has its uses there, although I'm sure that by the time
one of today's five year olds is enough to entire the job market, knowing
school-level Python and jQuery is going to be as useful as knowing BASIC.

Programming teaches you nothing about verbal or written comprehension,
allusion, metaphor, political and social history, or relationships of all
kinds.

Learning to read and write is the only way to start exploring that world.
(Video-making and photography give a taste of it, but they're still distanced
from it.)

Programming - which is carpentry and architecture for binary machines - lives
somewhere else entirely.

------
ilzmastr
Besides the title being pedantic, I feel this article is alienated from the
average person I know who is always modeling and dealing with symbols and
representations in the world, but less often takes a step back to realize the
practice of their modeling and to judge its efficacy.

To me, modeling seems equivalent to consciousness. To me cave paintings of
animals seem significant because they illustrate 41k yo humans creating
representations of their world (for mental practice, entertainment, ceremony,
who knows...), whether they realized their practice is another question.

But today, there are many people who model and recognize it, think of
manipulative salespeople/lawyers/cads, great fiction writers, constipated
philosophers and art/film/lit critics, scientists,
artists/architects/designers...

You don't __need__ any technology built after 1980 (or whatever) to explore
the world... Even thought experiments can shake an academic field (Maxwell's
demon, Schrodinger's cat, EPR paradox...)

I agree that there may be better tools to convince people to contemplate
environments and unpack/model/break down confusing things into collections of
simple theories than to send them to a liberal arts college (where this and
goofing off is really all there is to do in my experience)...

But programming is still the new literacy IMO. I feel like all the white
collar underpaid people I know could work 2-4 hours a day of their 10 hour/day
jobs if they wrote the most limited, banal, imperative script that abstracts
no concepts and in completely un-generalized (and therefore fails at
modelling). And I feel just this fact, that there would be a great liberation
of 1st world mankind's time if every non-programmer who uses a computer for
their job up and wrote a severely shitty program that automated some aspect of
their responsibilities, is enough to say that a coding is the new literacy.

Think of what kind of intellectual shift a machine-literate public that just
cut their work week in half would result in...

------
karols
For modelling to work generally (in most/all domains), you need some
underlying paradigm all these models can be translated into.

For excel, it's grid based dataflow, (for example, you can call it
differently).

I saw you tried dataflow already but stepped back from it.

So what paradigm are you trying to use for EVE?

------
Swannie
Let's assume reading and writing is to literacy as is suggested at the start
of the article. I think that's not too contentious. Given that, there's an odd
assertion in this article around Excel.

To quote the article: "We create models by crafting them out of material.
Sometimes our material is wood, metal, or plastic. Other times it's data or
information from our senses. Either way, we start our models with a medium
that we mold."

With literacy, that material is words.

When we start "modelling" with the written word, we first have to be able to
understand a vocabulary, sentence structure, and ultimately a paragraph and
narrative structure (beginning, middle, end). Normally this happens in the
spoken word way before we need to express this through writing. We are also
exposed to many, many, examples of paragraph and sentence construction in the
written word before we are expected to write anything more than simple
sentences. We first start writing by learning to express our vocabulary
(spelling), with simple grammar, then putting our ideas together into
sentences, paragraphs, and with narratives, and refine this modelling skill
over a lifetime.

With programming, that material is a programming language. When teaching,
ideas of programming should ideally be discussed - loops, conditions,
functions, variables, etc. Then move on to reading code - functions at a time,
long before a line of code is written. Something like Scratch seems to be
highly valuable for this, much in the same way that children have always had
games where they are expected to put the words into a sentence in the correct
order, usually before they are expected to be able to write the sentence
themselves.

For me the real disconnect, is that the material of modelling, the medium, for
programming, is a programming language and code. Excel is NOT the medium of
modelling for programming. Excel is a medium for modelling Excel. The
constraints in Excel help people understand... Excel. It won't really help you
understand data modelling, because the modelling you do is free-form. The
constraints of Excel are unique to Excel.

------
charlysisto
You could call this article UML editor vs text editor. What it may point out
would be the lack of a modeling tools. UML is old fashioned, java/entreprisy,
and new ones like omnigraffle aren't specifically targeted towards modeling
domains. Whereas text-editors are evolved, bright and shiny.

On a another level I agree that what's truly fascinating with programming is
not mastering the quirks of a specific language but translating an external
model to the shape of rules expressed in a language which has it's own
internal logic. Not just to have a static interpretation like painting or
literature would provide but a dynamic one which evolves with user and data
interaction.

This is really unique in human history

------
cykho
My advice has always been if you're not willing to commit 3 years full time to
coding don't do it. It just takes that long to be useful on a team. Instead,
focus on whatever area you want to excel at and leave the engineering to the
engineers.

------
evanwolf
In the late 1970s and early 1980s, domain-specific programming languages
sprung up. Languages for simulating economic systems, for a company's
financials, for modeling biological systems, and many more.

Now, in the twenty-teens, functional programming is gaining new traction as
developers learn that, at their core, they start with defining a domain-
specific language.

The tools for creating domain-specific models are orders-of-magnitude too
abstruse, complex, arcane, and difficult. If Eve can make creating and playing
with models even one-order-of-magnitude more accessible, it will help shift
much of programming up a layer of abstraction.

------
n72
I seem to remember some project (I think it might be a Microsoft Research
project led by someone famous) which has been going on for 10 years or
something like that which has the ambitious goal of doing something similar to
what I understand Granger to be doing, namely some kind of non-scripting
programming. Taking blocks of knowledge or computation or whatever and
arranging them in way intuitive to non-programmers. Anyone know the project
I'm talking about? FWIW, I think it's been mocked at various times for being
vaporware after even 10 years or whatever.

------
why-el
Good points from Chris, but of course this depends on where one is. Growing up
in a country that has shocking levels of illiteracy, I assure you that being
literate, even in its most basic form, is already a tremendous step forward.

If you see it in this light, the goal of the movement is clearer. The movement
is seeking that crucial, qualitative initial step and the rest is depending on
the person, the social env, and so on.

------
scott00
The author spends a considerable portion of the piece attacking a straw man.
As he mentions in the article, people who stress the importance of reading and
writing skills aren't merely advocating for the ability to transcribe speech
to paper and pronounce written text; they are also advocating for the
communication skills that are taught as part of a good literacy education.
Similarly, people who stress the importance of programming are not merely
advocating that people gain the ability to transcribe a perfectly detailed
spec into executable code, they're also advocating for the modeling skills
that give you the skills to write the spec.

His real point is that he believes teaching people modeling and computing
skills using Excel would be more useful than teaching them modeling and
computing skills using python.

Depending on the audience and the amount of time they have to dedicate to the
topic, I might agree with him. Many undergrad business programs, for instance,
require a course in Excel/VBA, which seems sensible. However, I think many
people who say things like "computing is the new literacy" think that
computing and modeling might be important enough skills that most people
should dedicate more than the equivalent of 1 semester in college to them.
They might instead suggest 3 semesters, or maybe even that high school
students take a computing course every year. And if he wants to replace all
THAT with Excel, I think I would argue that you've got enough time to add in
some python too.

------
squiguy7
Programming should be seen as a medium in which one can solve a problem. I
agree that people have been approaching the idea of "teaching code" wrongly.
At the end of the day, aren't the professionals trying to model their problems
and then apply their knowledge to make sense these immensely difficult
problems?

------
kazinator
Granger makes a strawman of the coding-as-literacy concept by focusing on
mechanical coding (as in "coding technician": someone who receives the
requirements for a subroutine and implements it without any imagination).

Someone exploring topics in computing in an interactive environment isn't
doing that.

~~~
ibdknox
I actually mention the magic of LISP and Smalltalk environments - they do
greatly add in the exploratory creation process. But my "coding as literacy"
strawman is born out by the industry: [http://code.org/](http://code.org/) and
[http://www.codecademy.com/](http://www.codecademy.com/) are great examples.
By saying you can learn to code by following through some online lessons that
teach you how to write some Javascript, we're doing people a great disservice.

Moreover, my real argument is that I don't think coding _should_ be literacy.
From the fundamental disconnect section:

> We don't want a generation of people forced to care about Unicode and UI
> toolkits. We want a generation of writers, biologists, and accountants that
> can leverage computers.

I don't think people should _have_ to worry about exactly what the computer is
doing if their problem isn't related to it. Specifically teaching general
purpose programming as we think of it now is largely teaching people to build
apps or command line tools. Instead of a generation that thinks of that as
computing, we need a generation of people curing cancer with it.

~~~
gavinpc
Chris, as someone who respects you and your work, I'm interested to know how
you would describe the "movement" aspect of coding-as-literacy. That's where I
began to smell a strawman (even if not intentional).

Follow the money: what is coding-as-literacy but a government-supported effort
to bring down the price of software developers, disguised as a public service
campaign? That in itself is a strawman, yet I suspect that in talking about a
"movement" we've taken for granted that leaders _within_ the field (such as
Alan Kay), and not just celebrities are advocating for this. Do you know of
any?

~~~
endergen
There is a strong 'movement' towards pushing this concept for sure. See
code.org pushed by Zuckerberg, and even used and promoted by the President:
[http://www.whitehouse.gov/blog/2014/12/10/president-obama-
fi...](http://www.whitehouse.gov/blog/2014/12/10/president-obama-first-
president-write-line-code)

------
skaplun
Coding is not the new literacy, it is the new masonry and we will all need a
place to live eventually

------
clueless123
Being able to read and write are the minimum skill you have to have to be
called literate. I think that the ability to write and read code is a minimum
skill for you to truly benefit from our new information society.

------
crdr88
What are some good resources ie) books to read on software modeling?

------
platz
I really hope this isn't going to devolve into an argument between top-down
and bottom-up methods

~~~
yourad_io
No, Vim is the best.

------
shamney
most people are not smart enough to be even mediocre coders

