Mental models of programs [was A few notes on choosing between Go and D for a quick project]
Paulo Pinto via Digitalmars-d
digitalmars-d at puremagic.com
Thu Mar 19 02:01:43 PDT 2015
On Thursday, 19 March 2015 at 08:17:42 UTC, Russel Winder wrote:
> On Wed, 2015-03-18 at 13:27 +0000, CraigDillabaugh via
> Digitalmars-d wrote:
>>
> […]
>> There is quite possibly something too that, and as I imagine
>> with more functional experience it will come easier to me.
>>
>> However, I still think imperative code is generally easier to
>> reason about because (usually) each line of code is performing
>> a single task, whereas with functional coding the goal seems
>> to be to cram as many operations as possible into a single line
>> (I know that isn't the real reason, it just seems that way at
>> times). Trying to 'unroll' everything in your head can be a
>> challenge. Throw in a lambda function or two with
>> the mess of braces/symbols and then you have a real puzzler.
>
> Each imperative statement may (or may not) be easier to
> understand,
> but the problem is putting them together in combination. The
> issue
> here is creating chunks on which you put a label for reasoning
> with.
> Everything is about the abstractions you reason with. A person
> who is
> familiar only with C-style programming (as per OPs code
> fragment) has
> built up various abstractions, but they are nonetheless at a
> very low
> level and so many have to be combined.
>
> Someone who has learned the internal iteration abstraction and
> higher-
> order functions is actually working at a higher level of
> abstraction
> and generally needs to combine fewer things to achieve the
> overall
> goal. Cramming operations on a line is nothing to do with the
> abstractions, that is to do with some people playing code golf.
>
> If you find yourself reading declarative style code and having
> to
> unroll to imperative equivalent to understand, it just means
> you have
> not yet internalized the declarative abstraction yet into your
> mental
> model and personal programming language.
>
> There is a lot of work on all this sort of stuff in the
> psychology of
> programming research literature. We can speculate all we like
> here
> based on personal experience and anecdotal evidence, they do
> experiments and have real data. Of course if you see any
> experimenting
> on first and second year undergraduates of computer science,
> ignore
> the results. I am talking about those who experiment with
> practicing
> programmers, people with real experience and expertise.
I just saw a talk of one of those studies.
One of the points was that curly braces languages lead to more
bugs than languages that follow the Algol more verbose style.
CodeMesh 2014 - Andreas Stefik - The Programming Language Wars
https://www.youtube.com/watch?v=mDZ-QSLQIB8
Quite interesting when one mixes psychology research with
language features, backed by validated research data.
--
Paulo
More information about the Digitalmars-d
mailing list