hckr.fyi // thoughts

The Great npm Debacle and how Programmers Forgot to Program

by Michael Szul on

By now, many of you have probably heard of the great npm debacle that brought several JavaScript frameworks and libraries to their knees. As a short synopsis, developer Azer Koçulu came into conflict with the Kik messaging app because of a node module of the same name. The NPM organizations administrators eventually pulled the Kik module, taking the namespace from Koçulu. Upset at the governance, Koçulu unpublished all of his npm modules. One of these modules, left-pad was a dependency in thousands of applications, most notably the JavaScript framework ReactJS, and the JavaScript transpiler Babel.

I was first alerted to the situation on Twitter by the following tweet:

I laughed it off as a problem with package management distribution, but later Scott Hanselman tweeted an article that got me thinking:

Have we forgotten how to program? Well, it depends on what you call a programmer. When I started in web development, HTML was coded by hand, content management systems (CMS) didn't exist, JavaScript and CSS programming required tests and hacks to get them to work cross-browser, and any dynamic functionality came from CGI, whether a Perl script or a Java class. Web development was hard. Web development required you to understand what you were doing, and again, that's just web development; it doesn't even speak to traditional programming.

The left-pad module is eleven lines of code:

module.exports = leftpad;
    function leftpad (str, len, ch) {
      str = String(str);
      var i = -1;
      if (!ch && ch !== 0) ch = ' ';
      len = len - str.length;
      while (++i < len) {
        str = ch + str;
      }
      return str;
    }
    

Despite the brevity, I can almost guarantee that a large portion of people labeling themselves as web developers cannot understand those eleven lines.

At a previous company, we had a term for people who weren't actually programmers, but they would download free scripts from the Internet, modify them, and get some semblance of a web app or piece of functionality working. We called them script kiddies. More recently, a co-worker of mine (Allison Ruffner) introduced me to the term plugin popper.

The sad fact is that many of today's "web developers" have very little programming experience or knowledge. They manage a WordPress or Drupal instance, download and configure plugins, whether for the CMS or for jQuery, and take advantage of pre-built libraries in place of understanding the underlying technology. They hide behind frameworks and GitHub Gists. Many of them might know web design, usability, and quite a bit of CSS, but basically many of today's web developers in various institutions were front-end designers who started managing CMS applications, working with JavaScript through the various available frameworks. Sorry to sound bitter, but that's not a programmer.

So have programmers forgotten how to program? Probably not, because many might not have been programmers to begin with. I'm not trying to start a flame war about what constitutes a real programmer, but I think it's important for our industry to distinguish between people who are exclusively front-end people and dependent on applications and tools, and those that actually build those applications and tools.