
Learning to Program Is Getting Harder - _ttg
http://allendowney.blogspot.com/2018/02/learning-to-program-is-getting-harder.html?m=1
======
ssivark
I think this is fundamental point, related to yesterday’s discussion about the
need for “transparent” computing tools, which can be used in a “convivial“
fashion — custom shaped by users to match their own needs. Humans have always
used technology in this manner till the industrial revolution and the use of
machines to scale production meant inflexibility of the product. IMHO, the
next step of progress should involve ways to give back the flexibility while
keeping the power of modern engineering. Software makes this easier to do than
hardware, since experimentation and cloning are particularly cheap — so
“software eating the world” should hopefully find ways to give power back to
the users.

In the urge to make interfaces “simpler” by dumbing them down (appealing to
the lowest common denominator), we have lost sight of the importance of
ramping up novices into power users rather than having them stagnate and
atrophy. Yes, there might be a learning curve, but keeping it gradual and
steady can allow users to reach great heights! In what seems like an eternity
ago, it is difficult to put in words the _freedom_ I felt as a college student
when I first moved from Windows to using Ubuntu — for the first time ever, I
had the freedom to shape my own computing experience, rather than accepting
the straight jacket I was given. Two other examples that I have less
experience with, but am quite fond of include Emacs and SmallTalk. There’s a
lot that can be learned (at least philosophically, if not technically) from
the passionate love inspired by these examples.

The user/programmer divide is a symptom of yet another sharply increasing
“inequality”. We need to think about it in fundamental terms, and can’t solve
the problem just by making “coding” appear cool. It’s not enough to have
references and guides, because all those only make sense once you’ve crossed a
knowledge barrier. They contribute to a shitty on-boarding experience.
Focusing specifically on teaching programming is missing the point, IMHO. No
amount of teaching (artificially structured) can ever be as good as a platform
that enables people to gradually learn and adapt at their own pace. The human
mind is enormously capable of learning with experience.

~~~
scroot
> The user/programmer divide is a symptom of yet another sharply increasing
> “inequality”. We need to think about it in fundamental terms, and can’t
> solve the problem just by making “coding” appear cool. It’s not enough to
> have references and guides, because all those only make sense once you’ve
> crossed a knowledge barrier. They contribute to a shitty on-boarding
> experience. Focusing specifically on teaching programming is missing the
> point, IMHO. No amount of teaching (artificially structured) can ever be as
> good as a platform that enables people to gradually learn and adapt at their
> own pace. The human mind is enormously capable of learning with experience.

Right now we don't have the right environments for regular people. The
operating systems they use are locked in and the main parts of the system they
manipulate give users no hint at all about how to easily change things
"computationally". For example, a user cannot easily create a button that does
something (either by example or by a comprehensible scripting language), and
then leave that button on their desktop. That's pretty absurd given how much
normal interaction for them comes in the form of buttons. And that's just one
example.

------
putroce
I think a big issue is where the average programmer begins his journey. If you
start with visual studio and all you have to do is click “build” or “run” and
all the magic occurs in the back, of course you’ll be lost later on. If you
start with C and have to write Makefiles or compile simple programs on the
command line, you’ll learn much more and probably won’t run into this later.
It’s tough to understand what’s going on when so much is happening behind the
scenes.

~~~
nesarkvechnep
At the same time you would want to see results as soon as possible because,
and I know that from personal experience, at first you shouldn't care about
makefiles, pointer arithmetic and actually most of the things a C programmer
should care about. I would encourage everyone to learn problem solving before
`make`.

------
eindiran
I can sympathize with some of the points in the article, but personally it
seems like it is easier than ever to learn to program:

* There are definitely more resources now than ever before, many which are available for free online and are accessible 24/7\. Most questions you can think to ask for a beginning programming task have been asked dozens of times on Stack Overflow.

* For many programming languages, there are web-based interpreters (see: repl.it, godbolt, etc) and/or easy-to-install bundled platforms (things like R Studio). Many programming languages have installers for Windows, macOS, and Linux that work well via a GUI. And once a learner has overcome the fear of opening up a terminal, package managers are easier to use than ever before. So my personal experience has been that installation is easier now than in the past, but perhaps others will disagree (as it seem the author does).

* Running VMs (and installing OSes from scratch) is easier now than ever before. I remember how difficult installing some Linux distros was 10+ years ago. Installing Ubuntu is mindlessly easy now - just follow the instructions in the wizard. There are pre-built images for most VM software and on all cloud platforms that means you can get a machine up-and-running while knowing next to nothing about system administration. Recently I got a DO droplet spun up with Ubuntu 18 in less than 10 minutes from wanting it, and almost everything was handled for me. Linux does come with a lot of programming tools preinstalled, which gets around some installation worries of the author.

I do think it is getting harder to understand all layers of a software stack
(and there is more information to know now), but just getting up-and-running
with a single programming language is easier than ever.

One caveat about my first point: I see more and more top questions on
StackOverflow or programming tutorials that use syntax that is out-of-date (or
use packages that don't exist anymore). But this has always been a problem,
and its more a visibility thing in my opinion.

So ultimately, my point is that the "Embrace the future" and "delay the pain"
options are very natural for the new programmer learning today. As such, they
will have more experience and confidence in the software world before they
need to muck about in the sysadmin world, and by then picking up some system
administration skills will be much easier.

------
Sohcahtoa82
I keep kicking around the idea of creating a website that teaches Python that
starts with guiding you through the installation of PyCharm and the Python
interpreter, and really teaches how to properly use the debugger.

Things like recursion, something a lot of new people struggle with, is about a
million times simpler to understand if you step through the code in a debugger
and can visually see the call stack and local variables.

It honestly kind of blew my mind that I went though college and got a degree
and never once was taught how to use breakpoints and the Step In/Step Over/Run
to Cursor/etc buttons that every GUI debugger offers. I figured them out on my
own, but I recently had a co-worker who insisted on only using vim to write
some Python and he had a bug that he just couldn't squash. I was looking over
his shoulder and couldn't figure it out either. But once I got a copy of his
code and set a breakpoint in PyCharm and saw exactly what was happening, I had
it fixed in minutes.

~~~
RMPR
> how to use breakpoints and the Step In/Step Over/Run to Cursor/etc

Most of these are doable with pdb though.

------
RMPR
The three options aren't mutually exclusive imo, so the students can start
right away with cloud resources before getting in more serious things which
will teach them how it works under the hood.

~~~
bynkman
I've had courses and classes which make sure that the students have everything
installed that they need. And sometimes they also provide some sort of web
interface to enter code.

Overall I completely understand where the author is coming from. It used to be
that you could easily pick up programming in Basic, since it was installed by
default. Now, not so much.

