
I'm sorry - eranation
http://programmingtour.blogspot.com/2013/01/im-sorry.html
======
cowboyhero
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?

~~~
gkoberger
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>

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

------
chubot
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)

~~~
Domenic_S
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.

~~~
barrkel
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.

~~~
tlear
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.

------
jballanc
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.

~~~
benburton
> 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.

~~~
jballanc
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.

------
noonespecial
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

~~~
hedwall
Even just "echo *" works.

~~~
noonespecial
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.

------
jpwright
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...](https://github.com/jpwright/debcite/blob/master/search.php#L468)

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

------
robomartin
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.

~~~
pbiggar
> 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.

~~~
EnderMB
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.

------
noonespecial
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.

------
ocharles
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.

~~~
Confusion
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?

~~~
bmj
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?

~~~
__cle
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".

------
__cle
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.

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

~~~
__cle
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.

~~~
exodust
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.

~~~
shrughes
It's only slander if it's false.

~~~
exodust
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).

------
boyter
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.

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

~~~
tantalor
Just stay clear of ruby developers in general.

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

~~~
coreyhaines
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.

~~~
ritchiea
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?

------
jayferd
An analogous post from Steve Klabnik:

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

------
up_and_up
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."

~~~
mingpan
Corollary: "Think before you speak."

~~~
_dark_matter_
"Think before you tweet."

------
tomcam
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.

~~~
petdance
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".

------
blindhippo
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?

------
namank
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?

------
jsmeaton
And David Cramers response: [http://justcramer.com/2013/01/24/being-wrong-on-
the-internet...](http://justcramer.com/2013/01/24/being-wrong-on-the-
internet/)

~~~
nollidge
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.

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

------
michaelkscott
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.

~~~
Domenic_S
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>).

~~~
arockwell
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 :(

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

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

------
ameen
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.

------
johnjlocke
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.

------
nukerhazz
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/>.

------
TomGullen
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.

------
biesnecker
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.

------
mosselman
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.

------
tsieling
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.

~~~
vacri
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.

------
seandhi
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>

------
ryan-allen
Good man!

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

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

~~~
dmix
Total self-awareness is a biological impossibility.

------
numeromancer
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.

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

------
lsiebert
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.

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

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

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

------
silentmars
Reasonably good damage control exercise here.

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

~~~
silentmars
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.

~~~
coreyhaines
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.

------
timinman
This is an example of a proper apology.

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

------
thoughtcriminal
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!

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

------
evilrevolution
> Hacker News

Hacker Share Your Feelings

