2140: Reinvent the Wheel

Explain xkcd: It's 'cause you're dumb.
Revision as of 04:12, 16 May 2019 by Observer of the Absurd (talk | contribs) (Explanation)
Jump to: navigation, search
Reinvent the Wheel
Right now it's a bicycle wheel, so we've had to move to lighter vehicles, but the reduced overhead is worth it. There was one week when a wheel of cheese got dangerously close to the first page, though.
Title text: Right now it's a bicycle wheel, so we've had to move to lighter vehicles, but the reduced overhead is worth it. There was one week when a wheel of cheese got dangerously close to the first page, though.

Explanation

Ambox notice.png This explanation may be incomplete or incorrect: Created by a WHEEL OF CHEESE. Second paragraph needs to be expanded. Do NOT delete this tag too soon.
If you can address this issue, please edit the page! Thanks.

"Reinventing the wheel" is an idiom/metaphor that refers to duplicate effort to recreate something that has already been created or perfected previously without adding any value in the process. The phrase relates to the idea that the round wheel was invented a long time ago and there is no way to make it better, as a circle is the most optimal shape. While the phrase includes the word "wheel", it isn't typically directly associated with the wheel but instead uses the word "wheel" because of the easily understandable meaning - a simple object with no improvements that can be made. That being said, we have actually reinvented the wheel at one point in time - a tire is a modern improvement to the wheel, which reduces bumps and shocks that people in the car would feel from uneven road surfaces.

In this comic, Beret Guy works for an automotive company (or this is his own company), and he is explaining to Ponytail their decision to not reinvent the wheel for the automobiles that they produce, using the phrase in a literal sense instead of figuratively. Instead of determining for themselves what wheel to use, they want to use whichever wheel is presumably considered the "best" wheel by the world, using a daily Google image search for "wheel" to determine the highest ranked wheel, and then using that wheel on the vehicles they produce that day.

The point of the comic is to make fun of programmers who take the idea that you should never reinvent the wheel too seriously. When these people have a problem, they may Google to find a solution to that problem, and when they find a piece of online code, they use it in their own code, even if it wasn't initially designed to handle the task for which it is being used and thus may have unintended side effects or other issues.

Another way that programmers may go too far in avoiding reinventing the wheel is in using external dependencies. It can be valuable to use external libraries, especially for applications where certain tasks have strange edge cases that a 'reinvention' is likely to miss or require lots of development effort to correctly implement (like time). However, using someone else's code means taking on the risk of security vulnerabilities, and when the library is updated on live installations, the user also takes on the risk that the library might become unavailable or otherwise break. In this case, Beret Guy's company updates their wheel "library" on a daily basis from Google's image search. Google is unlikely to shut down a core search product, but they might change the API that Beret Guy's company uses (unless he's just going to their website himself), and they have been known to shut down projects that people like, such as Google Reader. On the day this comic was released, Randall changed the Header text of xkcd, adding a reference to Google Reader.

The popular programming language "Python" manages external dependencies with packages called "wheels" which are "published to the cheese shop", which may or may not be an intended reference.

In any event, Beret Guy is in effect reinventing the wheel by doing a new search for wheels on Google Images every day. If the wheel he finds on Google Images on a given day is suitable for his company's needs, the company would likely be better off using the same wheel on succeeding days (unless circumstances change which make that unfeasible), compared to trying to doing a new search for wheels every day.

The title text indicates that Beret Guy is currently using bicycle wheels for his vehicles, requiring his vehicles to be lighter as bicycle wheels cannot carry a lot of weight. He says this "reduce[s] overhead", which is both literally true, that his vehicle weighs less, and refers to the usual figurative desire of reducing overhead costs of development by using external libraries. Finally, the narrator (supposedly Beret Guy) explains that at one point a wheel of cheese was near the top of the Google images search. If it had reached the top, it would have been disastrous as a wheel of cheese is completely unsuited for use as a vehicle's wheel.[citation needed]

On the day the comic was released a bicycle wheel came up first when searching for "wheel", see image in the Trivia section below.

Transcript

[Beret Guy is talking to Ponytail.]
Beret Guy: We don't want to reinvent the wheel, so every day we Google image search "wheel", and whatever object comes up, that's what we attach to our vehicles.
Beret Guy: Sure, external dependencies carry risks, but so far they've all been pretty good wheels.

Trivia

  • On the day this comic came out a Google search on Wheel would in some cases have a bicycle wheel at the top:
2140 Reinvent the Wheel Google Search Wheel.png
  • The JavaScript development community has had several security and reliability incidents caused by over-dependence on automated package updates. In 2016, a JavaScript developer un-published several libraries (including one "library" which was just an eleven-line function for padding strings, which was nevertheless included in thousands of projects and downloaded millions of times a month) from the npm package repository. This broke projects that depended on them and, until npm un-un-published his packages (with new maintainers), also opened the possibility that a bad actor could register malicious projects under those names and hijack all of their dependents. In July 2018, an attacker gained access to the npm account of an ESLint maintainer and published malicious versions of their packages, and in September 2018, the event-stream library was taken over by a malicious maintainer who added code to look for and steal bitcoins from the users who installed it.


comment.png add a comment! ⋅ comment.png add a topic (use sparingly)! ⋅ Icons-mini-action refresh blue.gif refresh comments!

Discussion

I took a screenshot of google image search at 2:24 PM ET on 4/22/2019, and a bicycle wheel is indeed the first result. I'm trying to figure out how to get my image into the wiki ;p 162.158.78.82 18:25, 22 April 2019 (UTC)

(same user) Man! I found an old account I made and logged in with it to upload a file, but it says I need special permission to do so! Baffo32 (talk) 18:33, 22 April 2019 (UTC)
If somebody with permission could upload this, it would be great: https://ipfs.io/ipfs/Qmf1a9NFFAcgWRUe45Ueg4FggXTUAd9BHMgEqWp23izchU Baffo32 (talk) 18:43, 22 April 2019 (UTC)
I get this (in the UK, using Google UK, and same result in a fresh Incognito session): https://www.makerlab-electronics.com/product/65mm-rubber-wheel-blue/ It looks like a decent wheel, albeit probably a bit small for most uses 141.101.99.11 22:41, 22 April 2019 (UTC)
Here it is on imgur: https://imgur.com/a/8nHemgW Baffo32 (talk) 19:38, 23 April 2019 (UTC)
Added the image to a trivia section, and links to it from the explanation. --Kynde (talk) 13:59, 24 April 2019 (UTC)

I looked for a cheese wheel by searching wheel but couldn't find any. there was, however, a roulette wheel 172.68.47.72 20:41, 22 April 2019 (UTC)

Looks like beret guy is working for an automotive startup, possibly one of the many software companies that are developing AI for self-driving cars? It is true that tires are made by outside suppliers (not by the auto companies) so in terms of software development tires could be called "external dependencies". However, tires are far from a semi-random selection as intimated here. A large amount of time and effort is spent developing special tires for each vehicle model to give the best possible compromise between many conflicting requirements such as: dry/wet/snow traction, noise, ride, wear, high speed durability (for high performance cars) and so on, the complete list has many more items.

If Randall is looking for new tires for his vehicle, I offer my standard recommendation: If you were fairly happy with the tires that came with the car, try and replace them with the closest possible equivalent to take advantage of the original development effort. This is not always possible, and of course if you are using the vehicle for a special purpose (mostly drive on dirt roads, use your car in weekend autocross competition, etc.), you may do better with something different.162.158.75.58 18:36, 22 April 2019 (UTC)

This comic could also be talking about coding, where reinventing the wheel is writing your own code from scratch, as there is other code which works perfectly well. This makes particular sense as the "external dependencies" could be in terms of code as well Gollum (talk) 18:45, 22 April 2019 (UTC)

I think the point is that their company is having to reinvent their cars to fit each dependency wheel, rather than develop a wheel that will fit their preexisting car. For cars, wheels are for the most part interchangeable, but external dependencies in software are very much not so. 108.162.229.100

I suspect this is a comment on JavaScript (JS) coding for the web, specifically the NPM node.js package manager. I'm not a front-end Web developer, but apparently lots of web pages use NPM to pull down dependencies, bits of code to accomplish some task, rather than write it new (thus, avoid 'reinventing the wheel'). The problem is there's poor control over what those dependencies do and how they might get modified on you unexpectedly. See the Wikipedia article on NPM for some history of bad breakages that have occurred.

I second this comment as being the key to the explanation. Especially when your external dependencies are also hosted on sites that you don't control; any functionality that you depend on can be replaced at any time, analogous to swapping out a sedan's tire for a bicycle tire. 108.162.215.202 20:03, 22 April 2019 (UTC)
thirded. googling a solution to your coding problem and then implementing it (as a third-party library or as code directly) is very much as described in this comic. yay, randall! --162.158.154.241 09:39, 23 April 2019 (UTC)

The point of the comic is likely that the term "Reinvent the Wheel" is not typically used in a literal sense to refer to actual wheels, as it is in this comic. Instead, it usually refers to exerting effort on something that adds no value over re-using something that already exists, whether it's a product's design or something intangible like an idea or study. We could probably provide a link to the Wikipedia article on the topic to help readers who are unfamiliar with the phrase. Ianrbibtitlht (talk) 19:38, 22 April 2019 (UTC)

I don't have a problem with the explanation mentioning that the comic might be making some statement about software developers carelessly using code off the Internet, but I'm not sure we can say with such certainty that this IS the point of the comic, as it currently states. I certainly don't get any indication that it's specifically about JavaScript. I think Randall just thought the phrase "Reinvent the Wheel" would be funny if he had a character using it literally, and anything deeper than that might just be our own personal issues. Ianrbibtitlht (talk) 22:32, 22 April 2019 (UTC)

There is nothing in the comic that's specifically about JavaScript, although the issues with NPM are a good example of what can happen more generally in other environments. But the terms "external dependencies" and "reduced overhead", plus looking for wheels on Google and the title text mentioning reinventing the vehicle to fit the wheel, to me are a clear sign that this is an analogy for software development. 172.69.226.195 02:28, 23 April 2019 (UTC)

"That one time a wheel of cheese got dangerously close to the front page" - Is this a reference to that time SpaceX launched a wheel of cheese into space as a demo payload? 172.68.255.104 08:01, 23 April 2019 (UTC)

This seems like it could be a reference to some independent game development communities, where users tend to enjoy making things "from scratch", but are often encouraged (sometimes quite aggressively) to avoid reinventing the wheel (often those exact words). I don't know if Randall is aware or involved in these communities, but it seems to fit perfectly. Probably not Douglas Hofstadter (talk) 13:35, 23 April 2019 (UTC)

This might be a python joke. Python packages on pypi are usually distributed in a file format called wheels. 162.158.183.5 19:00, 23 April 2019 (UTC)

The influence of this comic on the popularity of searching the word seems to have been minor, but noticeable: https://imgur.com/dkuBK5h 162.158.238.190 19:29, 23 April 2019 (UTC)

What I want to know is, how can we make a cheese wheel show up? Can we google bomb this image search?

Keybounce (talk) 05:08, 24 April 2019 (UTC)

I wonder, could there be a type of cheese hard enough to be viable as wheels for some kind of vehicle? There certainly exists some real hard types of cheese out there, it should not be impossible to use a cheese wheel, even if it were to be ridiculously expensive. 172.68.182.160 07:50, 24 April 2019 (UTC)

well, hardness is not necessarily the factor to look for. A very hard wheel would mean you would feel each and every of the smallest bump in the road (or would need a suspension that can handle them. Suspensions usually are more for the medium sized bumps). Also hardness often means brittleness. Imagine building a wheel of marble for your car. it wouldn't dent, but break as soon as there is a major hit on it... --Lupo (talk) 08:20, 24 April 2019 (UTC)
Change to the header text - is it related to the comic?

I have updated the header text section on the Design of xkcd.com page with the new header text out with this comic. I can see that in the "loong" explanation someone has mentioned Google Reader already, probably because of this. So I have also added a link to this change to the explanation. How relevant is Google reader for this comic, and is that actually a reason to expect the comic is about computer programming and not inventions... (As per the To include or not include section here below)? --Kynde (talk) 16:03, 24 April 2019 (UTC)

I don't feel it's relevant. Maybe something for the trivia section? Elektrizikekswerk (talk) 08:45, 25 April 2019 (UTC)

To include or not to include

I deleted a part of the explanation which I feel doesn't add anything to the explanation of the comic. This change was reverted. And since I don't want to delete them again just for them to re-appear I'll open the discussion here. In my opnion the explanation can be understood very fine without these paragraphs. I'm talking about the paragraphs 4, 5 and 6 of the current explanation. These make the explanation unnecessarily convulted. Especially since they introduce terms which need a further explanation (Among others: What's a library in this context? What is npm?) Elektrizikekswerk (talk) 13:42, 24 April 2019 (UTC)

I thought your edit was appropriate, as there's way too much information in the current explanation. If others think some of the information is helpful, then it should be significantly pared down in size rather than just reverting your edit. Ianrbibtitlht (talk) 13:55, 24 April 2019 (UTC)
I agree that there is too much on software development. There is not even any guarantee that the comic refers to this. --Kynde (talk) 13:59, 24 April 2019 (UTC)
For what it's worth, I noticed that you didn't have any bias because you hadn't contributed to the explanation before your last edit. However, the user that reverted you had previously added all of the content you removed, so they clearly thought it was necessary even before you removed it. I'd like to hear from anyone else on how they feel about the contested content. Ianrbibtitlht (talk) 14:03, 24 April 2019 (UTC)
That's why I opened this topic :) Elektrizikekswerk (talk) 14:39, 24 April 2019 (UTC)
I put it back because I think it's useful to show that there really are people/industries who behave as Beret Guy does, and who get burned by it. I could go for shifting it over into the 'trivia' section. --NotaBene (talk) 20:14, 24 April 2019 (UTC)
Which is in my opinion covered by "even if it wasn't initially designed to handle the task for which it is being used and thus may have unintended side effects or other issues." This part (or the part before that) could be generalized some more so it applies not only to code and programmers but engineering in general and it would be sufficient to explain the comic. Elektrizikekswerk (talk) 07:41, 25 April 2019 (UTC)


The comic does not expicitly or implicitly mention the automotive industry. At best, you can assume beret guy is manufacturing vehicles. 162.158.111.61 11:40, 26 April 2019 (UTC)

"that's what we attach to our vehicles"

Aircrafts are vehicles too.

I strongly suspect this article is a reference to npm and the general approach to dependency management in the contemporary Javascript community.

My last edit is me removing a near identical incomplete tag, in a near identical situation. A long multi paragraph explanation that didn’t need to be longer. If this isn’t just a coincidence I’ll delete the tag shortly, and if so, can someone explain? “That Guy from the Netherlands” (talk) 16:29, 20 May 2019 (UTC)