Charlie Robbins

Charlie Robbins is the founder and CEO of Nodejitsu, curator of EmpireJS, open source, and native New Yorker.

Charlie is on the Internet as @indexzero. You can also find more of his thoughts at his personal blog sudomakethought.

Published Thoughts

Defining Isomorphic Javascript

A few years back I wrote a blog post analyzing design patterns I saw used historically and how that was going to change with the rise of Node.js. The title of that post was “Scaling Isomorphic Javascript code”, in which I did very little to define what “isomorphic” meant just in the same way that George Lucas did very little to tell you why two downtrodden droids ended up stranded on a desert planet yelling at each other.

Now more than three years later, I hear or read the phrase “isomorphic Javascript” almost daily. That rise in accepted usage has more to do with everyone else than it does to do with yours truly. Yes, I did my part fighting off the Hacker News trolls who called blasphemy for repurposing a mathematical term for Javascript programming, but the actual number of “isomorphic” libraries is staggering. Here are just a few of them that are out there:

So then what is my purpose herein? You might think of it as the portion of my original post that I left out. Namely: just what is Isomorphic Javascript?

First let’s get out our dictionary and see what we’ve got for the scientific and mathematical granddaddy of our present-day vernacular:

iso·mor·phic (adj.)


  • a: being of identical or similar form, shape, or structure
  • b: having sporophytic and gametophytic generations alike in size and shape

2) related by an isomorphism

Clearly 1(b) is not applicable because as much as we wish it were so, computer systems are not biological. This leaves us with the possible definitions:

  • “being of identical or similar form, shape, or structure”
  • “related by an isomorphism”

Now you might think that the first definition is the de-facto since it is “running the same code on the client and the server”, but in fact many libraries have some distinct similarities when running in the different environments. It is for this reason that we should prefer the latter definition of “related by an isomorphism”.

And at this point your eyes glaze over and tell me to go back to my PhD program in discrete math. I don’t actually have a PhD in Mathematics (embarrassing!), but I can still give you a little more context into what exactly an “isomorphism” is. Crossing the boundaries of math and programming is the problem of “screen to world coordinates” and vice versa. In a 3D game, there are all sorts of (x, y, z) coordinates that need to be mapped onto your 2D screen which has (x, y) coordinates. These two coordinate systems are isomorphic via the screen-to-world(x, y) and world-to-screen(x, y, z) functions, which together make up the “isomorphism” that relates them.

In this context, the isomorphism needed for an isomorphic library is related to the semantics of the code itself. You see, these semantics are similar (but not exactly the same) when running either on the client or the server. In many cases they may be exactly the same, but they need not be. The isomorphism is the thing that mucks around with the code to make the two use-cases sane. Take for example, one of the first isomorphic libraries that I wrote: director. Director is a routing library that works for client-side routing and server side routing (both HTTP(S) and CLI).

Yet the semantics of these routing functions are very different. Routing to a POST event in a client-side page makes little to no sense. Nonetheless, I refer to director as an isomorphic library, because there is an isomorphism that relates the two of them. This isomorphism is namely the client-side build script, which takes exactly the methods we need from the larger HTTP(S) / CLI implementation and packages them up into the browser-version.

Simple right? I thought so when I decided to repurpose our friend complex math terminology for complex programming terminology. At least it’s better than a new TLA or FLA because those don’t MEAN enough yet. I hope this has been somewhat educational and I’m looking forward to seeing more isomorphic libraries come out!

This is in memory of...

His beaming smile knew a private agony that burned.

This is in memory of my friend Luk. I've personally battled with how, when, and why to write this. Not only because every keypress is painful to make, but because I was unsure how to handle it publicly. I think the reason why that is will become clear as you read on.

First, I have to start with the facts because they are important. In late December 2013 Luk told a friend of his in Russia over chat that he planned to take his own life on January 1st 2014 by jumping off the Golden Gate bridge. She pleaded with him not to but he told her his mind was made up. Shortly after that he wrote a gist to his friends and family apologizing for his actions and explaining his lifelong battle with depression. Although he wrote that gist on December 26th, he did not send it to his friends and family until very shortly before the end. I have omitted the text here because it crosses the line from memorial into voyeurism. Then after writing his goodbye note, he went on with his life as usual.

He asked me to see a movie with him in Oakland.

He continued his work on npm at Yahoo.

He even went to a New Year's Eve party with friends.

On the afternoon of New Year's Day he sent this tweet. It was a reference to the facetime party snoozer, which had been his meme du jour at the time. Finally at about 5pm (and this is where it gets second hand) a 9-year-old girl saw a man matching Luk's description wearing a purple hoodie jump off the Golden Gate bridge. She was sitting in the back of her parents car stuck in traffic.

I am eternally grateful that there was traffic at that particular time, that a little girl I'll never meet had the presence of mind to tell her parents and that her parents actually did something about it by contacting the CHP (California Highway Patrol). I am grateful because it is the one fact that allowed a private investigator to painstakingly piece together a working timeline of events for what happened. In fact, all of those who were closest to Luk are all indebted to the graciousness of Yahoo, specifically Marisa Mayer who went out of her way to make sure Yahoo hired this private investigator to get to the bottom of this.

I'm sorry for burdening you with the sad facts, but it is an important part of the exposition to Luk's memory since he left in a way that there no physical evidence. In fact, without Yahoo's help he would likely still be "missing" as he was for several months.

Not taking Luk up on his casual offer of a movie just is a regret that will never go away. Even though I know it is part of the “what if” syndrome:

What if I had been a better friend?

What if I had given him a reason to stay?

What if I had only known there was something wrong?

This line of reasoning, however, is painfully futile because more often than not there is very little inkling that something is wrong. Luk was a bright and hilarious person with more reason to live than most. Yet mental illness is not logical.

In April there was a memorial service at Yahoo where I had the opportunity to meet Luk's mom. When you're friends with someone you often forget that there is another group of people who know your friend in an intimate way you never will: their family. When they are gone helping their family grieve is the best thing you can do for their memory.

In 2012 Luk was instrumental in organizing EmpireJS, a JavaScript conference here in New York city. Without Luk, EmpireJS would have not have happened. It would not have happened without many others, but his influence on that first event was very meaningful.

It was for this reason that I felt I had to ask her permission to make a donation in Luk's name to the Samaritans: a local 24/7 volunteer run suicide hotline here in New York City. Not just once but twice. First at the memorial service and then again over email the day before making a short speech at Day two of the conference. I never been so close to tears in a public speech before, and I hope I never will have to again.

Some months after that we had a falling out as friends. He moved to San Francisco and we didn't speak for over six months. When I moved to San Francisco for a few months in late 2013 we had the chance to reconnect as friends in-person over Thai food (no surprise there) which is something I am very thankful. Luk impacted on others' lives in ways I didn't even know about until he was gone. It's ironically tragic that you realize only posthumously how much you had in common with one of your friends and how much closer you could have been. I thought that if we did something good, something to help prevent suicide that I would feel better. But it didn't work. Even after all the things I'd done to remember my friend I still felt the same regret. I know I will still feel it after writing this. It is something that will never go away and I've accepted that.

And that's ok. It’s ok to feel pain. It’s what you do with it that matters. Before writing this I was once again thoughtfully encouraged by Luk’s mother Kathy, because well, writing this is hard. And doing it publicly is even harder. But hopefully for those of you reading it you’ll hold the people close to you a bit closer and remember that humanity is actually more than skin deep.

Intellectual honesty and the dissenting idea

Recently, I attended a local event here in New York City. It was a rather typical affair: colleagues and peers all rubbing elbows in the repetitive humdrum affair of networking. There was one conversation I had, however, that dare I say will sit with me for the rest of my life. I heard a phrase that I had never heard before, but one that I have tried to practice my entire career: intellectual honesty

Harvard ethicist Louis M. Guenin describes the “kernel” of intellectual honesty to be “a virtuous disposition to eschew deception when given an incentive for deception.”(1)

This method of problem solving is characterized by “an unbiased, honest attitude” in the face of overwhelming incentives to skew the world in our favor. This disposition was discussed in Wiener’s 1964 paper entitled “Intellectual Honesty and the Contemporary Scientist”. Going forward he perceived science to be less an individual act and more of a group one. This “intellectual corporation”, as Wiener put it, was not always guaranteed “to do great work”:

There’s another illusion that the more papers are being published, the more science is being done. However, a large number of bad papers means less science is being done.

Intellectual Honesty and the Contemporary Scientist

If this army of scientists producing potentially bad science wasn’t enough there was a further risk that the correct scientific truths would be purposefully ignored because they were unpopular, misunderstood or worst of all: pushed forward by unpopular people.

This has been the case for many giants whose shoulders we stand on today: scientists who persisted even though their ideas were considered laughable or if they themselves were prejudiced against. All of their contributions are now considered truths, facts, and laws.

Looking for some examples? Let’s consider two. First, Cecilia Payne (the first woman to earn a Ph.D. from Harvard) spent four years from 1925 to 1929 doubting her thesis “Stellar Atmospheres, A Contribution to the Observational Study of High Temperature in the Reversing Layers of Stars” because she was dissuaded by her dissertation reviewer, Henry Norris Russell. Today it is considered to be one of the most brilliant Ph.D. theses ever written in astronomy.

Second, in 1838 Michael Faraday first suggested that electromagnetic forces as fields that surround objects with such properties. This foundational scientific truth was largely ignored by the scientific community. But Faraday persisted, and almost 20 years later he was vindicated by Maxwell’s equations which we still use today.

At this point you might be thinking: “we are not scientists and software does not require the same level of scientific rigor, as well, science.” Yet, the idea persists. Just because it originates within the hallowed chambers of scientific achievement, it is not limited to them. Much of what we do today is owed to the same principles. Gödel’s incompleteness theorems, the Church-Turing thesis; the list goes on.

So this is now more important than ever when considered in the context of day-to-day perception and decision making in our “distributed by default” style of communication on the Internet. If we accept that the medium is the vessel, then by definition one is constantly forming opinions based on the emotionally skewed communication of opinions from those we choose to follow.

The very idea of “following” as it is used today indeed itself suggests this bias that is taken for granted and accepted as fact. Then shouldn’t this acceptance of bias as fact, or put more bluntly, this “Death of Expertise” leave us all in our own version of the dark ages? It very well could, but to embrace intellectual honesty is to do one’s part to prevent these disastrous scenarios:

Integrity demands that when a thing is proved wrong, you admit it is proved wrong. But that is not all. “Proved wrong” is very different from “looking peculiar.” Quantum theory looked extremely peculiar when it was started. It didn’t fit any of the preconceived ideas.

Intellectual Honesty and the Contemporary Scientist

Yet embracing intellectual honesty is more than integrity because if one constant holds true across any community it is that there is no constant among the minds of its members. This means that you will have to deal with those who will doubt you. Who will disagree with you. Who will call your ideas cancer.

A person who is to live up to the highest ideas of scientific integrity cannot be led aside by the fact that a piece of work fits the latest style, that everybody’s doing it. They’ve got to be willing to follow it out, even if it doesn’t fit the latest style, if it fits their idea of how the field ought to develop.

Intellectual Honesty and the Contemporary Scientist

This is what is meant by “Intellectual honesty and the dissenting idea”. Dissent is good. Dissent is necessary. Dissent is what moves the needle of humanity. Dissent tempered with honesty and experience mind you, mindless zealots need not apply. And don’t forget to leave your personal attacks at home with the rest of your emotional baggage.

And how does one acquire the experience to know the difference? To navigate between what is impartial and what is personal? That’s the best part of intellectual honesty: if you are unsure of something you can go have a rational, civil, and unbiased conversation with anyone and everyone in your peer group. And you know that your peer group is not lying to you or to the public.

So today try it out: accept intellectual honesty into your heart for just a little while. We all have biases; so view what is obviously and inherently biased as biased. Not as intellectual fact.

In other words:

What you believe?

Because, in closing:

Anybody who believes that they can get away with something that they know isn’t good enough, but will fool everybody else, is a fool.

Intellectual Honesty and the Contemporary Scientist

The medium is the vessel

“The medium is the message”

A half a century ago Marshall McLuhan coined this iconic phrase in his landmark book, Understanding Media: The Extensions of Man. In 1964, the most prevalent media were all broadcast: movies, radio, television, newspapers and books all shared this trait. Only letters and the relatively new telephone allowed for interactive communication and discourse.

Fast forward to today and almost the exact opposite is true. The power of broadcast media, while still strong, is not the all consuming grasp it once was. Interactive and collaborative media has become the norm, not the exception. So, then the question begging to be answered is that if the medium is the message, how has this new paradigm controlled “the scale and form of human association and action” as McLuhan put it in The Extensions of Man?

Each member of the populous at large is now an amateur broadcaster, but every message is inherently biased. There is no Walter Cronkite anymore. They are not impartial because each message is the vessel for the opinions and emotions of the individual, not the organization. There is no peer review. There is no newsroom for social media.

Each broadcast is imbued with the raw emotions of the individual who generated it. Individuals who often have no where else for these emotions to go. Individuals who think that their Tweets, posts, and other broadcasts are making an impact. That they are swaying public opinion. This herculean empowerment of the individual through social media has produced behavior that has wider reaching sociological impacts. 

The first behavior is what I will call “emotional non-action”. That is, since the medium is the vessel for the emotion of the individual, the individuals themselves feel accomplished. That through their drop of water in the ocean they have been heard by the world. 

The second is a behavior that a colleague of mine recently compared to road rage. When someone is in their car, they feel safe. So when a fellow driver cuts them off or makes some other driving mistake, they are emboldened to say similarly awful things, e.g.

“Don’t cut me off you fucking son of a bitch.”

This is, however, what has become a completely acceptable way for one to conduct themselves in public on the Internet. And not just in developer and technology communities where it has been acceptable for more than a decade (remember: don’t feed the trolls), but in our larger society as well. The latter trend has only seemed to reach a critical mass in the last five years.

A good example of this is the tragedy that happened at the Electric Zoo last year here in NYC. If you are not familiar with the incident, Mayor Mike Bloomberg cancelled the last day of the three day music festival because two people had died from drug overdoses. This, while a tragedy, was largely outside the control of any one party. The Internet (through Twitter) decided to blame the dead.

Can you imagine what this did to the parents of these children? Yes. Their children. Can you imagine in your entire life ever saying something as mean and hurtful to their face? Neither can I. But somehow there are millions — literally millions — of public statements like this.

We are losing something important

There is an upward trend in this behavior that is undeniable. Within a few years it will be part of our cultural DNA as a society. Maybe we are at a generational divide. Maybe things are going to get worse until they get better. Until those individuals who grew up being bullied by this behavior have children and they can pass along the next version of “if you don’t have anything nice to say, don’t say anything at all”. I hope that happens because what is most important is that we hold onto our ability for civil and public discourse on subjects that we may disagree.  

Open source consumerism sucks

There. I said it. The green pastures of developer passion are not boundless: they have a finite acreage. A point at which one stops hearing “I love your project!” and “thank you for your hard work” and starts to hear “what have you done for me lately?” or “is this project abandoned?”. Developer psychology has been infected with the sickness of consumerism and there is no going back. Don’t believe me? Well then, let me find my soap box.

In the Cathedral and the Bazaar Eric Raymond said:

Every good work of software starts by scratching a developer’s personal itch.

That makes sense right? You probably have written a module or two yourself. Most likely unpopular modules that don’t go beyond your own itch. The fun weekend side project that gives you a momentary sense of satisfaction because you “built something”.

For whatever reason some modules don’t stay unpopular for long. Jacob Thorton, the creator of Twitter Bootstrap, calls this “the cute puppy syndrome”: where a developer creates a module because they want to. This is “buying the puppy”. Then suddenly, the module becomes exceptionally popular. It “becomes a dog”. And maybe you didn’t want a dog. Maybe all you wanted was a puppy. Suddenly the guilt piles up and doing what you love isn’t fun anymore.

All the developers who help make a module popular (who turn the puppy into a dog) usually have never been on the other end of the story. They have never had to sacrifice to maintain Open Source software. Those who have are more empathetic to the “plight of the maintainer.”

Thus: the mantra of “everyone wants to create, no one wants to maintain” rings true across the plains of Github.

What’s my point will all of this veiled negativity? Why would I choose to fault a system that (overall) has produced such an enormous body of work? A system that fails to accommodate the exceptional will be doomed to mediocracy. In other words: the attitudes from developers have to change if Open Source is going to continue to grow at its current pace. We need more exceptional creative developers to continue building Open Source software. Maintaining is a lot of thankless, unpaid work, and a lot of developers who become active maintainers burn out and leave their respective communities permanently.

If we continue to lose these kinds of seminal minds without learning from the mistakes that lost them we will change from trending upward to trending downward very quickly. Open Source can continue to eat itself so long as it does not overeat its talent pool.