The Great npm Debacle and how Programmers Forgot to Program
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:
This is a fascinating situation. How one developer broke Node, Babel and thousands of projects in 11 lines of JS https://t.co/d9l2wPbIHz
— Jasna Todorovic (@JasnaTod) March 23, 2016
I laughed it off as a problem with package management distribution, but later Scott Hanselman tweeted an article that got me thinking:
Yep. An 11-line PACKAGE. 11 lines. "Have We Forgotten How To Program?" /via @haneycodes https://t.co/MjEUj3NXQK
— Scott Hanselman (@shanselman) March 23, 2016
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.