[Edu-sig] what is ~fluent Python?

Mark Engelberg mark.engelberg at gmail.com
Tue Feb 2 18:42:03 EST 2016


On Tue, Feb 2, 2016 at 1:28 AM, kirby urner <kirby.urner at gmail.com> wrote:

>
> We remember that Scheme (PLT version in particular) came with "levels"
> i.e. one could actually set a global that predetermined which features
> would be usable.
>

In PLT, the notion of levels is primarily about giving meaningful error
messages.  (cons 1 2) is meaningful in full Racket, but for a beginner,
this is almost certainly an error.  All of the language levels, even the
so-called "advanced student language", are very minimalist in terms of
their feature sets, and there are really good reasons to teach programming
using a restricted set of language constructs.

My biggest concern about your Python "belt" system is that you present it
as a kind of checklist that students should strive to understand on their
way to mastering the language.  But most of the things on your list are
language features, not deep concepts, and I see that as a problem.  For
example, in PLT, I can take a student who knows only Intermediate Level
constructs (https://docs.racket-lang.org/htdp-langs/intermediate-lam.html),
and spend two years teaching him or her deeper and deeper problem solving
techniques, without ever introducing a single new language feature.  This
is where one's true strength as a programmer is derived.

I find it interesting that your subject line talks about "fluency", because
there's an analogy here to studying foreign language that you seem to have
missed.  In my experience, fluency has very little to do with how much
vocabulary you know.  When I study a foreign language, I'm pretty good at
memorizing new words.  But then I routinely meet people who know far fewer
words than I, yet are far more fluent, because they are better at using the
words they know to talk about whatever they wish, while I spend a
noticeable amount of time searching my brain for just the right word.
Going with that analogy, your belt list comes across as a series of
"vocabulary lists", but memorizing all that vocab isn't what's going to
make you fluent.  Better to learn how to express yourself with a restricted
vocabulary, better to learn how to think in the foreign language.

The PLT "list of things to master" would start out with things like:
writing functions to operate on atomic data, writing functions to operate
on structured data, writing functions to operate on collections,
understanding structural recursion, understanding generative recursion,
learning how to write well-tested code, etc.  Where are these things on
your list?

So, I encourage you to rethink your belt system in terms of concepts, in
terms of thinking and problem solving, in terms of fluency as it is defined
in foreign languages.  See
http://www.ccs.neu.edu/home/matthias/Thoughts/Growing_a_Programmer.html for
more ideas.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/edu-sig/attachments/20160202/ec270812/attachment.html>


More information about the Edu-sig mailing list