[Thoughts, Coding] What Does XYZ (Some Technology) Do?

Posted by Khatharsis on June 21, 2014

I have the sinking feeling I’m not keeping up with technology as much as I should when I hear of these frameworks/libraries/platforms/etc., visit their webpages, and am still left wondering what it does. More importantly, I am unclear on when I’m supposed to use it and for what purpose. I’m not sure if it’s a “just me” problem or if it’s also the fault of the developers. Or maybe it’s the fault of the developer culture?

I have dabbled a bit with this and that piece of technology in the past year or so. I covered jQuery, Node.js, and CoffeeScript in a 48-hour time period through Code School. Aside from jQuery, I have not touched them again. I’ve dabbled on my own with AngularJS, HTML5 Boilerplate, Twitter Bootstrap, Ruby on Rails, and Drupal. I have attempted to look at Ember.js, but didn’t get very far. I have read about, but not had a chance to dabble with PhantomJS. I have heard and/or run across gulp.js and grunt.js (and many others I do not recall at the moment) as they were referenced in another piece of technology’s article. Just today, I ran across the Web Starter Kit from Google.

Originally, I was referring to my list above as frameworks, but that was a liberal (and misleading) use of the term. As an exercise, I used Wikipedia to determine what kind of technology each of the above are classified as. If there wasn’t an entry on Wikipedia, I consulted the official project page. If I couldn’t figure out what it was from the page, I took a guess:

  • jQuery is a library.
  • Node.js is a server-side platform.
  • CoffeeScript is a programming language.
  • AngularJS is a web application framework.
  • HTML5 Boilerplate is an HTML/CSS/JS template.
  • Twitter Bootstrap is a front-end (HTML/CSS/JS) framework.
  • Ruby on Rails is a web application framework (MVC).
  • Drupal is a content management [system] (CMS) framework.
  • Ember.js is a client-side JavaScript framework.
  • PhantomJS is a headless WebKit.
  • gulp.js is a “streaming build system.”
  • grunt.js is a JavaScript task runner.
  • Web Starter Kit is a HTML/CSS/JS boilerplate project/template (??).

So, I’ve got a library, a platform, a programming language, a handful of different types of frameworks, a template, a “headless WebKit”, a “streaming build system”, and a “JavaScript task runner”. And something I don’t even know how to describe (Web Starter Kit).

When I first ran across PhantomJS, I spent some time figuring out what was meant by a headless WebKit and by the time I understood it (and what you could do with it), I wanted to play with it. I haven’t quite figured out what a “streaming build system” or “JavaScript task runner” is yet. (I have a tendency to think too much and I’m sure this is an example of me thinking too much when accepting at face-value is easier and more straightforward.)

But I see these pieces of technology being thrown around on articles for web development as well as on job listings. It bugs me when I run across a new piece of technology, get curious and go to the project’s website to find out more, and they describe themselves broadly (e.g., a framework) or in some obscure way (e.g., a streaming build system). And the worst part? A quick skim of the website doesn’t provide me with any sense on what it does, what its purpose is for/what problem it solves, and/or when it would be used.

I often have to go dig in GitHub or equivalent for the documentation/FAQ, which may or may not be sufficient for me. Then I have to go consult 3rd party websites, which again, may leave me scratching my head. Depending on how quickly I can understand the purpose of a technology, I’ll either understand it and move on, or I’ll get bored and drop it, only to pick it up again to try to understand it when I see it being mentioned/used in another article.

I recognize there might be a PEBKAC (user error), but also that developers are throwing around fancy words to try to distinguish their technology from others. If I’m being referred to the project webpage, I really should not have to go into GitHub to figure out what the project does, what its purpose is, and when it would be used. Otherwise, do away with the website and make GitHub the main point of reference. (Of course, navigating GitHub is another kind of frustration for me.)

I don’t think pointing fingers at any one source of error will lead to significant productivity. Maybe as developers, we need to figure out how to take a step back and ask if the tagline is clear enough across a broad spectrum of potential users. And for guidance, if three times isn’t enough, how about a fourth: describe what the piece of technology does, what the purpose of the technology is for or what problem it solves, and when a user would use it. And a bonus: instead of pointing to companies that use technology XYZ, give [practical] examples of when the technology would be used to better illustrate its purpose.