Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
I'm sorry (programmingtour.blogspot.com)
463 points by eranation on Jan 24, 2013 | hide | past | favorite | 177 comments


She's also got a repo called "Kittydar" (Face detection for cats in JavaScript). This is someone who loves her language of choice and is just spinning out some fun projects with it. I think that's great.

Rewriting sed in JavaScript is cool. Even as a one-off, proof of concept, "I did this because I could." I mean, why not? Isn't that what the so-called hacker "ethos" is supposed to be about? She never said her version was better. She never evangelized its use over the traditional *NIX tools.

In the early 1990s, some crazy bastard decided to riff on the Unix kernel. About a decade later, another nut decided to rewrite the encyclopedia, and encouraged people to help him do it. Then another crazy wrote a programming tutorial using bizarre illustrations while eating a lot of chunky bacon. Why not? All three of those projects could have been considered pointless. We already had kernels. We had encyclopedias, and god knows, plenty of programming books.

I have the urge now to follow in Heather's footsteps, waste my own time, and write a version of sed in PHP. Or maybe Perl. And then write a wrapper for it in Applescript. Because, why not?


For the record, JS isn't just "her language of choice". Heather works for Mozilla, and has contributed extensively to Mozilla's JS Engine[1]. So, she knows the language damn well... she literally wrote it.

[1] http://bit.ly/V8Y5V7


If she was ridiculed then others have no chance against this crowd.


Wow, that's a real twist.


> I have the urge now to follow in Heather's footsteps, waste my own time, and write a version of sed in PHP. Or maybe Perl.

The Perl guys beat you to it ;) (check the man page for the s2p program included with Perl. Might also be called psed).


"Because, why not?"

OK, I'll bite. What follows is devil's advocacy, so be warned.

On the whole, it would be better for the world if you wrote something that provided either novel functionality or improved functionality over the existing code. A poor man's sed in PHP is not really very useful, unless there's some way in which your version is going to be better for users - faster, more reliable, easier to use (though the latter could be achieved by wrapping sed in a nicer interface).

Secondly, the people most likely to use such a program are PHP developers who aren't aware of sed. They would probably be better served by being told how to use sed rather than thinking that they have to use the PHP ghetto version. Knowing that lots of people are using your poor-man's-sed, and even getting kudos from these people, does not mean that you've created something new and awesome.

OK, devil's advocate over. I don't really believe all of that, although there is _some_ truth in it. We should try to stand on the shoulders of giants, and creating a monolithic application which replicates the behaviour of sed, grep and find but in a more tightly-coupled and less reusable package is still behaviour worthy of (mild) criticism in a programmer. If we don't make these criticisms, then in 10 years we'll still be awash with half-assed versions of Smalltalk, or package managers that are no advance on apt or yum, or what-have-you.

As a community this is a huge challenge for us. So much work done by programmers is pointless reinvention of work already done (and improved in countless iterations) by others, and we should lament the fact that reuse is so hard that just rewriting stuff in your favourite language is considered to be the best option.


But what about what is better for you as an individual, as far as creating something for learning purposes or because you find a different type of interface easier to use?


> I have the urge now to follow in Heather's footsteps, waste my own time, and write a version of sed in PHP. Or maybe Perl. And then write a wrapper for it in Applescript. Because, why not?

Wise words my friend :)

At least (if by any chance writing sed in PHP doesn't teach you anything) you can look back and say "I've written sed (in PHP), maybe it didn't come up as clean or as good as the real deal, but at least I have done it".


Which programming book are you referring to?



OK... I usually don't involve myself in drama, but I looked at the code: https://github.com/harthur/replace/blob/master/replace.js

Out of all the code could say "eyes bleeding" that doesn't even come close? Only thing that stands out is the naming of "replacize".

I can understand if you hate JavaScript syntax and love sed, but I fail to see why anyone would pick on this out of all the other code out there. There's no shortage of crappy code in the world! (not that you should make fun of any of it on twitter)


I must stick up for "replacize"! I think it's the very best thing in the script. Yes, "replace" is better English, but that would make "replaceFile" misleading — it's not the file that's being replaced at all, but regex matches within the file. To get clarity you'd need something like "replaceMatchesInFile", and that is quite a bit longer. Moreover, it's generic. When your program has a specific and unique technical concept, it's better to give that concept a specific and unique name and use that name consistently everywhere. (Best of all is when the name is lexically unique so you can grep it to obtain every single instance of the concept in your program. That property is so valuable that it deserves to have an essay written about it.) Generic English words are not always an advantage in code. As a program grows, they're likely to appear in more and more (unrelated) places, which makes them less and less valuable for conveying the program's key semantics.

"Replacize" is one of a zillion ways to get the desired effect, but it does it well and with style, and I like it. More than that, it's the one thing in the script that gives it conceptual unity. If you highlight "replacize" in your browser and jump between the various occurrences, the structure of the program immediately leaps out.

This kind of terminological pidgin, unique to a given program, can be very helpful in making code clear without making it verbose. The trick is to make sure that each such term has exactly one well-defined meaning and that it's used consistently everywhere that it applies. Eric Evans has called this the "ubiquitous language" of a program. The current script is tiny, of course, but if I see a programmer taking that degree of care with their writing anywhere, it's a stroke in their favor.

The thing in there that makes my eyes water, if not bleed, is the unfortunate duplication between the async and sync versions of the logic. But that is hardly the script's fault. It would have to be rectified at the level of the language and/or platform; little can be done about it in a program like this. Error handling too.


I'm going to tread as carefully as I can into this hornet's nest; keep in mind I'm not defending anyone:

I think the 'eyes bleeding'-type comments come from the author's rewriting sed in javascript. It seems almost like an exercise designed to provoke: rewriting one of the cornerstone nix utils (loved by many nerds everywhere) into a node.js package (despised by many nerds everywhere).

Like any good conversation starter, replace.js comes with a bit of incorrect information:

It's similar to sed but there are a few differences:

1. Modifies files when matches are found

Easy enough to do with sed: -i

2. Recursive search on directories with -r

find . -exec sed [...] does the same.

--

In my estimation, that's the reason for the vitriol. I am intentionally leaving out any analysis on the morality of the reactions to it, but the above should explain why some reactions were less than great. It wasn't about the code itself.


> rewriting one of the cornerstone nix utils (loved by many nerds everywhere)

But also hated by some nerds. I don't like to bring up my critiques of unix, because people seem conditioned to love it and couldn't do much about it anyway. People ignore (or get defensive about) things they feel they can't change.

But there's lots of Unix-Haters out there. Kinda like Fight Club, except slightly more gender-inclusive. "Remember this. The people you're trying to dismiss, we're everyone you depend on. We're the people who write your embedded devices which cook your food. We make your toy Scheme implementations. We're monitoring your systems while you're asleep. Our systems route the ambulances. Our Erlang processes direct your call. We are Googlers and Facebook coders and we know everything about you. We process your insurance claims and credit card charges. We control every part of your life. So don't condescendingly quote man pages at us." (http://homes.cs.washington.edu/~weise/unix-haters.html)


No, that's not enough for vitriol; there has to be an emotional drive. If this code was written for you, and you were offended by the over-engineering, then you might feel slighted for being ripped off. But that's not the case here.

The reason these people were sneering was because the code was written in Javascript, running on Node.js, and Node.js is perceived to be a threat to their own community, Ruby on Rails. They mock and belittle what they fear so they can feel better.


The crazyness of it all is that comparing Node to RoR is like comparing C++ to Cocoa it is just nuts and I do not get why people get up all in arms about it. I like and use both.


> It seems almost like an exercise designed to provoke: rewriting one of the cornerstone nix utils

Thought provoking or not, but I think rewriting the nix-utils with your language-of-choise is one of the best opportunity to learn :) Learn more about your language and learn how damn much effort has gone into the nix-utils to get them where they are today.


Because acting like a childish asshole is how you maintain your web presence in the startup world.


Hmm, reading it I think I see where criticism comes from; my impression is that I, personally, will most likely stick to sed, grep, sh, etc.

But does that make the author a bad person? Worthy of ridicule for having thrown it online? Of course not. This is just a silly script, of the variety that most of us probably have sitting around in somewhere $HOME. It's not worth getting worked up over.

The ultimate irony is, I wonder how the critics would feel about the code of sed and grep. Have they bothered to look? I myself do have these loud, exaggerated, critical attitudes towards code quality, but at some point I realized that most of the code I rely on every day is probably not up to my standards, and yet I still willingly rely on it. A younger self might have been tempted to re-write all of it, but I only have one lifetime to do such things and I'm already busy as it is. There is a time for rewrites on the basis of code quality, I would advocate for it where it is constructive or even simply satisfying, but at some point you have to admit that many (most?) times you will have to pass on this impulse.


This is just a silly script, of the variety that most of us probably have sitting around in somewhere $HOME

I have some very silly scripts hanging around. "killname.sh" dates from before I knew 'pkill' was a thing :)


Thanks to this reply, I just learned that 'pkill' is a thing! I've generally relied on killall - though it's not available on some platforms AFAIK.

To echo the larger point, I've written a bunch of similar scripts in my lifetime.


For a long time OS X didn't have `pkill`. I think it's there now with 10.8, but was missing for too many years.

I remember the one weird thing was that `killall` used to behave weirdly on commercial Unix. It would ignore its arguments and simply attempt to kill all processes. It's been a long time since I've logged into such a system, but it was then that I got used to typing `pkill`.


This may have to do with rubyist who have a distaste for Node (and Javascript) in general (which is actually quite common) more than the JS itself.


I'm a Pythonista that loves JavaScript and thinks Node.js is a waste of effort on the part of humanity.


I fear that few programmers understand the perspectives brought by Node and JS.


Node.js didn't bring anything new to the table. We've had event loops and non-blocking code for almost half a century.

Don't lump JS into this.


I'm mostly ambivalent. Node, to me, feels like an attempt to bring twisted to server side JS.


How much have you used it?


Hyperbolic much?


That's an unfair presumption. That's just a coming from a few twitter users and it doesn't really represent the whole rubyist community.


I've found the whole rubyist community to be somewhat hateful towards any other languages. It makes it hard to want to use the language when the suggestions I get on my "gems" are "that's not ruby-enough of a name" or "You need to break out of your python mode, your name isn't clever enough" :P


Looks reasonable to me.


You know what would be better than a blog post or Twitter apology? Go away for a little while. Don't Tweet. Don't Blog. Don't comment or talk. Go away...and code.

The programmer community likes to fancy itself a meritocracy. Presumably, that implies that you are judged on the merit of your programming ability. Ask yourself: of the people involved in this whole brouhaha, whose code have you read?

We are all very busy, and none among us has the time to read the code of every other individual. This is where the concept of "meritocracy" breaks down. At some point, reputations count. The proper way to do this is: I know Joe. Joe writes good code. Joe recommends Bob's code, and when I looked at Bob's code, it was also good. I now trust Joe when he recommends people and/or their code.

The wrong way to do this is: Jim's a celebrity. Everybody loves him. Everybody parrots what he says. He must write good code.

Celebrity culture is directly counter to a meritocracy. So, my challenge to the "celebrities" involved in this incident: if you fancy your high positions to be well and truly earned, remind us of that fact by going away...

...and writing some kick-ass code.


> Ask yourself: of the people involved in this whole brouhaha, whose code have you read?

I've definitely read Steve Klabnik's code. He's a Rails core team member, and when I work on a Rails app I frequently open stuff up to see what's going on under the hood.

> Celebrity culture is directly counter to a meritocracy. So, my challenge to the "celebrities" involved in this incident: if you fancy your high positions to be well and truly earned, remind us of that fact by going away and writing some kick-ass code.

I know that Steve's always writing code for one public open source thing or another... I've seen it. He also happens to tweet a lot. I don't think that the two things you're suggesting here have to be mutually exclusive.


I don't think I said they have to be mutually exclusive. But part of the problem, as outlined in the original post, is that these weren't anybodys disparaging an open source project...they were veritable celebrities! (Just look at their follower count!)

At the same time, Steve (as he stated in his post), seems to be having a hard time expressing his remorse. My suggestion is that he should remember why he ever attained "celebrity" status in the first place...

...also, it's a lot harder to disparage other people's code when you're buried deep in your own code.

Edit: I lost track of whose post was whose and originally wrote "as he stated in this post". Corrected.


  Ask yourself: of the people involved in this whole 
  brouhaha, whose code have you read?
Of most of them. It seems you are unaware who these people are and what projects they have contributed to. You're making a good point, but these are the wrong people to use as an example for that point.


The point is not that no one has read the "celebrities" code. The point is that if you looked at the ratio of "people who have heard of <person>" to "people who have read the code produced by <person>" for the people involved, I suspect there would be one outlier.

(as a simple post-script...I am very aware of these people and their projects, and made this comment in that context...)


I have never heard of anyone involved. But at this point I would count that as a win.


People said something they regret, I don't understand why it would be wrong to apologize? Sorry, can't follow the logic of your comment at all?


You should re-read what I wrote. I did not say apologizing would be wrong. I expressed my opinion on what would be an even better course of action.


Yeah but I don't get it. How would ignoring the issue be a better apology? These people write code anyway, there is no way the victim could realize "ah, they are silently writing code, so they must be sorry". And the people following their example also wouldn't have that thought.


The apology should have been a direct one, to her, outside the public lime (and lemon) light.


I still don't see why a public apology is wrong, especially if the offending party is popular and sets an example for others.


Wow. I'm thinking I should bury my github in the yard out back. I've committed much greater atrocities. I've "remade" (in no particular order) find, rsync, getopts, sort and even ls(1).

Sometimes you just need less of a grand old unix utility and you just want it to work the way you think it should to match your workflow. That's what unix is about.

(1) Did you know that if your system is missing ls?!! that you can replace it with: for i in * ; do echo $i; done


Even just "echo *" works.


It was a purposely locked down embedded system. If the entries printed across, the serial terminal didn't send anything past character #80. Using the loop puts each entry on its own line.


If you would like some _actually_ horrible open source code to make fun of, feel free to peruse my early repos which are mostly from my freshman year of college (github/jpwright), including this god-awful function I apparently once wrote: https://github.com/jpwright/debcite/blob/master/search.php#L...


I have seen production code that makes this look like poetry. And I've written some of it.


That's.... creative... I particularly love how the variable names keep changing in inconsistent ways, but also sometimes reuse older names.


Thanks for the chuckle. Towards the end of the function, I think I've developed sympathy for "LINEBREAK" and didn't want it to go away.


I'm suddenly glad they didn't have github when I was in college. I found some old printouts from my college days recently, and I wrote some terrible, terrible C and assembly for the VAX.

Writing bad stuff is how I learn though, so that's OK.


Looking back at my work over the years, I can probably say that the ugliest and shittiest code has always made me the most money. Why? End-users couldn't care less what the code looks like. If you are faced with an opportunity you write an ugly glued-together MVP, show it and get it working. It was only after making money that the code got cleaned-up and polished.

The same is the case with "temporary" tools that you write here and there. Ugly piles of smelly manure until you decide to clean them up.

Of course, as you gain experience you can write less "smelly" code from the very start, that's only to be expected.

I can also probably say with almost absolute certainty that projects where I took the approach of writing a "Monument to Computer Science" almost never made me any money.

I find that for some people programming can be very personal. Criticism can really affect them. Perhaps this is also something that you get past with experience. And, while I always strive to write good, clean and efficient code, I, personally, realized a long time ago that the very first priority is to put food on the table and grow the business or support the growth of the company where you are employed.

People who get off on criticizing others for anything (not just their code but anything at all) are, regardless of their standing within their community, simply despicable.

A lot of these people are also cowards. Not saying that these guys are. I don't know them. But I'll bet they would not stand in front of a real crowd of people (you know, they kind that you can touch and see) with Heather in the same room and make those comments. Why is it that some people might have restraint and manners in public but can turn into perfect assholes behind a keyboard?

This is one of those "You can't un-ring a bell" situations.

The other one I like is the equating of such acts to tearing open a pillow full of feathers atop a mountain. To undo your actions you have to go to every corner of that mountain and gather all the feathers. In other words, it's very easy to utter just a few nasty words and cause someone pain and even harm. It is orders of magnitude harder to undo that.

In my opinion, an apology simply isn't enough. I don't know what might constitute equitable reparations, but apologies in blogs are just too easy. The author sleeps well at night while the victim still has to deal with the feathers spread all over the mountain that is the Internet.

N.B: It is important to note that Corey did reach out to Heather personally (see his post on this thread). This, of course, makes him a gentlemen and I am sure Heather feels much better. Nothing beats real one-on-one human contact. Bravo.


> In my opinion, an apology simply isn't enough.

I think you're making the same mistake that the OP made - not considering that there was a person at the other end. People make mistakes, including acting like assholes, but they are still people at the end of the day.


In many ways, an apology is all they can do.

Much like how the original post states, Steve Klabnik, Corey Haines and David Cramer's comments on this repository are out there, and now that includes the mob against them and their apologies after realising that numerous people were angry at them. Now that this shitstorm has spread to Hacker News and elsewhere it's something that all four parties will have associated to their online persona.


yes a mistake, and he corrected it in his "N.B". Thus the chain stops.


Indeed. The world could use a lot more slack. I personally need a container full, but it's on back-order.


>The author sleeps well at night while the victim still has to deal with the feathers spread all over the mountain that is the Internet.

This read like a hyperbole to me. Heather has received a lot of support and positive attention because three guys made abusive tweets about her code. This incident will blow over very quickly (as most internet drama is want to do) and in the end Heather will come out as the vindicated victim while the other three guys will try to maintain their reputation.

I would argue that this is a great PR moment for Heather. Heck, I wish some well-known figures in the Ruby community would tear apart my OSS contributions so I could get some free publicity.


Not to mention that a little bit of adversity breeds resilience. If you're coddled from all criticisms, you deal less well with other stressors.

Done right, frank and forthright exchange of opinions is faster than couching things in friendly terms. Look at the way Torvalds, Jobs, and Gates worked - these guys happen to be the keystones of the 'big three'. It consumes a lot of time, couching a negative opinion in soft, cuddly terms to 'avoid offense', and having a bit of resilience can smooth over rough corners in communication.


It consumes a lot of time, couching a negative opinion in soft, cuddly terms to 'avoid offense'

No, it emphatically does not, and the assumption that it does (and that it is thus not "worth" trying to not be an asshole) is one of the more pervasive diseases among "computer people". If you sufficiently internalize that there is another human being at the other end of the line, basic humanity should lead toward communication with that in mind.


Not to mention the fact that Torvalds, Jobs and Gates all used their frank and forthright exchange with people they worked with, whom they knew, and who knew the deal in working for them. That is quite different from blasting opinions at strangers over twitter.


I'm more responding to the idea that it's reprehensible to be exposed to harsh comments than the idea it's bad making them in the first place. I've never read the twitter involved and sure, it's probably awful. But that happens in the world. Catch public transport enough and you'll encounter it. Go shopping enough and you'll encounter it. Having some resilience is not a bad thing.

In my personal experience, people with low resilience are also the people who avoid reading news about bad events and current affairs, because it upsets them. So they lead more of a fantasy life. I don't think ignoring problems in the hope that they'll go away is the right way to be.

EDIT: I've now read the tweet and the total offending commentary is 'eyes bleeding'. That's it. Compare to the reams that have been written in this post about how insincere his apology is and what a prick he is. If he was to write up a blog post about how he'd ended up sobbing because HN had been so mean, the comments here would probably not be 'sorry, that was mean of us', they'd be mostly 'you deserved it', like moral crusaders. There's a lot of hypocrisy going on in this thread.


I've spent many a year working in support and also as a medical technician working with patients, and a year or so doing TA work. I've done a lot of hand-holding when getting a point across, and I've always done well in performance reviews. I'm quite aware of the human on the other end of the line. I'm here to tell you that it does take extra time. 'Manners cost nothing' is a not a statement referring to time.

There is also a difference between being rude and being frank. And there is a continuum of response between 'trying not to be an arsehole' and 'being an arsehole' - it's not a binary choice.

Why does being frank suddenly mean you've lost 'basic humanity'? That kind of opinion is a disease in itself.


If you sufficiently internalize that there is another human being at the other end of the line, basic humanity should lead toward communication with that in mind.

"Sufficiently internaliz[ing]" the emotions of another human being may be difficult or impossible for many who are drawn to the computer field due to the way their brains are wired, either due to childhood bullying stunting their empathic development, or to things like autism spectrum disorders.

For people in that situation, suggesting a pragmatic mental model may be more helpful than saying, "You're a jerk, and you're wrong," which might come across as like saying to a deaf person, "You never listen, and you're wrong."


Could we stop with the Asperger's fetishism? The vast majority of people in technical fields do not have any autism spectrum disorders. The vast majority of people who are jerks do not have any autism spectrum disorders, either. Most people who act like jerks (in both technical and non-technical fields) are just that: jerks.

Autism-type disorders don't just manifest as asshole behavior, and certainly not as just snarky inconsiderate behavior. They affect interpersonal interactions in general.

Saying that jerks in tech fields have autism spectrum disorders makes as much sense as saying MBAs have sociopathic disorders. "When I hurt my coworker's feelings, it's because I'm autistic. When my boss hurts mine, it's because he's a psychopath." Yeah right.


I didn't limit my comment to Asperger's syndrome, and at no point was I making excuses. My point is that saying "You're a jerk" is not a solution to the problem, whether it's caused by ASD, psychopathy, whatever. If you had read and considered my final paragraph, you would see that I did propose a solution.

Edit: oh yeah: https://en.wikipedia.org/wiki/Fundamental_attribution_error -- This thread's full of it.

Edit 2: My suggestion of a "pragmatic mental model" of others' emotions is influenced by the existence those who are able to learn to read emotion by analyzing facial expressions (e.g. https://news.ycombinator.com/item?id=4630989).


You didn't limit it to Asperger's but you basically limited it to Asperger's-like syndromes. (i.e. "due to the way their brains are wired".) References to bullying and whatever else are superfluous when you're basically chalking it up to equivalent syndromes (regardless of the particular names).

And yes, there are some individuals who legitimately have Asperger's or some other disorder that affects their interactions. However, this is a rarity, and it's unhealthy that our industry talks about these things as if they are the normal case. It does the industry a disservice when we accept inappropriate behavior and don't call it out as inappropriate and unacceptable. Most people who act like jerks do not have any kind of diagnosable disorder. In fact, most people who act like jerks are just normal people who are not normally jerks, but occasionally act that way for various reasons.

I disagree that your proposal is meaningful. I say this partly because you didn't actually propose anything concrete, but mostly because this is only useful for someone who wants to change the way they interact. This requires that these people admit that their behavior is inappropriate, so we should start there. Then we can move to conversation about how to change if they agree that they should.

Imagine if we were having this conversation about racism or sexism. Would you be dismissing the behavior as a result of a syndrome or bullying or whatever? Would you propose that we should be suggesting a "pragmatic mental model"?

As for the "fundamental attribution error", you're just as guilty as anyone else. "He's doing that because he's got Asperger's" is no more situational than "He's doing that because he's a jerk". A situational explanation might involve the anonymization of Internet interactions or the dehumanization that comes from discussing a person's code vs the person.


You didn't limit it to Asperger's but you basically limited it to Asperger's-like syndromes. (i.e. "due to the way their brains are wired".)

Only aspies have wires in their brains? ;-) I mean "wired" in a more general sense: one's predispositions, preferences, learned behaviors, adaptations, instincts, acquired skills, etc. I'm making the assertion that people who are drawn to computers, especially those who began at a young age, have differently wired brains from the population average, and that this preference for computing fields may be associated with reduced capacity for empathy. Whether it's due to developmental or congenital causes is irrelevant.

This requires that these people admit that their behavior is inappropriate, so we should start there.

You're already talking about someone who is acting like a jerk. Becoming confrontational is the last thing I would expect to convince anyone to want to change their behavior, much less a "jerk."

Imagine if we were having this conversation about racism or sexism. Would you be dismissing the behavior as a result of a syndrome or bullying or whatever? Would you propose that we should be suggesting a "pragmatic mental model"?

"Dismissing" isn't the right word. Again you seem to assume that I intend to excuse inappropriate behavior and that I expect it to continue. That is not the case. I am proposing a more rational, less reactive approach to persuading people to be more considerate. And I would indeed make a similar proposal if we were discussing undesirable behavior against a legally protected class, vs. a piece of code.

Is this a new analog of Godwin's law? If you wouldn't talk about it w/r/t race or sex or gender, you can't talk about it at all?

As for the "fundamental attribution error", you're just as guilty as anyone else. "He's doing that because he's got Asperger's" is no more situational than "He's doing that because he's a jerk". A situational explanation might involve the anonymization of Internet interactions or the dehumanization that comes from discussing a person's code vs the person.

I would consider those to be less situational explanations, at least the way you've worded them. I've avoided reading the original tweets at issue, so all I'm aware of is that the metaphor of bleeding eyes was used, which is common and inoffensive among nerds. If anything, that suggests that the original offender wasn't "being a jerk," but rather unaware that they were interacting in a space in which their metaphors would be interpreted differently than they expected.


>I'm making the assertion that people who are drawn to computers, especially those who began at a young age, have differently wired brains from the population average, and that this preference for computing fields may be associated with reduced capacity for empathy.

And I'm saying that this is not true. Sure, there some very small proportion of the computing industry that have trouble with empathy, but there is a very small proportion of the population in general that has this problem. Even if the computing field had twice as many people with this issue as the general population, it would still be a small portion of the overall computing field. (And I seriously doubt that it's twice the average. I've never seen anything substantive demonstrating that it is more prevalent at all.)

> You're already talking about someone who is acting like a jerk. Becoming confrontational is the last thing I would expect to convince anyone to want to change their behavior, much less a "jerk."

First, there are many different levels of "confrontation". Telling someone that they've hurt your feelings can be viewed as confrontational, but is much different than yelling at someone and calling them an asshole. Second, if someone is unwilling to acknowledge that their behavior is inappropriate, they are certainly not going to try to change. Someone who sees no problem with their behavior sees no reason to alter it.

> "Dismissing" isn't the right word. Again you seem to assume that I intend to excuse inappropriate behavior and that I expect it to continue. That is not the case. I am proposing a more rational, less reactive approach to persuading people to be more considerate.

You're proposing that we concede that asshole behaviors by people in the tech world are largely due to an inability to empathize. I don't think there's any basis in fact for this claim, so this can not inform an rational approach to resolving the problem.

> a piece of code.

Code doesn't have feelings, and the inappropriate behavior was not toward the code.

> Is this a new analog of Godwin's law? If you wouldn't talk about it w/r/t race or sex or gender, you can't talk about it at all?

Is every metaphor now somehow a meta-invocation of Godwin's law?

Let's talk about racism, though. It's absolutely true that there are people with syndromes (e.g. Tourette's) who shout racial slurs because of their diseases. It is not, however, useful to bring up Tourette's in a conversation about racism, because while it does explain why a tiny portion of society might appear racist to the uninformed, it says nothing at all about the actual issue, because the vast, vast majority of racists do not have Tourette's.

> I would consider those to be less situational explanations, at least the way you've worded them.

You think that explanations that involve situational context are less situational than explanations that are entirely internal to personality? I really don't understand how you can make this claim.

> I've avoided reading the original tweets at issue, so all I'm aware of is that the metaphor of bleeding eyes was used, which is common and inoffensive among nerds.

It's common. That doesn't make it inoffensive. If I say that your clothes are making my eyes bleed, then I'm telling you that your clothes are horrible to a level that has caused me physical damage. This is offensive.


Bullshit


Human minds are much more diverse than most people accept or realize. For example, consider these comments from someone who has no visual imagination: http://lesswrong.com/user/lindagert/overview/

Also see: http://wiki.lesswrong.com/wiki/Typical_mind_fallacy


>Not to mention that a little bit of adversity breeds resilience. If you're coddled from all criticisms, you deal less well with other stressors.

That's the sort of psychological pablum that sounds reasonable, but I'm not sure it's actually true.


It's a generational phenomenon hitting the children of helicopter parents, and similarly hitting the One Child Policy children in China.


I think this is often overstated. Every generation thinks today's kids "have it easy" and "are soft." In previous times it was more about the physical or about working with your hands. Now because the world is more about the mental and social we accuse kids of being emotionally soft.

When you think about it though, imagine growing up with today's technology. Think about how bad Facebook can make you feel, when everyone seems to be having a good time and living perfect lives (because that's what they want you to see). Or how public life and the possibility of embarrassment, awkwardness, and ridicule can now follow us everywhere. Now remember how stressful being a teenager and going to high school can be on its own. I really don't know how kids today handle it.


I totally agree with you about code not always (or never) being perfect in the real world.

You are also correct in it was disrespectful and wouldn't happen if they were face to face.

BUT I do think an apology is enough, regardless of being called out on the internet. An asshole behind a keyboard doesn't use the same keyboard to say how they were wrong.

People make mistakes and when you do it on the internet it quickly amplifies.

You may say I am a little bias because I have met Corey in person. He was boarding a plane and I ran up and introduced myself after having heard one of his talks. He took his time while others boarded and was very courteous and friendly. So I trust in his apology and that he isn't an asshole in person or behind a keyboard.


Well, you are probably right. I don't know him, which means that I am operating with imperfect data. I still contend that a little more than an apology on a blog is in order. Perhaps a phone call or an in-person meeting if practical. If I am reading this correctly the comments affected Heather to the point that she had to cry. Not cool.


I've contacted her privately, as well. I thought it was important to publicly apologize, since I publicly said the mean thing.


You are a gentleman. That was exactly the right thing to do. I'm sure you made her day. Wonderful.


So robomartin is happy? Good. The important thing here is that robomartin is satisfied that this incident has played out according to his guidelines on how such matters should be resolved.


I don't think your post is sincere enough, you should reach out to him personally. You come off as a bit too pleased as well, tone a down a notch.


You are actually wrong about that. People tell each other how disgusting code that they wrote is in person all the time.


Public versus private though. If my adviser came in with a printout of something I wrote and told me, "This is garbage and unworthy of the electrons used to send it to me," I would be OK with that -- but if he stood up at a conference, put it on a projector, and said, "My student wrote this worthless crap" I would be (rightly) angry about it. Insulting someone's work to their face in a private setting is not nearly as bad as publicly demeaning their work.


It least it takes a pair to look someone in the eyes and tell them they suck.


I think you're making the mistake a lot of people seem to make on HN, and in my experience is typical for programmers in general.

Telling someone their code sucks does not equal telling them they suck.

You are not your code.


One, I still think telling someone that something they have done sucks is harder to do in person than online. But two, the point is that the incident in question was pretty much "you suck because your code sucks."


>You are not your code.

The code is the code. Not the person.


Telling someone their hard work and best efforts suck DOES hurt their feelings. If you don't recognize that and go around telling people their work sucks, then you might be an asshole.


>>>Telling someone their hard work and best efforts suck DOES hurt their feelings.

And so what? You think books don't get bad reviews? Movies? TV shows? School tests? It's part of life. Take the hit, move on. Do better if you must.

EDIT to add: When it comes to one-on-one being told your work sucks, the best response I think is this: "OK, if it sucks, tell me how, because I'm not yet able to see it and I'd rather not suck." That's better than just stewing in hurt feelings and never improving or knowing how to improve.


There's this little dog that lives next door to me who is always ready to bark at any one (dog or person) that passes, even if they're far bigger than he is.

Wow, that little guy has such a pair he can hardly walk!

Of course, if he weren't so aggressive, I'd be able to bring him along for long walks with us, scritch him behind the ears when we pass by, etc..

Our other neighbors have two dogs I take running with me now and then; not him, though.

My own dog, interestingly enough, doesn't back down when he runs at her (as a lot of dogs do, actually, even bigger ones). She doesn't attack him back, either -- she just doesn't even take him seriously (though he's trying...), and she feints and jumps, ducks and tries to play -- and he generally runs off after a pass or two of this; he realizes she's not backing down, and he gives up.

So she handles the confrontation that's needed with good humor and aplomb, without running away or even dropping to his level and getting nasty.

She hasn't got a pair, of course, but I can really respect how she handles him.


>An asshole behind a keyboard doesn't use the same keyboard to say how they were wrong.

If the apology comes before the resulting firestorm, sure.

Fact is, getting caught is a amazingly effectively catalyst for remorse.


With Corey, it would happen face to face. I've witnessed it.


Preach on. I will also point out that a lot of coders don't know the different between code that is "ugly" and code that simply hasn't been prematurely optimized.


Most code that I didn't write is ugly. I think everyone feels this way.


Corey did take a lot of time to apologize again and again on Twitter. I think he dealt with the situation quite well, considering the douchiness he (and the others) exhibited.


No kidding -- I checked his twitter stream to see what this looked like, and stopped scrolling after a few pages of nothing but apologies.

Sucks to make these kinds of mistakes; I've been thoughtlessly cruel before in my life (though never with the amazing and horrible amplification that the internet provides, thank goodness), and it's a nasty feeling indeed when it all sinks in.


long story short, why do programmers have to get special treatment for something that is universal in the world?

it has nothing to do with programming per se, that's just the thing that tends to be more discussed on hackernews.

people say mean things. boo frikkin hoo. that's life.


The way things are is not necessarily the way things ought to be.


the programming community can and should strive to be better than the rest of the world


I don't know about you but people make mistakes. What counts is how they handle it. Unlike the others in this drama, Corey actually owned up to it instead of just posting a lame non-apology.


A general point and not meant as a criticism of you, but is there a gender-neutral way to express "This, of course, makes him a gentleman" as you use in your final paragraph? Or a clear female equivalent? It seems "This, of course, makes her a lady" does not mean the same thing at all, and an obvious alternative (either non-gendered, or symmetrical to "gentleman") does not readily spring to mind when, one feels, it ought to.


"End-users couldn't care less what the code looks like."

This should be on a poster.

End-users don't care about any of the behind the scenes stuff that developers sometimes get completely distracted by — they care if it works. If it solves their problem and does what they want/need it to do, then it works ... if not, it doesn't. What goes on behind that? Irrelevant to them.


```If you are faced with an opportunity you write an ugly glued-together MVP, show it and get it working. It was only after making money that the code got cleaned-up and polished.```

I'm wondering how much this can be reduced by using frameworks. Is it necessary when using Rails conventions to produce something that is garbage on the first pass?


The Bene-Gesserit benediction against code trolls:

The bad code that I could write and did will always be better than the good code that you could have written, but didn't.


Apparently, exactly 168 days ago, I warned about very similar behavior. Remember when a pull request was submitted with tongue-in-cheek comments and a very lax tone? It was https://github.com/bitly/dablooms/pull/19, to jog your memory. Most people couldn't understand why a select few of us were getting in such a huff about this. As I wrote back then:

> I worry about a risk of imitation of this culture, but missing the crucial underlying detail and explanation that's hidden in vmg's writing. I worry reasoning with this people will be difficult because they have trained themselves to have such arrogance in their work.

This is just a different symptom of the same problem.

The open source community is rapidly changing with things like GitHub, mostly for the better, but people have got to learn to leave their ego's behind. Sadly, now that we have more, and more rapid interaction between people, the more that we risk re-enforcing attitudes like these. There's a feedback loop problem, and we've got to start acting now if we want any hope at fixing it.

This tweet is an example of things already going too far, that much is obvious. But how did it happen? I feel these things can only happen because we let them happen. Jumping in after the fact isn't a solution, we just all need to be a little more confident pointing out when social behavior isn't acceptable.

I'm not asking everyone to become a vigilante, and it doesn't mean that we're all going to get on. The open source community is a sensitive, valuable community, and there's so much passion about it. I'd rather those who get hurt are hurt because they're (politely) informed their attitude is harmful, rather than letting the feedback loop grow.


When you say 'leave your ego behind', you seem to mean "don't say mean things about the code of another, because you're only doing that make yourself feel better (and BTW, you shouldn't assume your code is much better)". Couldn't it equally well mean "don't be insulted when some random guy on the internet says mean things about your code"? Haters gonna hate and all?


Sure, but the latter doesn't mean the former is okay, especially when it comes from folks who are, to some extent, "celebrity" programmers.

Better still, why go out of your way to criticize someone else's code?


The dude doesn't have a single commercial success (as in product, website, etc) under his belt. Mostly a large collection of side projected.

Perplexed why him, and people like Gary Bearnhart (spelling?) are "celebrities".


FWIW, the first time I saw that pull request it brightened my day. I know I'd love to get a pull request like that personally.

I'm also a WordPress developer (I know, I know), so I read through all the ticket changes every day. By far the best are those from a relatively new contributor that makes jokes and is generally more light-hearted than others.

I'd really like to see the open source community take a step back to smell the roses. We're making awesome stuff and it's free for anyone to use. Why not have fun while we're at it?


I don't get it... What's wrong with that PR? There's no bashing going on there, and no bullying. How is it a different symptom of the same problem?

And who are you saying is in the wrong with that PR?


To be honest, that pull request was awesome, hilarious, and extremely constructive. The tweets, on the other hand, were mean-spirited and negative.

"Tongue-in-cheek comments and a very lax tone" make our community less sterile and boring. The fear of a sterile and unhappy programming environment personally drove me away from programming, and I elected to study music instead. I will always be grateful to Ruby on Rails, Github and the developer community for helping me to rediscover my love of software engineering, and get back into a career that I love.


This asshole was run out of Cleveland (fired from two companies back to back) for behavior like this.

Everyone I've talked to says he is horrible to work with.


If you think his reaction was bad, perhaps you should look at yours.


Allow me to rephrase.

I don't find his apology genuine. I've witnessed first hand to him behaving like this to someones's face on multiple occasions a meetups.

This behavior is so consistent that it actually got him fired back to back. Once from a big company and once from a small one.

I've talked to a lot of people that have worked with him and confirmed this.

I don't buy is apology.


And.... cue the slander.

The apology wasn't for you. Nobody cares that you don't buy it.

What they may care about, however, is your slanderous trolling.


I do think it's fair that people are at least made aware this is by far the first time this has happened.

He attacked someone in a public forum, he apologized in a public forum, and I'm commenting on it based no my previous direct observations, in a public forum.

So yes, his apology in a public forum, was for me, for you, and for everyone else. If it was for her, it would of been directly to her. He's trying to cover his ass and nothing more. IMO.


It's only slander if it's false.


Anonymous user signs up to post defamatory remarks, "truth" isn't exactly on their side. It's slander before it's the truth, that's for sure.

Perhaps shrughes knows something more. Perhaps shrughes is the anonymous defamatory poster. Yep, that's all the evidence I need - my own guess work. I'm satisfied shrughes is guilty (until proven innocent naturally).


Maybe you should stop being so censorious. You bad person, you.


And with this everyone should learn something and move on. The lesson by the way is not that you can make callus comments and get away with it unless its picked up by a large social site. The online distribution effect is very real http://users.rider.edu/~suler/psycyber/disinhibit.html and you can really damage someones self esteem, so be careful.

Heather its up to you to forgive him now. I totally understand if you don't want to, but considering forgiveness is more about making yourself feel better I would really consider doing it.

BTW I say this having just gotten a heap of email abuse from someone because I refused to write a captcha decoder for them and instead suggested they read the article I wrote which had the answers. Even knowing the above it still it still hurts, and I am generally rather thick skinned.


well i did learn something. if you code in node.js guy, stay clear out of ruby developers.


Just stay clear of ruby developers in general.


I wonder if the apology would still be there is the community kneejerk reaction never happened.


It is an honest apology. I didn't realize how bad it was until I was called out. It isn't "oh, I got caught," it is "oh, shit, that was a really bad thing to do." It was an unthinking mistake on my part. I'm human and make mistakes.


So why did you initially think this project justified your original tweet? I think that would really help other people understand where you're coming from. Otherwise it looks like you thought it would be cool to say someone's code is awful without even looking at it. An apology is nice but why don't you tell us what kind of thought process led to what you did wrong?


Thanks for handling a shitty thing to have done with some grace, Corey. I can't accept your apology on Heather's behalf, but I do hear your contrition. For my part, it's genuinely appreciated.


It's just like if you do something bad at school to another kid, and then only apologize after your teacher makes you. We all know it's a bullshit apology but apparently it's still valid.


It's not bullshit if you genuinely failed to recognize your own poor behavior and are grateful for others calling you out on it. Unless you constantly reflect on your own behavior in your spare time, this is often the only way apologies end up happening anyway: someone says something or does something to make it clear what you did was not appreciated.


A bullshit apology would have been full of prevarication and "I'm sorry if you were offended." Timing aside, this was a full-on "Mea culpa. Mea maxima culpa."


For an example of a "bullshit" apology, refer to this: http://blog.steveklabnik.com/posts/2013-01-23-node

At this rate, I'm expecting another blog post comparing these two apologies...


An analogous post from Steve Klabnik:

http://blog.steveklabnik.com/posts/2013-01-23-node


We all make mistakes. Unfortunately, Twitter provides quite a soapbox to amplify such ignorant banter.

What's that they taught us in Kindergarten?

Oh yeah, "If you dont have anything nice to say dont say anything at all."


Corollary: "Think before you speak."


"Think before you tweet."


Little puzzled here. How is it a "mistake"? A mistake is dropping a teacup while you're washing dishes. This is a deliberate act of ridicule.


Dictionary.app says mistake is "an action or judgment that is misguided or wrong: coming here was a mistake | she made the mistake of thinking they were important."

Perhaps you're thinking of "accident".


He did something that he later regretted. We usually call that a 'mistake'. Dropping a teacup while you're washing dishes is usually called an accident.


1) why is this front page HN material? Are the people involved some how important or something? This is TMZ level stuff here...

2) Nice apology - how bout explaining why you found the code offensive in the first place and contributing something positive to the drama?


I find that sometimes people need to learn how to handle popularity and the fact that what they say actually matters.

Else you end up with comments like 'eyes bleeding'; these are extrinsically motivated comments that don't usually represent the true sentiment of the author. They are caused by the need to feed the crowd so as to sustain the crowd.

We potty-train. Why don't we twitter-train?



He calls it "being wrong on the Internet", but doesn't actually admit to being wrong, much less apologize. He seems to take umbrage at being called out on dickish behavior.


"I'm sorry I got called out on my bullshit.", sounds more like it.


Can an experienced JavaScript developer provide some constructive reasons as to why that code might be problematic? (e.g. Is it the eval?)

Might be a good learning opportunity for others, too.


I have my doubts the folks criticizing it actually read the code. Even if they have, what's the point of shitting on someone's pet project? Note that none of them actually give a reason for why the think it's bad. I think the folks criticizing are simply being bullies.

I think the code is fine and the project serves a nice niche. I can never remember the syntax for sed either, so I might actually use this project. No such thing as bad press I guess :)


I don't think it had anything to do with the code. She rewrote sed in JS, which IMO provoked the response (more here http://news.ycombinator.com/item?id=5107625).


If that were true why aren't their uproars over any of these projects:

https://github.com/grosser/pru https://github.com/colinta/ned https://github.com/aljungberg/pyle https://github.com/zzak/gsub https://github.com/bjfletcher/node-js-sed

I'm sure there are more. These are just a few I could find a few minutes.

Sorry, I'm not trying to call you out here. I just have serious doubts that the criticism has anything to do with merit. In other words, I don't think it makes sense to rationalize jerky behavior :(


I dunno, did the other projects get tweeted and hit the right combination of followers? Why does anything get attention/go viral?


It's a fair question. I'm honestly confused about why this blew up in the first place.


Criticism at times can be good, but cutting, humiliating pointless criticism never is. Also the fact that that didn't give her any feedback as to why it is was so wrong, amplifies the fact that it wasn't just criticism.

Mob-mentality is one of the worst things. If Heather hadn't posted on her blog, she might have had to suffer in silence. If you are going to criticize someone, atleast have the decency to point out what's wrong and how they could've done better.


Regarding the latest Twitter hot drama:

There's a lot of ugly code out there. Doesn't mean that the program it runs isn't successful or popular. That's what iteration is for.

I don't believe this is a misogyny issue; it's a general issue of being polite, and telling the person what you have an issue with instead of broadcasting it to the world, just because you can.

The programming community often envisions itself as more altruistic than other sectors of business. If we want to make that closer to reality, we should offer suggestions of how to improve existing code. This benefits everyone, while Twitter blasts benefit no one.

Corey's apology seemed very sincere.

140 characters does make it hard not to be an asshole. So if your tweets sound that way, leave a comment on GitHub instead.

Being a programmer or a creative in general does require a thick skin at times. Lots of people are going to see your work. That doesn't make a half-assed apology sincere. It doesn't matter what company you work for, or how smart you are. There will always be someone smarter, so don't throw stones. Try to be constructive instead.

That is all.


I'm intrigued by how long this thread has gone without anybody mentioning Heather Arthur's gender. Did her critics know she was a woman at the time they ridiculed her code? If so, did that fact embolden them or make them more prone to belittle her work? Would a man's friends have come so quickly to his defense, over a piece of code? Would the men who had made her cry been so quick to feel shitty about it and apologize?

When I first saw the part in Arthur's article [1] about sobbing, I thought it was tongue-in-cheek. Only after I realized Heather was Heather did I reread that section and realize she had shed literal tears. Not sure what that says about me, that I made different assumptions based on gender.

[1] Not the "I'm sorry" article, but the one he links to: http://harthur.wordpress.com/2013/01/24/771/.


I don't get why people are reacting so negatively to this apology. It was concise and sincere, reflecting and learning from a mistake. A lesson we can all learn from, it's far too easy to forget that there are people with feelings behind avatars once you've been cruising the web for a long time.


Well done. Saying sorry is the (easi|hard)est thing to do in situations like this, and you should be commended for doing it out loud.

It's unfortunate that there's permanently indexed copies of all of this attached to everyone's name, but hopefully this will come up in context with the rest.


I think Corey's only mistake is to want to 'be cool' with the other people whining about Heather's code.

Apart from that I believe he has been bullied into apologising for nothing, by people who take themselves too seriously, including Heather.

Being afraid of criticism just shows that you agree with the critics at some level. If you were sure of yourself, c.q. your code, you'd just be able to shrug it off. Instead Heather ran to mommy (HN) and told on the mean kids for not liking her drawing. Instead of seeing that Heather was overreacting mommy forced the 'mean' kids to apologise.

I believe Heather should say that SHE is sorry.


I think that's a decent apology. If apologies are to have any worth, they need to be accepted civilly and not dismissed in favour of unending scorn.


this is a good point. The total offending commentary in his tweet is 'eyes bleeding'. That's it. Compare to all the people wasting paragraphs talking about how insincere he is and what an arsehole he is.

Would these same people be prepared to apologise if he posted a followup saying he'd been crying over the comments on the quality of his apology? Of course not, they'd start talking about how he deserved their judemental comments in the first place.

Pot, kettle, black.


I remember being lectured by one of those guys, Steve Klabnik, on tolerance and inclusiveness at one of the Ignite RailsConf 2012 talks in Austin, TX. This is one of those situations where you really should practice what you preach if you really want to make a difference.

Ah yes, here's the video: http://vimeo.com/41237183


Good man!


Better man: saying sorry before you see your twitter updates on the front page of HN and then feeling bad about it.


Meh. Sometimes people need to read criticism of their actions before realizing the error of their ways.


Total self-awareness is a biological impossibility.


True. I spoke before thinking of the effect. I'm glad it was brought to my attention.


Best man: Not having made the unnecessarily mean remarks to begin with. (Not that I'm always innocent of this myself...)


Those who never make a mistake never learn anything.


The best criticism of this kind of ridicule came from the author in the link he provided in the apology. Namely, those ridiculing the code did so without explaining what's wrong with it (or, better put, how it could be improved). The mockery would have been more excusable if it had come with some means of learning from it.


True, and I still haven't heard anybody explain what the original objections to it were.


It comes down to intention.

If you intend to only use someone as an example of what not to do to others, then you don't see value in politeness.

If your critique is meant to help the person or at least change the criticized behavior , then you should be polite. Politeness works wonders.

I think people intended the former and forgot about the real person.


Tactful, respectful, and genuine. Can we stop talking about this now please?


Let he who has never been an asshole throw the first feces.


Programmers. What a bunch of bastards. (https://www.youtube.com/watch?v=eVSlE28hOgI)


Reasonably good damage control exercise here.


I hope it is an even better "I'm sorry."


Not meant to be a criticism. If this was a normal "I'm sorry," a tweet or private message would have done the job. The very public dimension of this situation makes it a case requiring damage control, hence the multiple apologies on twitter, blog post, HN followup and so forth. It's a pretty good example of how to manage such a situation.


I also sent a private email to Heather apologizing. I felt a public apology was in order, as well, since the mean comment was done publicly. Unfortunately, in such a loud, public setting as twitter, saying "I'm sorry" necessarily takes on a public form, as well.


This is an example of a proper apology.


Moral of the story? Not everyone is a god at programming like you. Remember that you once were in their position.


Very admirable to apologize like this, and very easy to make the mistake you made. I think we all have here.

Discussion forums and social media channels have a way of dehumanizing and desensitizing people.

Take care!


You're only sorry your comment was noticed and attacked.


> Hacker News

Hacker Share Your Feelings




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: