Hacker News new | past | comments | ask | show | jobs | submit login
Learning to Program Is Getting Harder (allendowney.blogspot.com)
17 points by _ttg on March 18, 2020 | hide | past | favorite | 11 comments



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.


> 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.


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.


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`.


If you start programming by installing Visual Studio, you are presented with an overwhelming number of choices about what to install! Would a beginner know what choices to make?


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.


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.


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

Most of these are doable with pdb though.


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.


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.


Cloud9 is nearly perfect for quickly unblocking a student with a Windows machine.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: