Slashdot Mirror


Learning To Program Is Getting Harder (slashdot.org)

theodp writes: While Google suggests that parents and educators are to blame for why kids can't code, Allen Downey, Professor at Olin College argues that learning to program is getting harder . Downey writes: The fundamental problem is that the barrier between using a computer and programming a computer is getting higher. When I got a Commodore 64 (in 1982, I think) this barrier was non-existent. When you turned on the computer, it loaded and ran a software development environment (SDE). In order to do anything, you had to type at least one line of code, even if all it did was another program (like Archon). Since then, three changes have made it incrementally harder for users to become programmers:
1. Computer retailers stopped installing development environments by default. As a result, anyone learning to program has to start by installing an SDE -- and that's a bigger barrier than you might expect. Many users have never installed anything, don't know how to, or might not be allowed to. Installing software is easier now than it used to be, but it is still error prone and can be frustrating. If someone just wants to learn to program, they shouldn't have to learn system administration first.
2. User interfaces shifted from command-line interfaces (CLIs) to graphical user interfaces (GUIs). GUIs are generally easier to use, but they hide information from users about what's really happening. When users really don't need to know, hiding information can be a good thing. The problem is that GUIs hide a lot of information programmers need to know. So when a user decides to become a programmer, they are suddenly confronted with all the information that's been hidden from them. If someone just wants to learn to program, they shouldn't have to learn operating system concepts first.
3. Cloud computing has taken information hiding to a whole new level. People using web applications often have only a vague idea of where their data is stored and what applications they can use to access it. Many users, especially on mobile devices, don't distinguish between operating systems, applications, web browsers, and web applications. When they upload and download data, they are often confused about where is it coming from and where it is going. When they install something, they are often confused about what is being installed where. For someone who grew up with a Commodore 64, learning to program was hard enough. For someone growing up with a cloud-connected mobile device, it is much harder.
theodp continues: So, with the Feds budgeting $200 million a year for K-12 CS at the behest of U.S. tech leaders, can't the tech giants at least put a BASIC on every phone/tablet/laptop for kids?

1 of 408 comments (clear)

  1. It's the abstraction that makes it hard by ErichTheRed · · Score: 5, Interesting

    Ironically, the hardest thing I can think of for a _total_ newbie is drilling down through all the layers of abstraction to show what actually happens. I'm in IT and infrastructure-as-code is the same way. We have a nice easy way to program things, but it's so divorced from something that actually happens. Everything new lately has been a layer on top of another layer with the hope that it will make things easier.

    An example from my world is Azure Resource Manager. At the core, it's a RESTful API that takes in JSON configuration files and tells Microsoft's cloud back-end what needs to be configured. ARM is almost a language in its own right, and it's nearly impossible to write configuration files without some guidance. So, someone at Microsoft wrote a Node.js wrapper on top of ARM that I found out about the other day (Azure Building Blocks.) So, you have an ARM framework, written in a JavaScript framework, sending commands via insert-your-language's SDK to a RESTful interface that hides unfathomable levels of complexity behind it!

    The push to wrapperize everything is going to get to a point where some levels of complexity are permanently locked away. People who are totally new and starting out at Node.js or a similar framework will be able to make things work, but they won't know _how_ they work.

    I'll make one "get off my lawn" statement -- we've overloaded HTTPS to perform way more duties than it was ever designed to do, and chosen to write applications in browsers running JavaScript, which was also never meant to do anything nearly as complex as it does. This is why you have the endless parade of new frameworks, wrappers, etc.