1. 13
  1.  

  2. 2

    read the vocabulary – what do these words mean?

    Whatever the programming language’s semantics say they mean.

    see the state – what is the computer thinking?

    Nothing! Computers don’t think.

    The create-by-reacting way of thinking could be stated as: start with something, then adjust until it’s right.

    Is this guy seriously considering depriving people of the joy of crafting their own beautiful algorithms? It is admittedly a lot of work, and not everyone’s cup of tea, but why deprive people of the chance to even try it?

    We expect readers to understand code that manipulates variables, without ever seeing the values of the variables. The entire purpose of code is to manipulate data, and we never see the data.

    Working in the head doesn’t scale.

    Mutually inconsistent complaints. It is precisely by not fixing values for your variables that you can prove that something works for any possible value. And this is precisely the only technique that automatically scales to infinitely many cases using a finite amount of reasoning.

    1. 2

      Is this guy seriously considering depriving people of the joy of crafting their own beautiful algorithms?

      I believe his thesis is that people learn crafting algorithms by reusing other algorithms and adjusting them. Any program starts as the Hello World algorithm and is then adjusted into something different.

      1. 1

        That’s not how I understood him. What he literally said is:

        start with something, then adjust until it’s right.

        This isn’t about code reuse. It’s about trial and error.

      2. 1

        Cherry picking straw man sentences does not a point make.

        Why not address his two bolded thesis statements at the top of the post?

        Programming is a way of thinking, not a rote skill. Learning about “for” loops is not learning to program, any more than learning about pencils is learning to draw.

        People understand what they can see. If a programmer cannot see what a program is doing, she can’t understand it.

        Pretty sure his first sentence nullifies your caricature of his position. He does not advocate divorcing the the thinking from the doing, but rather unifying them so that one can think and do, and one’s doing influences the thinking in a virtuous cycle, aided by the programming tools at hand.

        The rest of his post goes on to show a few (but not the only!) ways the tools can aid in the visualization of the program execution, thereby helping the programmer understand just exactly how their program is actually being interpreted by the computer.

        If I can summarize his position (and my interpretation of yours), it’s that Brett Victor believes people think and learn differently, and teaching students in a purely abstract symbolic manipulation without ever seen the concrete effects of their code is not going to be effective for all.

        Your counter argument is that coding is symbolic manipulation, and making abstract concepts concrete does not help, but rather hampers an individual’s ability to internalize what’s happening and inhibits the building of a mental model that allows working with the program abstraction. Or did I misrepresent what you’re trying to say?

        I don’t actually think you two are in conflict at all. Brett is talking generally, whereas you’re being very specific about algorithmic development. Surely you don’t believe teaching children to program should begin with the same verbosity and tools as those used by working professionals?

        1. 1

          Nothing! Computers don’t think.

          That’s a very narrow minded way to think about thinking.