Hacker News new | ask | show | jobs
by hnfong 1300 days ago
I'm not sure I understand what's missing in python compared with BASIC.

Sure, you can teach students to write `print(" ".join(str(x) for x in range(1, 11)))` to print numbers from 1 to 10... but you don't have to do that. In fact, `X = X + 1` works just fine. The old school BASIC style like `X = 1; while X <= 10: print(X); X = X + 1` still works in python. (sorry for the lack of indentation)

What am I missing? (besides the misguided social expectation that you need to teach the fancy generator stuff to a total beginner...)

1 comments

That's a good question. What I'm thinking of (revealing my age) is something more like:

    10 LET I = 1
    20 PRINT I
    30 LET I = I + 1
    40 IF I <= 10 THEN 20
    50 PRINT "DONE"
And because BASIC really is that primitive, you can talk about what each line of code is doing, without too much fiction. The mental virtual machine is not radically different from the real machine.

The teacher would draw the variables as boxes with numbers in them, and update the numbers in the boxes with the eraser and chalk (further revealing my age).

In contrast, Python starts with everything is an object, with properties and methods...

But I agree about the fancy generator stuff. I think you can teach Python in the same fashion by limiting yourself to a few basic (sic) features, and adopt the same virtual machine fiction while remembering that it's a few more layers of abstraction away from reality.

  40 IF I <= 10 THEN 20
Do mean "GOTO 20"? Because if you don't that line either makes no sense or has a "magic" implicit goto that has to be explained. Assuming you meant that as a loop then the equivalent in Python is hardly difficult to understand:

  i = 1
  print(i)
  while i <= 10:
    i = i + 1
  print("DONE")
Same number of lines of code, `while` has a clearer meaning than the magic of your goto-less line, and is still somewhat clearer (more comprehensible control flow) than the goto version of that line. The only missing thing is the explicit line labels, but that can become a presentation format when discussing the code. Every editor you'd start a student with can show line numbers (and many show line numbers by default).

You don't have to start with "everything is an object", but you will get there quickly. Teaching procedural programming centered on numbers and strings and basic control flow in Python is not a challenge for a competent teacher. And then the language can grow with the learner as they gain understanding of computing and programming.

Indeed the GOTO was implicit. Putting other things after THEN came later, as did the while loop.
Properties do change things because they change the data representation, but i.print() is really no more complex than print(i).