92 comments

[ 3.8 ms ] story [ 179 ms ] thread
I'll be interested to hear comments from fellow hackers. Reactions from colleagues have been... varied. Jim Sangwine
It’s meaningful to him and that’s what matters. At no time did he say his goal was to impress us with his coding wizardry, so it’s irrelevant whether I think it’s clever, pedestrian, elegant, or tortured.

Its stated purpose is to motivate him and remind him of what is important to his own happiness. Given this clearly stated requirement, the code as presented, and his statement that it is motivating him, I give declare that this code works as designed.

It seems you did not realize that you are replying to the tattoo's owner.

However, your point stands if I mentally modify some pronouns and expresses my own sentiments as well. Tattoos, piercings, hair coloring, makeup, clothing are often for ourselves, not for being pretentious.

I didn’t, and quite possibly that’s for the best. I’d like to think that I’d have said exactly the same thing to Jim if I’d known he was the “canvas,” but as it turns out I know this is absolutely positively what I thought without attempting to apply tact :-)
Tattoos, piercings, hair coloring, makeup, clothing are often for ourselves, not for being pretentious.

And yet he posts it on the web, and specifically asks for other people's opinions.

In my experience people who very much care what others think of them, often claim not care what others think of them.

Maybe there are people who are interested in positive observations and constructive feedback from others, but don't care if others don't like them and choose to ignore non-constructive criticism.
Exactly. I can ask for opinions without seeking approval or being showy.
You completely won me over with the philosophy behind it. This should be personally meaningful to you for a long time.

I recommend practicing a concise 10 sec explanation because people WILL ask what it means.

I think one of the benefits is that I can change the meaning depending on who I am talking to. "Why honey, it means I love you of course!" ;P
I'm a JS developer too, I decided to read the code before reading the explanation. I said to myself "where the feck does 'i' come from? I guess it must be coming from outside somewhere". Smiled when I read your description:

> The variable i represents input from other people

Very cool :)

But, um, no syntax highlighting?

I considered it, but I was afraid people might think I was geeky.
nice ;)

I was once going to get this tattooed:

<?=phpinfo(); ?>

I still think about getting a code tattoo from time to time. I'm not really a PHP developer any more though.

I like the meta meaning of yours, it's timeless. Even if the JS syntax changes or you move into Obj-C or whatever, it still has the deeper meaning you've attached to it. I think that will make it age well.

Pretty cool. I was going to get a GUID tattooed to my arm :)
An URL could be nice too. Or a QRCode ;)
I thought about that but they might expire :(

A GUID is guaranteed unique forever pretty much :)

I'm not a fan of words in tattoos, so I could never get behind a code tattoo—

But I really like how it uses the interpretation of code as a flow of information. It's how I think about programs, it's both fundamental and often misunderstood, and it makes for a great story.

I think it's pretty great. As a tattooed hacker, I'm glad that someone else wanted a code related tattoo. I've had the idea for a while, but like yourself, when I googled for others and inspiration, came up with very little.

My current plan is to get a portrait of Ada Lovelace. To me, she represents the general concept of "programmer" without being tied to a particular technology.

I wanted to raise two points about your explanation: First, while the function j is a closure, the anonymous function is not; it is simply a higher-order function. Second, i is indeed undefined, but this will not cause a reference error, it will simply push undefined into the array. That's all :)
> The k array represents knowledge or experience.

Perhaps you might wish to name your variables? The tattoo will be read more often than it is written.

Personally, I like to name anonymous functions (function foo () {}) so when a stack trace occurs, you know where. For example, if you get a second tattoo in future!

In order to make any great art, there's a risk of spectacular failure. There is no reliable way of achieving greatness. If it's reliable, the best it can be is merely good.

This is exactly why I'm not getting any permanent things done to my body. I wouldn't want something merely good, I would want greatness. In order to go for greatness, I would have to risk spending the rest of my life with some spectacular failure. That's a risk that I'm not willing to take, but I appreciate it when other people do.

Your tattoo? Pretty damn great.

I like the explanation. However, I gotta wonder whether the javascript syntax noise is a bug or a feature :)
Do you remember the hacker emblem? http://catb.org/hacker-emblem/
Get a lambda. Geeks will nod approvingly and you can tell the jocks that it's from 300.
My plan is Lambda on the left shoulder, Pi on the right. Lambda for programming and right-brain, Pi for math and left-brain. I feel that they are simple, elegant, and have a lot of meaning. My only worry is that they won't age well, but I have no knowledge of tattoos.

I made a deal with myself and my wife that I will get both tattoos once I have made a living working for myself (either a successful startup exit or my consulting taking off).

Or people will think you like the game Half-life that little bit too much.
(comment deleted)
Should've just gotten "RangeError" tattooed instead.
(function(){var k=[];return function j(){k.push(i);j();}})()();

Love it, but what that code says to me is Stack Overflow. But I'll reinterpret it to mean Mind = Blown by all the random cool things you learn in this field (infinite data structures in Haskell being the most recent one for me).

PS - I couldn't help running it in the Node REPL:

  > i = 1;

  1

  > (function(){var k=[];return function j(){k.push(i);j();}})()();

  RangeError: Maximum call stack size exceeded

Lol :) Seriously though, you may be on to something.
Stack overflow because we are all mortal. Filling of the stack can be fun though
Perhaps he's hoping Skynet will mistakenly eval() its inputs when scanning him into the human work camps.
Our best defense: code injection attacks.
This bit really bothered me. I would have suggested some ooda-loop construct, instead. That said, it's not my tattoo.
I think this is the JS monkey equivalent of having the Chinese characters for 'strength' and 'wisdom' tattooed on your forearm.
Calling people monkeys is rather abusive, and this is specifically forbidden by the HN guidelines. Ask yourself: Is your comment just as relevant if you omit that one word? If so, consider editing it out.
Calling people monkeys is rather abusive

I disagree. "Code monkeys" is a common term used for programmers, and it is not at all derogatory. (If anything, I think it implies a certain level of respect.) "JS monkeys" is simply a derivative form of code monkeys.

Not where I'm from it's not. A code monkey is mindless and interchangeable.
Nobody ever called me a monkey to my face, and I have several JS projects up on Github. I have trouble believing thismismamterm of endearment or respect, especially as it was used here.
Maybe it's like nigger. It's okay when I am one and call myself one, but not when someone else who is not one calls you one?
Interesting. I always hit the space bar with my right thumb, too.
That was in reference to "thismismamterm," which took me several seconds to figure out.
Abusive and insulting speech is all about tone -- the intent of the speaker.

In this case, I don't see anything insulting about the phrase 'JS monkey'. It's similar to the idiom 'code monkey', and I'd certainly use the term to refer to myself in casual conversation. E.g., 'Today I'm a Javascript monkey.'

We'd be in total agreement if the term was obviously insulting, but I don't see any evidence of that. Moreover, the original comment would be less interesting without the, um, moniker.

And in 2060 developers will probably think something like what would think today, if shown a tattoo of "ALTER X TO PROCEED TO Y" in the flaccid forearm of a 70-year-old.

Still, much, much better than those at Hanzi Smatter [ http://hanzismatter.blogspot.com/ ].

Speaking for myself, if I saw a COBOL tattoo, I'd most likely think "Duuuude, old school... respect!" ;) Not so sure about JS though - is it perhaps more likely to seem like Visual Basic in 40 years? As a JS monkey myself, though, I like it* :)

As for alternatives... would a Lisp tattoo be better?

* Apart from the i coming out of nowhere, which keeps setting off my this-is-a-bug alarm ;)

Well, I was thinking more about the contrast between the supposed permanence of tattoo and a programming language construct. Now that you have pointed it, however, it might give a certain feeling of "old school" ("self modifying code in COBOL!?") -- and I expect closures to be still "reverenced" in 2060.

And of course a Lisp tattoo would be better! ;)

Interestingly enough Hanzi Smatter focuses on mistakes with Kanji or Chinese, but I guarantee that those french translations of meals are equally hilarious.
One point i'd like to make. I think its great that people get tattoos that mean something to them, and i'd totally get a code tattoo too, but i dont believe tattoos HAVE to mean something to get them. All the tattoos i have dont have any meaning behind them other than "just because i like it" and while a deep emotional connection with a tattoo is great, dont talk yourself out of getting a tattoo if theres no meaning behind it, if the only reason is, "because you like it", thats a great reason too.
my tattoo means something to me (a stylized hydrogen atom; I'm a physicist) but it also has multiple meanings and is first and foremost an aesthetic decision.
Same here! I uhm'd and ah'd for ages before I finally got mine. It's a pretty standard tribal design on my left upper arm, and I still really like the way it looks :) No special meaning, though people ask if it has a meaning whenever they first see it.
It's kind of sad, I thought the y combinator was beautiful until it became a brand name.
upvote x10. The y combinator is exactly the sort of thing I would have been happy to have written on my body, had it not turned into an investor buzzword
This will be fun once the language's popularity wanes. Imagine an old guy on his walker with an "IDENTIFICATION DIVISION." tattoo…

As for this particular item, I'm not a big tattoo fan in general and have a particular disdain for writing – it's usually pretty bad typography. While this isn't all-caps badly kerned blackletter, it kinda looks like someone invented an automated prison tattoo maker. Sorry.

PS: I know, being German I'm not allowed to mention "identification" and "tattoo" in the same sentence, but my knowledge of COBOL divisons is lacking.

Thus if one is to tattoo code, it should be in lisp.
APL is cheaper.
Just go with Whitespace, will you? ;)
The durability of tattoo's subject does not matter in the slightest if a tattoo is done to record a moment in one's life rather than to impress other boys in geriatric care. And that's exactly what this guy did.

One thing I would agree with you on though - what an odd typography choice. Why not a monospaced typeface?! :)

"what an odd typography choice. Why not a monospaced typeface?!"

Because my arm was not long enough - Arial Narrow was the only clear one I could find that would fit : )

if you're not a fan of tattoos why should you pipe in at all with your certain-to-be-biased, most-likely-negative opinion?

Do you understand that you must appreciate the art/science of thing in order to have an opinion worth sharing? If not, perhaps you have thoughts on the aesthetics of synchronized swimwear you would be willing to disclose, just in case?

Why is the first response on these boards almost always the naysayer's? Why are nerds so uppity about shit that don't concern them?

(comment deleted)
I don't know... I like the message, but a programming language seems to be the wrong medium to convey it.

I would at least have used a procedure call to represent input from people, instead of an unbound variable :P

Why js vs λ notation?
In retrospect I realized this question is deeper than I thought. Maybe js is the new lambda notation.
The problem (and the feature) of tattoos is their permanence - what would you want to live with for the rest of your life? Not an easy question for an engineer who embraces change.

The solution as usual is to add a level of indirection - a tattoo of a QR code pointing to a URL. That way when you change your girlfriend you can change the content.

But what happens when QR codes aren't around in 20 years? You need another level of indirection!
Yeah, the real solution is OLED tats.
Just don't host it on EC2: "Our love is like this webserver... vanished from time and space thanks to a disk failure."
When I was a younger game programmer, I considered for a while getting a tattoo of:

  function intersectRect(r1, r2) {
    return !(r2.left > r1.right || 
           r2.right < r1.left || 
           r2.top > r1.bottom ||
           r2.bottom < r1.top);
  }
After many other tattoos, some spur-of-the-moment and some thoroughly considered for years, I realized that I like my spur-of-the-moment ones a lot more. They never had any significance to lose, whereas the well-thought-out ones are more embarrassingly telling of what I once thought was so deep and passionate, which all turned out to look naive after a few years.
> They never had any significance to lose, whereas the well-thought-out ones are more embarrassingly telling of what I once thought was so deep and passionate, which all turned out to look naive after a few years

This reminds me a lot of how I felt this past weekend while looking at old blog posts of mine. :)

> ();}})()();

And people complain that Lisp is hard to read )))

I'd consider the typical poetic fork bomb :(){ :|:& };: or maybe $0 & $0 &
Knowledge (k) may increase but there appears to be no way to access or share it.
> The obvious choice of language was JavaScript.

I hate to be a party pooper, but the only reason JavaScript is so popular is because it has a monopoly on browser scripting. Because (1) the language has significant design flaws and (2) heavy client-side programming is becoming very popular, it's inevitable that it will be replaced by better languages (plural) and 5-10 years from now JavaScript will be seen as a cumbersome, clunky, unfashionable old language.

So you will regret having the tattoo.

But on a positive note, in 15-25 years, JavaScript may be seen as "hip" and "retro", kind of like 8-bit graphics now.

So you will regret having the tattoo removed. :)

I thought about getting this as a tattoo: ++++++++++[>+++++++>++++++++++<<-]>+.>+..++++++.

Then I thought better of it.

It should, of course, have read

    do do -> k=[];j = -> k.push i; do j