<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Writing from Isaac Z. Schlueter</description><title>blog.izs.me</title><generator>Tumblr (3.0; @izs)</generator><link>http://blog.izs.me/</link><item><title>Seldo's Tumblr: To save you time, here are Friday's tech headlines in roughly chronological order</title><description>&lt;a href="http://seldo.tumblr.com/post/23277913183/to-save-you-time-here-are-fridays-tech-headlines-in"&gt;Seldo's Tumblr: To save you time, here are Friday's tech headlines in roughly chronological order&lt;/a&gt;: &lt;p&gt;&lt;a href="http://seldo.tumblr.com/post/23277913183/to-save-you-time-here-are-fridays-tech-headlines-in" class="tumblr_blog"&gt;seldo&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;OMG Facebook IPO OMG OMG OMG
&lt;/li&gt;&lt;li&gt;Facebook Rises 50% in First Hour of Trading
&lt;/li&gt;&lt;li&gt;Holy Shit Mark Zuckerberg Is So Rich Now
&lt;/li&gt;&lt;li&gt;Look at All These Other Motherfuckers Who Are Also Rich Now
&lt;/li&gt;&lt;li&gt;Some People Who You’d Expect to Get Rich Didn’t Get Quite As Rich As You’d Think
&lt;/li&gt;&lt;li&gt;Oh Man Facebook Employees Are So Rich Now
&lt;/li&gt;&lt;li&gt;Some Random Dude Who Painted a Wall for Facebook in 2005 Is Like a Millionaire Now
&lt;/li&gt;&lt;li&gt;Facebook up 100% on Opening by Lunch Time
&lt;/li&gt;&lt;li&gt;When Will Twitter Go Public?
&lt;/li&gt;&lt;li&gt;Is Pinterest the Next Facebook? (Update: No)
&lt;/li&gt;&lt;li&gt;Holy Shit Those Instagram Guys Are Even Richer Now
&lt;/li&gt;&lt;li&gt;Facebook up 200% on Opening, Bigger Market Cap Than Jesus
&lt;/li&gt;&lt;li&gt;Eduardo Saverin Is Some Kind of Douche, Huh?
&lt;/li&gt;&lt;li&gt;Robert Scoble - “I’m Just Happy You’re Still Paying Attention to Me”
&lt;/li&gt;&lt;li&gt;Sean Parker Is Also Hella Rich
&lt;/li&gt;&lt;li&gt;Is Zuckerberg the Next Steve Jobs?
&lt;/li&gt;&lt;li&gt;Some Dude Who Bought a Domain 20 Minutes Ago Raises $200M to Make “Pinterest for Video”
&lt;/li&gt;&lt;li&gt;Are We Perhaps in Some Kind of Bubble?
&lt;/li&gt;&lt;li&gt;Will Facebook’s IPO Hurt Obama?
&lt;/li&gt;&lt;li&gt;“There Is No Bubble” Says VC Who Would Lose Billions if Bubble Burst
&lt;/li&gt;&lt;li&gt;Is Vidterest the Next Facebook?
&lt;/li&gt;&lt;li&gt;Facebook Plunges After Initial Pop, Closes at 10% over Opening
&lt;/li&gt;&lt;li&gt;Is Facebook Doomed?
&lt;/li&gt;&lt;li&gt;Why Facebook Is Here to Stay
&lt;/li&gt;&lt;li&gt;10 Reasons Facebook Is Doomed
&lt;/li&gt;&lt;li&gt;15 Reasons Facebook Will Be Bigger Than Google
&lt;/li&gt;&lt;li&gt;Yahoo Is Still Screwed, Does Anyone Care? (by Kara Swisher)
&lt;/li&gt;&lt;li&gt;Vidterest Acquired by Chinese Internet Portal for $2 Billion
&lt;/li&gt;&lt;li&gt;Are We Sure It’s Not a Bubble?
&lt;/li&gt;&lt;li&gt;“Stop Calling It a Bubble, Dammit” - Entrepreneur Raising Series A
&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;</description><link>http://blog.izs.me/post/23331036786</link><guid>http://blog.izs.me/post/23331036786</guid><pubDate>Fri, 18 May 2012 20:47:00 -0700</pubDate></item><item><title>

Here are the slides from my TacoConf talk on &amp;#8220;Anarchism for Fun and Profit&amp;#8221;.

Click on...</title><description>&lt;p&gt;&lt;a href="#slide02"&gt;&lt;img width="666" id="slide01" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.001.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are the slides from my &lt;a href="http://tacoconf.com/"&gt;TacoConf&lt;/a&gt; talk on &amp;#8220;Anarchism for Fun and Profit&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Click on each image to go to the next one, or just scroll down leisurely.  If you prefer, you can get this &lt;a href="http://dl.dropbox.com/u/3685/presentations/anarchy/anarchy-tacoconf.pdf"&gt;as a pdf&lt;/a&gt; or &lt;a href="http://dl.dropbox.com/u/3685/presentations/anarchy/anarchy-tacoconf.key"&gt;keynote&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide03"&gt;&lt;img width="666" id="slide02" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.002.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m here today to talk to you all about Anarchism for fun and profit.  Usually, the way we use these words, what we really mean is:&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide04"&gt;&lt;img width="666" id="slide03" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.003.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;play and work.  and as I&amp;#8217;ll hopefully convince you by the end of this, what we typically think of as play or relaxation is just a brief recovery from what we call &amp;#8220;work&amp;#8221; which is actually bullshit.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide05"&gt;&lt;img width="666" id="slide04" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.004.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is what we ought to be doing.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide06"&gt;&lt;img width="666" id="slide05" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.005.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, I&amp;#8217;m gonna give you a little bit of history, mostly to put these ideas into context.  Then, I want to talk about how this applies to work, and some things I&amp;#8217;ve observed in the world of software development.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide07"&gt;&lt;img width="666" id="slide06" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.006.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s start at the beginning.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide08"&gt;&lt;img width="666" id="slide07" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.007.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#8220;Anarchy&amp;#8221; what does that actually mean?  It&amp;#8217;s not just a slogan for punk bands, but it&amp;#8217;s also a pretty broad topic.  The definition is right in the word:&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide09"&gt;&lt;img width="666" id="slide08" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.008.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#8220;An&amp;#8221; meaning &amp;#8220;no&amp;#8221; or &amp;#8220;without&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide10"&gt;&lt;img width="666" id="slide09" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.009.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#8220;Archy&amp;#8221; meaning ruler.&lt;/p&gt;

&lt;p&gt;So, anarchy is the lack of rulers, hierarchies, and so on.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide11"&gt;&lt;img width="666" id="slide10" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.010.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, who runs things?&lt;/p&gt;

&lt;p&gt;Basically, we all do&lt;/p&gt;

&lt;p&gt;Of course, there are degrees of things.  But typically, anarchy implies that associations are voluntary rather than forced, and that each person has control over themselves rather than being controlled by someone else.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide12"&gt;&lt;img width="666" id="slide11" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.011.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A lot of this goes back to a guy named Max Stirner.  Well, actually named Johan Schmidt.  He wrote a book called &amp;#8220;The Ego and Its Own&amp;#8221;.&lt;/p&gt;

&lt;p&gt;One thing that strikes me about Stirner was how similar his lifestyle is to some of ours.  They had this philosophy discussion group back in the mid-19th century in a wine bar in Berlin.&lt;/p&gt;

&lt;p&gt;Karl Marx sat in on a few of their sessions, Bruno Bauer, Friedrich Engels, and a bunch of other names you&amp;#8217;ve heard of if you got a liberal arts education.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t think they biked around eating tacos, and they probably didn&amp;#8217;t write JavaScript in coffee shops, but the similarities to the Oakland tech scene are nonetheless pretty striking.&lt;/p&gt;

&lt;p&gt;In this book, he said that the individual is consumed and overwhelmed by ghosts and illusions.  In order to attain Right Action, these ghosts must be left behind.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide13"&gt;&lt;img width="666" id="slide12" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.012.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s a quote that I think sums up what is so interesting about knowledge workers when they&amp;#8217;re really working at their best.&lt;/p&gt;

&lt;p&gt;So, in other words, he wasn&amp;#8217;t writing because it was his job, he was writing because it&amp;#8217;s what he does.  He is a writer, and he can&amp;#8217;t find out the end of the story unless there&amp;#8217;s someone to tell it to.&lt;/p&gt;

&lt;p&gt;In this passage, he&amp;#8217;s almost half-apologizing for inflicting the truth on society, because he fully expects it will incite revolutions; at the same time saying, &amp;#8220;Well, I need to find out the end, so&amp;#8230; deal with it.&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide14"&gt;&lt;img width="666" id="slide13" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.013.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More in the modern age,&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide15"&gt;&lt;img width="666" id="slide14" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.014.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bob Black is an American anarchist author, one of the most visible members of the &amp;#8220;primativist&amp;#8221; movement.  He&amp;#8217;s been criticized for being a &amp;#8220;lifestyle anarchist&amp;#8221; which is basically a fancy academic term for &amp;#8220;crazy person&amp;#8221;.&lt;/p&gt;

&lt;p&gt;And, certainly, he&amp;#8217;s a little bit kooky.  But!  He wrote a really interesting essay, in his spectacularly bombastic style, called &lt;a href="http://www.primitivism.com/abolition.htm"&gt;The Abolition of Work&lt;/a&gt;.  If you aren&amp;#8217;t a fan of that style, there&amp;#8217;s an essay called &lt;a href="http://www.zpub.com/notes/idle.html"&gt;In Praise of Idleness&lt;/a&gt; by Bertrand Russell, which hits a lot of the same points, but is less confrontational.&lt;/p&gt;

&lt;p&gt;He wrote this back in the 80s, and the central thesis of his whole ideology is that we work too much.  Back in the hunter gatherer days, he says, people actually didn&amp;#8217;t work nearly as much as they do today.&lt;/p&gt;

&lt;p&gt;A lot of the work we do doesn&amp;#8217;t actually have to be done.  And a lot of the time we spend at work, we&amp;#8217;re not even really working, we&amp;#8217;re just sort of fucking around, hoping our boss doesn&amp;#8217;t see us fucking around, because in reality, humans can&amp;#8217;t be productive 100% of the time, and humans can basically &lt;em&gt;never&lt;/em&gt; be productive doing something they hate.&lt;/p&gt;

&lt;p&gt;A choice quote from his essay:&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide16"&gt;&lt;img width="666" id="slide15" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.015.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should go read the essay.&lt;/p&gt;

&lt;p&gt;So instead of being our best, and enjoying our time, and feeling happy, we get into this cycle of anxiety, guilt, and boredom.  Our tasks are boring, so we have a hard time focusing on them, so we don&amp;#8217;t get much done, and then we feel guilty, and are anxious that our bosses will find out and we&amp;#8217;ll be punished somehow.  This anxiety and boredom prevents us from &lt;em&gt;ever&lt;/em&gt; achieving that glorious Csikszentmihalyi &amp;#8220;flow&amp;#8221; state where we have good ideas and feel great.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide17"&gt;&lt;img width="666" id="slide16" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.016.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, now that we&amp;#8217;ve covered the 19th century philosopher anarchists, and the modern day hipster anarchists, I want to switch gears and get a bit more serious here.&lt;/p&gt;

&lt;p&gt;How do we make work not sucky?&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide18"&gt;&lt;img width="666" id="slide17" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.017.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You really can&amp;#8217;t talk about working and management in the modern era without mentioning this guy, Peter Drucker.  It&amp;#8217;s really rare to look back at someone from a few decades ago, who was writing about the future, and just go, &amp;#8220;Yeah&amp;#8230; he was right.  Dude totally called it.&amp;#8221;&lt;/p&gt;

&lt;p&gt;He was born in Vienna, and grew up sort of just all over Europe in the years after WW1, eventually moving to the US in the 30s.  He was influenced at a early age by Keynes and other economists of that time, but he wrote that he was more interested in the behavior of &lt;em&gt;people&lt;/em&gt; rather than the movements of commodities, which is what economists usually focused on.&lt;/p&gt;

&lt;p&gt;Viewed now, in light of the science of behavioral economics, it&amp;#8217;s clear he was really on to something.  Tversky and Kahneman really went on to define that field, but I don&amp;#8217;t have time to talk about them.  His career basically took off with the work he did at GM.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide19"&gt;&lt;img width="666" id="slide18" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.018.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CONCEPT OF THE CORPORATION&lt;/p&gt;

&lt;p&gt;GM, the car company.  Drucker was fascinated with the concept of authority, and really believed that making the world a better place would have to be done by the managers running companies, since they held so much power over so many people.&lt;/p&gt;

&lt;p&gt;GM hired Drucker to do an extensive analysis of their organization, and from 1943 to 1946, he did just that, resulting in a book called &amp;#8220;Concept of the Corporation&amp;#8221; which detailed the structure and politics of General Motors, and also delved into its effects on society at large, from the point of view of the political machinations and teams within the organization.&lt;/p&gt;

&lt;p&gt;See, up until then, management literature usually focused on a very top-down model.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide20"&gt;&lt;img width="666" id="slide19" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.019.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The idea is that you have a leader, and he has some subordinates.  You tell your subordinates what to do, and they do it, possibly by delegating parts of their tasks to their subordinates, and so on.  So, the question was, how do we draw this tree so that it is the most effective, and how do we deliver orders that will be followed effectively?&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a nice simple model, and it&amp;#8217;s probably how most people would go about explaining &amp;#8220;The Organization&amp;#8221; to someone who wasn&amp;#8217;t part of it.&lt;/p&gt;

&lt;p&gt;But Drucker&amp;#8217;s approach was completely different.  He did investigate and explain how GM was organized, and praised them heavily for what was definitely a very scientific approach to developing management techniques and structures.&lt;/p&gt;

&lt;p&gt;However, he also showed in this book that this hierarchy is only the tip of the ice berg of what actually happens.  In actuality, those captains (or directors, or whatever) talk to one another, and also talk to the sergeants and privates in other departments, and so on.&lt;/p&gt;

&lt;p&gt;He noticed that there was all this cross-department interaction, and that the political hierarchy actually got in the way.  He suggested taking advantage of this, by structuring the company more like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide21"&gt;&lt;img width="666" id="slide20" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.020.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A less hierarchical organization structure, where each business unit would be run more like a separate company with its own autonomy, and the ability to freely communicate with other business units.&lt;/p&gt;

&lt;p&gt;Well, that was not taken well at GM, and his book was banned at the company.  What&amp;#8217;s super interesting is that the Japanese car companies &lt;em&gt;did&lt;/em&gt; follow Drucker&amp;#8217;s advice and restructure, and proceeded to take advantage of the benefits that Drucker predicted.&lt;/p&gt;

&lt;p&gt;This was pretty early in his career.  Again and again, the theme runs through Drucker&amp;#8217;s work: Decentralize, push decisions to the edges of the organization, plan on changing direction when the environment changes (he called this &amp;#8220;planned abandonment&amp;#8221;)&lt;/p&gt;

&lt;p&gt;What is most fascinating about Drucker, really his &amp;#8220;crystal ball&amp;#8221; moment, in 1959, in a book called &amp;#8220;the landmarks of tomorrow&amp;#8221;, he coined the term &amp;#8220;Knowledge Worker&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide22"&gt;&lt;img width="666" id="slide21" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.021.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;THE LANDMARKS OF TOMORROW&lt;/p&gt;

&lt;p&gt;Drucker predicted that the &amp;#8220;Blue collar&amp;#8221; worker would soon be a thing of the past.  Increases in mechanization would eventually increase the productivity of a single manual laborer to the point where we just don&amp;#8217;t need people doing that.&lt;/p&gt;

&lt;p&gt;He also predicted that the manual labor that is still required would be outsourced to countries in the process of developing their infrastructures in the context of all this increased mechanization.&lt;/p&gt;

&lt;p&gt;Society would increasingly rely on what he called &amp;#8220;Knowledge Work&amp;#8221;, or occupations where people think for a living.  Whereas the 20th century is characterized by an increase in efficiency of manual work, the 21st century would be dominated by those who can properly understand and leverage Knowledge Work.&lt;/p&gt;

&lt;p&gt;Managing knowledge worker productivity is hard.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide23"&gt;&lt;img width="666" id="slide22" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.022.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The biggest problems is that it&amp;#8217;s not even really clear what it is they&amp;#8217;re doing.  If you have a manual laborer, and his job is to make widgets, you can just count the widgets at the end of the day, and there you go.&lt;/p&gt;

&lt;p&gt;But, somewhat by definition, a knowledge worker isn&amp;#8217;t making the same thing over and over again, and the means of production is not a machine, but their brain, so we have to define the task, and often defining the task improperly can change perceptions and inadvertently reduce productivity&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide24"&gt;&lt;img width="666" id="slide23" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.023.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once upon a time, you&amp;#8217;d either go to school, or not, and then go to a company like GM or ALCOA, or whatever, that existed for as long as you could remember, and you&amp;#8217;d climb a nice little ladder, or stay at the bottom, and after 50 years or so, you&amp;#8217;d retire.&lt;/p&gt;

&lt;p&gt;Well, with Knowledge Work, because it is unstable by its very nature, since the same knowledge doesn&amp;#8217;t &lt;em&gt;need&lt;/em&gt; to be created repeatedly, many of us &amp;#8212; in fact, &lt;em&gt;most&lt;/em&gt; of us &amp;#8212; will have careers that long outlast the companies we work for.  Or, if not, if it&amp;#8217;s a google or apple, something with some staying power, by the time your career is over, it&amp;#8217;ll be a whole different company, making different things in different ways, etc.&lt;/p&gt;

&lt;p&gt;In fact, the industrial revolution had already started this wheel in motion.  The information revolution has just accelerated it to the point where we can actually watch it happen in real time.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide25"&gt;&lt;img width="666" id="slide24" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.024.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve worked at a bunch of companies, even technology companies, that still seemed to be stuck in the last century, and didn&amp;#8217;t quite &amp;#8220;get&amp;#8221; what makes knowledge workers work.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m sure there are a few people out there who just want to put in their 8 hours like Neitzsche&amp;#8217;s Last Man, &amp;#8220;earn a living and keep warm&amp;#8221;.  The rest of the knowledge workers are working to make their jobs obsolete.&lt;/p&gt;

&lt;p&gt;Just as the 20th century was devoted to increasing the productivity of manual laborers to the point where a lot of manual labor simply didn&amp;#8217;t need to be done, today&amp;#8217;s technology is making a lot of inessential knowledge work go away.  Already, many tasks have been replaced by software.&lt;/p&gt;

&lt;p&gt;As Drucker repeated again and again in his work, if you take away the autonomy of knowledge workers, you take away everything that makes them valuable.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide26"&gt;&lt;img width="666" id="slide25" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.025.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Huge fan of this guy.  I think if I had to pick a favorite person I&amp;#8217;ve never met but hope I someday do, it&amp;#8217;d be Merlin Mann.&lt;/p&gt;

&lt;p&gt;You may be familiar with him as the &lt;a href="http://inboxzero.com/"&gt;Inbox Zero&lt;/a&gt; guy, or &lt;a href="http://43folders.com"&gt;43Folders&lt;/a&gt; guy, or &lt;a href="http://twitter.com/hotdogsladies"&gt;@hotdogsladies&lt;/a&gt; on twitter, or a bunch of other things.  &lt;a href="https://www.youtube.com/watch?v=QwRrpCWTiOY"&gt;Talk: Who moved my brain?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Merlin Mann&amp;#8217;s history is somewhat interesting, and I think parallels the trajectory of a lot of reasonably successful modern-day knowledge workers.  He did some web stuff, moved to california, worked at a few companies, pretty much hated it, and then ended up finding a niche where he can do what he&amp;#8217;s really passionate about.&lt;/p&gt;

&lt;p&gt;And that is basically to do podcasts and make dick jokes on the internet, but also he goes and talks to companies about how they&amp;#8217;re literally murdering the souls of their employees.&lt;/p&gt;

&lt;p&gt;In a lot of ways, Merlin Mann reminds me of Peter Drucker, but instead of spending 3 years writing a book to piss off one company, he goes around and talks at companies that never &lt;em&gt;ever&lt;/em&gt; invite him back.&lt;/p&gt;

&lt;p&gt;A lot of his work focuses on being a better knowledge worker, but also basically behaving like grownups in organizations.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide27"&gt;&lt;img width="666" id="slide26" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.026.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is one of those things that&amp;#8217;s really easy to think you understand, but really hard to actually get, especially for managers.&lt;/p&gt;

&lt;p&gt;Even in a lot of places where they&amp;#8217;re are ostensibly trying to empower teams, at some level, priorities are still being handed down to them by people who are under the impression that writing a date on a spreadsheet is some sort of contract with the universe.&lt;/p&gt;

&lt;p&gt;What this ultimately comes down to is that there are a lot of little unreasonable assumptions and expectations we place on one another without even realizing it.&lt;/p&gt;

&lt;p&gt;Managers can say, &amp;#8220;Yeah, check email less, reduce communication overhead, work at a sustainable pace, don&amp;#8217;t be interrupt driven&amp;#8221;, but then when you try to explain what this means: that your employees will only check their email once per day, meetings should have the minimum number of people in them, and so on, they laugh at you like you&amp;#8217;re a crazy person.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide28"&gt;&lt;img width="666" id="slide27" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.027.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my own life, I&amp;#8217;ve been unemployed a few times.  I&amp;#8217;ve been poor, though I was lucky enough to be educated and to have a great support network.  I&amp;#8217;ve worked for tech companies, and sold vacuum cleaners and other things, I&amp;#8217;ve answered phones.  Not having a job when I needed money was probably the most stressful time in my life.&lt;/p&gt;

&lt;p&gt;But, for a few months in 2010, I didn&amp;#8217;t have a job, but I didn&amp;#8217;t actually need one.  I&amp;#8217;d worked at Yahoo for 4 years, and got sort of sick of it.  So, I planned out how long my money would last, and decided to see what would happen if I just didn&amp;#8217;t have an employer for a while.&lt;/p&gt;

&lt;p&gt;I highly recommend knowledge workers do this, at least every few years.  I didn&amp;#8217;t even realize how burnt out I&amp;#8217;d become, and those few months of idleness, well,&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide29"&gt;&lt;img width="666" id="slide28" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.028.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;it just doesn&amp;#8217;t really make much sense to call it &amp;#8220;idleness&amp;#8221;, since it was one of the most productive times of my life.&lt;/p&gt;

&lt;p&gt;Why be productive when you don&amp;#8217;t have a job?&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide30"&gt;&lt;img width="666" id="slide29" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.029.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course, I don&amp;#8217;t want to make it seem like jobs are necessarily bad things.&lt;/p&gt;

&lt;p&gt;A lot of times, a company gives you access and opportunity to do the things you&amp;#8217;re passionate about, and that&amp;#8217;s when it&amp;#8217;s awesome.&lt;/p&gt;

&lt;p&gt;But what really struck me about that time was how I felt so much more motivated to work on node than I ever had felt on any project before.  And as I looked around the node community, it seemed really interesting to me in those early days that everyone was working their asses off, and loving it&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide31"&gt;&lt;img width="666" id="slide30" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.030.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t know if who first coined this term, but I&amp;#8217;ve sometimes referred to the Node.js ecosystem, and particularly the npm registry, as a &amp;#8220;mostly anarchic dictatorship&amp;#8221;.&lt;/p&gt;

&lt;p&gt;That is, there&amp;#8217;s definitely leadership, but the leader&amp;#8217;s role is shrunken down to almost nothing.  Because we built a decent module system, and node provided APIs that were easy to extend, little fiefdoms and satellite projects spun up.&lt;/p&gt;

&lt;p&gt;So, it&amp;#8217;s maybe not &amp;#8220;anarchy&amp;#8221; in the purest sense, but it&amp;#8217;s about as close as we can get.  Anyone has the opportunity to leave and do their own thing, and the leader&amp;#8217;s role is mostly just to help everyone out, not to tell them what to do.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide32"&gt;&lt;img width="666" id="slide31" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.031.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The awesome thing about working on an open source project like Node is that it is an anarchy with one dictator who is really answerable to the rest of the community.  The leader doesn&amp;#8217;t have any control over a person&amp;#8217;s income, so if you want a person to work harder, well&amp;#8230; you have to make it enticing.&lt;/p&gt;

&lt;p&gt;This means that we have to plan for occasional outages, or for people losing interest randomly and disappearing.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide33"&gt;&lt;img width="666" id="slide32" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.032.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The payoff, though, is that people actually have a sense of ownership of what they do, because they&amp;#8217;re endowed with a sense of agency, and that attracts more people to come help, and when they&amp;#8217;re done with whatever it was that was distracting them, they tend to come back.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=u6XAPnuFjJc"&gt;Dan Pink has a great talk on this&lt;/a&gt;, where he goes through lots and lots of evidence and reproduced studies.  The more people feel like they&amp;#8217;re in control of what they do, the more than that they are connected via social ties, the more respect they are shown, the better and more creatively they can perform.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s not about how many hours you spend in an office.  It&amp;#8217;s about what you get done, and how good it is.&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide34"&gt;&lt;img width="666" id="slide33" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.033.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A lot of times, I think teams tend to forget what their mission is.  Or, worse, they may not have ever had one.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s definitely helpful sometimes to have meetings or estimate when things will be done.  Anarchy isn&amp;#8217;t &amp;#8220;everyone run in a different direction&amp;#8221; (or at least, that&amp;#8217;s not very useful or fun most of the time.)&lt;/p&gt;

&lt;p&gt;But I&amp;#8217;ve worked on a lot of projects where I would have sworn that &lt;em&gt;my job&lt;/em&gt; was to pull bullshit estimates out of my ass about ill-defined product features just so some managers could massage the bullshit numbers into bigger bullshit numbers and hand it off to some other manager.&lt;/p&gt;

&lt;p&gt;Which really highlights the point that we need &amp;#8220;leaders, not managers&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide35"&gt;&lt;img width="666" id="slide34" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.034.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a pretty subtle distinction.  But, the verb &amp;#8220;lead&amp;#8221; really implies a much more active role, and an assumption that we are actually going somewhere.  &amp;#8220;Managing&amp;#8221; means we&amp;#8217;re just kinda keeping everything in place.&lt;/p&gt;

&lt;p&gt;The person who is ostensibly in charge of a team of knowledge workers needs to be a person who takes on a lot of group-helping tasks, but also is intimately involved in the project.  Most of their job has to be to listen, not to tell.  Because knowledge work happens best when it&amp;#8217;s fun, and &amp;gt; fun cannot be forced&lt;/p&gt;

&lt;p&gt;&lt;a href="#slide36"&gt;&lt;img width="666" id="slide35" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.035.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;fun cannot be forced.&lt;/p&gt;

&lt;p&gt;People work better when they&amp;#8217;re having fun.  So, this means that you have to let them work on things they care about, help them find good things to work on, and mostly stay out of their way.&lt;/p&gt;

&lt;p&gt;&lt;img width="666" id="slide36" src="http://static.izs.me/anarchy-tacoconf/anarchy-tacoconf.036.png"/&gt;&lt;/p&gt;

&lt;p&gt;So, I&amp;#8217;m way over my time limit here I think, but if anyone wants to talk about any of this stuff, I&amp;#8217;ll be around.  Thanks!&lt;/p&gt;</description><link>http://blog.izs.me/post/23048895912</link><guid>http://blog.izs.me/post/23048895912</guid><pubDate>Mon, 14 May 2012 11:51:00 -0700</pubDate></item><item><title>Beginner Ease</title><description>&lt;p&gt;Pretty much on a daily basis, in some conversation either in real life, or over the internet, someone justifies a software design decision based on something being easier or more difficult to explain to beginners.  Most often, this is regarding programming language design, or language patterns.&lt;/p&gt;

&lt;p&gt;I think the &amp;#8220;easier to explain to beginners&amp;#8221; argument is a fine one if you&amp;#8217;re tasked with making a bunch of beginners productive as fast as possible.&lt;/p&gt;

&lt;p&gt;As it happens, with respect to the JavaScript language at least, I am not a beginner, nor do I share in code creation/maintenance with very many beginners, so that argument is not so compelling to me.&lt;/p&gt;

&lt;p&gt;In my experience, most people spend a short time being a beginner, and then a long time being experts. By the nature of the time spent in each state, there will tend to be more experts than beginners, just as there are typically more adults than children. You certainly wouldn&amp;#8217;t suggest that cars should be illegal simply because it takes so many years for a child to learn to drive responsibly!&lt;/p&gt;

&lt;p&gt;Therefor, for me at least, it seems better to optimize to minimize the mistakes that experts continue to make, and use patterns that will be the most convenient for experts to maintain.&lt;/p&gt;

&lt;p&gt;And becoming an expert is not so hard, really. It just takes a thousand hours or so of JavaScript use (assuming that the person already is a decent programmer in some other language). It&amp;#8217;s a lot easier than becoming a competent dentist or hairdresser or lawyer, and there are plenty of dentists and hairdressers and lawyers.&lt;/p&gt;

&lt;p&gt;As experts, we should not push for less powerful abstractions on the basis that newcomers have a hard time with them.  Instead, we should push newcomers to &lt;em&gt;become&lt;/em&gt; experts by supplying them with mentorship, support, and the truth.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s not to say that the language should be so difficult or abstract as to be completely impenetrable.  We &lt;em&gt;do&lt;/em&gt; need a nice smooth incline to the learning curve, so that newcomers will not be turned away abruptly.  But in general, if you expect people to be somewhat smart and capable, they will be.&lt;/p&gt;</description><link>http://blog.izs.me/post/22112503619</link><guid>http://blog.izs.me/post/22112503619</guid><pubDate>Mon, 30 Apr 2012 00:27:27 -0700</pubDate></item><item><title>Re: @brixen’s "Is Node Better"</title><description>&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: The talk is online at &lt;a href="http://blip.tv/jsconf/jsconf2012-brian-ford-6091521"&gt;&lt;a href="http://blip.tv/jsconf/jsconf2012-brian-ford-6091521"&gt;http://blip.tv/jsconf/jsconf2012-brian-ford-6091521&lt;/a&gt;&lt;/a&gt;.  If you weren&amp;#8217;t there, you should go watch it before reading this.&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;As usual, this year&amp;#8217;s JSConf did not fail to deliver.  The parties, the
location, the talks, the food, it was incredible.  Chris Williams (and
the rest of the JSConf family) really put together an incredible event.&lt;/p&gt;

&lt;p&gt;By far, the most controversial talk was &lt;a href="http://brixen.io/"&gt;Brian
Ford&amp;#8217;s&lt;/a&gt; &amp;#8220;Is Node.js
Better&amp;#8221;.  I must admit, I walked in skeptical.  Brian Ford seems like a
bright and reasonable guy, but is clearly not a noder.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not going to transcribe what he said.  If you want that, read &lt;a href="http://speakerdeck.com/u/brixen/p/is-nodejs-better"&gt;his
slides&lt;/a&gt; and watch
the video when it comes out.  This is my reaction and response, and says
more about me than it does about Brian.&lt;/p&gt;

&lt;p&gt;This is based mostly on my meat-brain memory, and some notes that
I scribbled.  It&amp;#8217;s quite
possible that I may get some of the particulars wrong.  However, rather
than wait for the video to come out, I&amp;#8217;d like to write this now, since
the errors in perception are themselves useful information.  If you
notice any such error, please let me know.&lt;/p&gt;

&lt;p&gt;Of course, there are limits to how deep a speaker can go into a topic in
a 30 minute talk, and those limits are much shallower than how deep I
can go in this blog post.  So, I&amp;#8217;d like to frame this response not so
much as me-vs-Brian, but rather as just another public part of a longer
multi-format conversation.  My goal is not to produce more controversy
than is useful, but to perhaps produce enough to keep things interesting.&lt;/p&gt;

&lt;p&gt;Fair warning, this is a much longer post than most things I write.  If
you&amp;#8217;re reading it, you&amp;#8217;re probably interested mostly in the specific
node stuff at the end.  I&amp;#8217;ve opted not to shorten it too drastically, because
the topics are in my opinion best served by a thorough exploration.&lt;/p&gt;

&lt;h2&gt;[citation needed]&lt;/h2&gt;

&lt;p&gt;A lot of what I&amp;#8217;m talking about is discussed in much more rigor
elsewhere.  This blog post is a synthesis, not a research paper.  In
addition to &lt;a href="http://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374275637"&gt;Thinking Fast and
Slow&lt;/a&gt;
which Brian mentioned, these are about the most
approachable and informative discussions of the subjects that I&amp;#8217;ve
found:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Influence-Science-Practice-ePub-ebook/dp/B001CDZYVE"&gt;Influence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Predictably-Irrational-Revised-Expanded-ebook/dp/B002C949KE"&gt;Predictably
Irrational&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lesswrong.com/lw/xy/the_fun_theory_sequence/"&gt;Less Wrong: Fun Theory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.lesswrong.com/wiki/How_To_Actually_Change_Your_Mind"&gt;Less Wrong: How to Actually Change Your
Mind&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;The Right&lt;/h2&gt;

&lt;p&gt;Brian started his talk with a very insightful exploration of the nature
of controversy.  He talked about our fast brain and slow brain, and
guaranteed that reading &lt;a href="http://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374275637"&gt;Thinking Fast and
Slow&lt;/a&gt;
would change your life for the better, or he&amp;#8217;d refund the cost of the book.&lt;/p&gt;

&lt;p&gt;In discussing the title of the talk, he made the point that every value
judgement implies a comparison, and invites controversy.  If presented
with a choice of apples and oranges, and you remark that &amp;#8220;oranges are
healthy&amp;#8221;, then the implication is that apples are not (or at least
&lt;em&gt;less&lt;/em&gt;) healthy.  So, the question &amp;#8220;Is Node.js Better&amp;#8221; raises the
question, &amp;#8220;Better than what?&amp;#8221;&lt;/p&gt;

&lt;h3&gt;Storming Brains&lt;/h3&gt;

&lt;p&gt;He went on to stress the importance of the scientific method, especially
in cases where groupthink can grab ahold of a popular intuition.  A
powerful example of this is the idea of brainstorming, which has come
under
&lt;a href="https://en.wikipedia.org/wiki/Brain-storming#Criticism"&gt;criticism&lt;/a&gt; in
recent studies.&lt;/p&gt;

&lt;p&gt;Of course, another fascinating point worth mentioning (which was not covered
in Brian&amp;#8217;s talk) is that the primary
source of the criticism is a survey of the results of 22 different
studies with different methodologies, done in different environments,
on different subjects.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m wondering what the differences are between the 4 where brainstorming
worked, and the 18 where it didn&amp;#8217;t.  It&amp;#8217;s especially worth noting that
18 instances of brainstorming&amp;#8217;s failure vs 4 instances where it was
successful, does not imply that brainstorming is &amp;#8220;usually&amp;#8221; less
effective: only that it&amp;#8217;s usually less effective in the studies
surveyed.  If you check the weather in Wisconsin 18 times in the summer,
and 4 times in the winter, you might conclude it&amp;#8217;s usually tropical.&lt;/p&gt;

&lt;p&gt;This survey was reported several
times in the Journal of Personality and Social Psychology.  More
recently, these journal articles were summarized in the New Yorker and
other popular magazines.  To me, this smacks of &amp;#8220;turns out&amp;#8221;-ism.  It
&lt;em&gt;might&lt;/em&gt; be that the popular intuition about brainstorming is wrong.  It
might also be that it&amp;#8217;s just incomplete.&lt;/p&gt;

&lt;h3&gt;Organization&lt;/h3&gt;

&lt;p&gt;Brian discussed the concept that organizations tend to perpetuate the
problems that they were designed to solve.  To my mind, this implies
that we ought not to try to solve our problems with organizations, but
rather, to solve them with chaos and disruption instead, wherever possible.
Since it is often not possible, and because &amp;#8220;disruption&amp;#8221; becomes just
another buzzword meaning a specific sort of organization, we should make
it our goal not to &amp;#8220;solve problems&amp;#8221;, but rather to find the problems
that are hidden by our current assumptions.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Solving&amp;#8221; a problem, then,
becomes more an exploration than a &amp;#8220;fix this thing&amp;#8221; exercise.  An
exploratory expedition stops exploring when it returns with an answer.
Similarly, organizations that are designed to solve a specific problem
(as opposed to organizations that are designed to, say, throw parties or
make buttons)
should have their own destruction built into their core constitution.&lt;/p&gt;

&lt;p&gt;This principle of minimum institution has guided the choices we&amp;#8217;ve made
in npm and in Node.js, technologically as well as socially.
It has shaped the community in subtle ways that
are difficult to recognize from the outside.  It&amp;#8217;s a principle that is
close to my heart, and it&amp;#8217;s why Node and I have gotten along so well.&lt;/p&gt;

&lt;h3&gt;Behavioral Science&lt;/h3&gt;

&lt;p&gt;&amp;#8220;Programming is a behavioral science.&amp;#8221;  Couldn&amp;#8217;t agree more.  However,
the transition from &amp;#8220;behavioral science&amp;#8221; to concurrency as a way to deal
with scarcity of compute resources felt a bit forced to me.  From that
point of view, everything is behavioral science, because everything we
do is done out of some human need (or else we wouldn&amp;#8217;t do it.)&lt;/p&gt;

&lt;p&gt;I think it&amp;#8217;s more precise to say that software development is behavioral
science, because every interface is a human interface, and humans are
even more unreasonable in their behavior than hard disk platters.&lt;/p&gt;

&lt;h2&gt;The Wrong&lt;/h2&gt;

&lt;p&gt;There were a few points where I believe that Brian simply was either
incorrect, misinformed, or perpetuating and reacting to
the very groupthink that he is ostensibly setting out to move past.&lt;/p&gt;

&lt;h3&gt;Justifications for Using Node.js&lt;/h3&gt;

&lt;p&gt;There were a few justifications for using Node that Brian listed:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;same language on the client and server&lt;/li&gt;
&lt;li&gt;there are many JavaScript programmers&lt;/li&gt;
&lt;li&gt;Node.js is more fun&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;These are all interesting justifications, though really, the
first two are rationalizations for the third.  For a talk that started
out by diving into the science of hedonics and decision theory (albeit
a somewhat Gladwell-esque popularization of it), I was a bit disappointed to
see that he didn&amp;#8217;t go into more depth on this point.&lt;/p&gt;

&lt;p&gt;He said that users call themselves polyglots, so he rejects the claim
that a single language is actually relevant.  This is a highly specious
rebuttal.  I can stand, but I still often find it pleasant to sit.  It
doesn&amp;#8217;t have to be &lt;em&gt;necessary&lt;/em&gt; in order to be valid
in this case, it only needs to be &lt;em&gt;comfortable&lt;/em&gt;.  If you&amp;#8217;ve never
worked in a single-language stack, I highly recommend it.  Even though
you can&amp;#8217;t share a lot of code in most situations, it does reduce the
cognitive load switching between different parts of the application.
This is the same reason that I&amp;#8217;ve suggested using semicolons in
JavaScript programs that include other non-ASI languages: reducing
switching cost is reducing cost.&lt;/p&gt;

&lt;p&gt;Brian claimed that the &amp;#8220;many JavaScript programmers&amp;#8221; argument is
invalid, or at least, not very compelling. We ought to figure out the
ideal platform, he said, and then provide advocacy, education, and
resources to help people adopt it.  This also strikes me as a bit weird.
I&amp;#8217;m not claiming that one should make all their technical
decisions based solely on popularity, of course, but it certainly is not
&lt;em&gt;irrelevant&lt;/em&gt;.  There&amp;#8217;s something to be said for pragmatism.&lt;/p&gt;

&lt;p&gt;People don&amp;#8217;t use Node.js because it&amp;#8217;s the same language on the client
and server.  They use Node.js because that language is &lt;strong&gt;JavaScript&lt;/strong&gt;,
and JavaScript is fun.&lt;/p&gt;

&lt;p&gt;There aren&amp;#8217;t more JavaScript programmers because of a lack of education
or advocacy in other languages.  JavaScript is fun (and unavoidable),
and so all programmers use it.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Node.js is more fun.&amp;#8221;  This reminds Brian of Ruby a few years ago.
It&amp;#8217;s important to remember, in the context of hedonics especially, that
&amp;#8220;fun&amp;#8221; is a highly subtle term worthy of study on its own.&lt;/p&gt;

&lt;p&gt;The problem with &amp;#8220;Justifications for doing X&amp;#8221; is that we do things
&lt;em&gt;primarily&lt;/em&gt; because of our emotions.  Even the action of &amp;#8220;being rational&amp;#8221;
is a thing that we choose to do because of a positive feeling attached
to our self-image as a &amp;#8220;rational person who does smart things&amp;#8221;, and the
assumption that we&amp;#8217;ll get some pleasantly winful reward that feels good.
When we really want to do something irrational, we usually have no problem
reconciling the conflict with our preferred self-image as a rational
individual.&lt;/p&gt;

&lt;p&gt;Emotions are not just &lt;em&gt;part&lt;/em&gt; of motivation, they &lt;em&gt;are&lt;/em&gt; motivation.  If you
want to know why a person does something, don&amp;#8217;t ask them to explain why
they do it; try instead to figure out how they feel.  It&amp;#8217;s a much more
challenging question, but it leads to much more interesting information.&lt;/p&gt;

&lt;h3&gt;About the word &amp;#8220;hype&amp;#8221;&lt;/h3&gt;

&lt;p&gt;When we have a good feeling about something (or even,
when we just make any choice at all, and don&amp;#8217;t quite understand why),
our brain begins inventing rationalizations right away.  The
first one to pattern-match against &amp;#8220;X because Y&amp;#8221; is likely
accepted as the &amp;#8220;reason&amp;#8221; we&amp;#8217;re doing something, regardless of how much
the truth of &amp;#8220;Y&amp;#8221; actually affects the likelihood of &amp;#8220;X&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Try asking a compulsive gambler why he goes to the casino.  He might
tell you about his &amp;#8220;strategy&amp;#8221; for roulette.  Of course, this is
bullshit.  Roulette is a deterministically losing game; the more you
play, the more you lose.  Same with craps, slots, and
(unless you&amp;#8217;re the best at the table) poker.  It&amp;#8217;s the
&lt;strong&gt;feeling&lt;/strong&gt; of winning that he&amp;#8217;s chasing, and the &lt;strong&gt;feeling&lt;/strong&gt; of the
chase.  If he was truly motivated by the desire for money,
there are obviously much better ways of getting it.&lt;/p&gt;

&lt;p&gt;When a person shares their justifications for doing something,
one of two things typically happens, in the &amp;#8220;fast-brain&amp;#8221;:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;You feel the same way about the thing.  The justification
pattern-matches against &amp;#8220;I should X-that-I-do because Y&amp;#8221;, and so
you accept the justification as rational, wise, and well-informed.
After all, you already do it, so you must agree.&lt;/li&gt;
&lt;li&gt;You feel differently about the thing.  Or, at least, it&amp;#8217;s not a thing
you do, and so you have invented some justifications for not doing
it.  Your brain pattern-matches against &amp;#8220;I should
X-that-is-stupid because of Y&amp;#8221;, and so you reject the justification
as irrational, foolish, and ignorant.  After all, it&amp;#8217;s stupid, so any
justification must be misguided.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;If you have some vegan friends, and some friends on the paleo diet, and
feel like watching some fireworks, ask them in each others company why
they eat the way that they do.  No matter how polite they try to be,
each will &lt;em&gt;subconsiously&lt;/em&gt; perceive the statements of the other as an
attack, and feel the need to defend their position.  If they are wise
enough to retreat from needing to &lt;em&gt;convince&lt;/em&gt; the other, they&amp;#8217;ll most
likely at least make a big show about &amp;#8220;agreeing to disagree&amp;#8221;.
(Of course, if they&amp;#8217;ve been on this diet for a while, they may have
enough practice at these sorts of situations to handle them quite
gracefully.)&lt;/p&gt;

&lt;p&gt;If X is not just &amp;#8220;do this action&amp;#8221;, but rather &amp;#8220;feel this way&amp;#8221;, and you
do not already feel that way, and the justification is not enough to
incite this feeling (as justifications almost never are),
then we label it &amp;#8220;hype&amp;#8221;, and it &lt;em&gt;raises&lt;/em&gt; the bar
that we now require to take the thing seriously next time.&lt;/p&gt;

&lt;p&gt;Like so many cognitive
shortcuts, this is a really good move much of the time.  After all,
people&amp;#8217;s justifications are usually self-delusions as often as
well-informed and rational reasons for doing or thinking anything.  It
makes perfect sense to be extra skeptical when we are at the risk of
being influenced by it.  If we have to be extra skeptical over and over
again, we start to pattern match &amp;#8220;X is good&amp;#8221; into the hype category.
Suddenly, it&amp;#8217;s not just that veganism or paleo is not for me, it&amp;#8217;s that
the diet is a mark of a foolish &lt;em&gt;person&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The net result is that anyone saying anything positive is likely to be
labelled a &amp;#8220;fanboi&amp;#8221;, and their statement called &amp;#8220;hype&amp;#8221;, no matter what
they say.&lt;/strong&gt;  This is a dangerous feedback loop that leads technology
communities to stagnation, bitterness, and chest-beating.&lt;/p&gt;

&lt;h3&gt;Yo Dawg! I heard you like cognitive distortions, so I distorted your cognition so you can distort while you cognit!&lt;/h3&gt;

&lt;p&gt;The mind is such a wonderful thing!  Mistakes in the mistake
detection lead to potentially valid statements being
discounted because they are presented &lt;em&gt;along with&lt;/em&gt; invalid justifications,
or presented &lt;em&gt;by&lt;/em&gt; a low-status speaker, or are &lt;em&gt;in conflict with&lt;/em&gt;
already-held beliefs, &lt;em&gt;especially&lt;/em&gt; when those already-held beliefs are a
part of our Tribal Story.&lt;/p&gt;

&lt;p&gt;Even worse, you have situations where we see a few &amp;#8220;X is good because Y&amp;#8221;
justifications, deem them false, and then subconsciously
internalize the fact that we
gain status in our tribe by applying the &amp;#8220;hype&amp;#8221; label and
discounting it, resulting in spiraling down into the toilet.
Politicians and marketers have made a science of getting us to elevate
arbitrary ideas into this Tribal Story, blinding us to any disagreement.&lt;/p&gt;

&lt;p&gt;Birds fly.  Fish swim.  Humans make mistakes.  It is our Super Power.
We all do this.&lt;/p&gt;

&lt;p&gt;We almost never change our minds.  We are influenced in ways we are
incapable of detecting (and will deny!)  We are motivated by the behavior
of people who look like us superficially, and believe (at least temporarily)
literally everything we hear.&lt;/p&gt;

&lt;p&gt;There is virtually no limit to the ability
of the human mind to find new and creative ways to get out of touch with
reality.  I don&amp;#8217;t want to give the impression that I (or anyone) could
delineate all the many subtleties of human cognitive error.  Every one
is so rich and complicated.  Even this discussion of
pattern-matching &amp;#8220;X-because-Y&amp;#8221; is a serious oversimplification.&lt;/p&gt;

&lt;p&gt;In the ancestral environment of adaptation, disagreement was often
fatal.  We&amp;#8217;ve gotten a bit better at intelligent disagreement, but we
still try unconsciously to come to an all-or-nothing agreement within
our own heads, annihilating any &amp;#8220;bad&amp;#8221; idea entirely, and shrowding any
&amp;#8220;good&amp;#8221; idea in a halo.&lt;/p&gt;

&lt;p&gt;Whenever tempted to call something &amp;#8220;hype&amp;#8221; (or, even, &amp;#8220;anti-hype&amp;#8221;),
I try to remember to ask the following questions:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Is the provided justification &lt;em&gt;evidence&lt;/em&gt;, &lt;em&gt;data&lt;/em&gt;, or an expression of
a &lt;em&gt;feeling&lt;/em&gt;?  What is the speaker&amp;#8217;s experience of the thing being
discussed?  If it&amp;#8217;s evidence, is it reproducible?  If it&amp;#8217;s data, is
it relevant?&lt;/li&gt;
&lt;li&gt;How do I feel about the subject?  How did I feel about it
yesterday?  What are my justifications?&lt;/li&gt;
&lt;li&gt;Am I tempted to dismiss this?  Is it because of bad evidence,
a speaker who holds low status in my tribe,
or because I disagree with the feeling?  If it&amp;#8217;s a lack of evidence,
what evidence &lt;em&gt;would&lt;/em&gt; make me feel the same way?  If it&amp;#8217;s a feeling I
don&amp;#8217;t share, what other things &lt;em&gt;do&lt;/em&gt; I feel that way about?  If it&amp;#8217;s a
low-status speaker, how would I feel if &lt;code&gt;&amp;lt;person I respect&amp;gt;&lt;/code&gt;
was saying it?&lt;/li&gt;
&lt;li&gt;Am I tempted to accept this?  Is it because it agrees with something
I already think?  What new information does it actually contain?&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;This is part of the reason why I try to criticise Node.js
and npm as harshly and often and publicly as I can.  I do think that
they&amp;#8217;re tremendously useful tools&amp;#8230; but how can you believe me if I
tell you that they&amp;#8217;re perfect, when I clearly know better?  And if you
can&amp;#8217;t believe me when I talk about Node.js, then what good am I?&lt;/p&gt;

&lt;h3&gt;Better justifications to use Node.js&lt;/h3&gt;

&lt;ol&gt;&lt;li&gt;The IO paradigm is a good fit for your problem, and V8 is fast enough.
This is the case for a lot of web software, but definitely
not every program.  Node.js really does make
it pretty easy to write things like IRC bots and crawlers and
websites, and is probably not ideal for many compute-intensive
applications.&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s fun to write programs in this fashion.  There are time-honored
traditions of thinking of data as streams of bytes, and JavaScript is
a relatively simple and expressive language for doing this in
creative ways.&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s fun to be a part of making a popular platform better.  The
community is active and still pretty friendly, and that feels good to
be a part of.  Newcomers turn into regulars and then celebrities very
swiftly.  All it takes is a bit of persistence and enthusiasm.&lt;/li&gt;
&lt;li&gt;You prefer the simpler approach to asynchronous programming, using a
callback/observer model (or actor model for child processes), rather
than something like green threads or coroutines that &amp;#8220;look&amp;#8221; synchronous.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;If you&amp;#8217;re not writing systems that are well served by nonblocking IO, or
an event loop/observer pattern approach, or if you don&amp;#8217;t think it&amp;#8217;s fun
to make programs this way, then you probably shouldn&amp;#8217;t use it.&lt;/p&gt;

&lt;p&gt;But, even that aversion is worth looking carefully at that, no matter what
you decide.  V8 is an extremely fast virtual machine, and
these days, a &lt;em&gt;lot&lt;/em&gt; of programs are IO-bound.&lt;/p&gt;

&lt;p&gt;And even if it&amp;#8217;s not, we tend to focus on &amp;#8220;the right tool for the job&amp;#8221;,
at the exclusion of &amp;#8220;an awesome tool for the job&amp;#8221;.  The opposite of
&amp;#8220;right&amp;#8221; is &amp;#8220;wrong&amp;#8221;, but the opposite of &amp;#8220;awesome&amp;#8221; is &amp;#8220;boring&amp;#8221;, which is
sometimes worse, especially if you&amp;#8217;re trying to maximize creativity.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not sure how much research Brian did when he went out looking for
justifications for using Node.js, but I don&amp;#8217;t think he really got at
what actually is driving so many people interested in this thing.&lt;/p&gt;

&lt;h2&gt;Controversy&lt;/h2&gt;

&lt;p&gt;So far, I felt like the setup was nice, but the criticism itself was
kind of lackluster.  We&amp;#8217;ve heard it before.  Node is hyped.  The
single-language stack isn&amp;#8217;t all it&amp;#8217;s cracked up to be.  Etc.  I was
eager for the meat.&lt;/p&gt;

&lt;p&gt;No sooner had I thought this, than the next slide said:&lt;/p&gt;

&lt;h3&gt;Node.js rejects reality&lt;/h3&gt;

&lt;p&gt;Aha!  There it is.  That primal &amp;#8220;under attack&amp;#8221; feeling, the visceral
tension in my lower abdomen, the warmth on my face.&lt;/p&gt;

&lt;p&gt;When I was younger (and still today when I&amp;#8217;m not at my best, I must
admit) the temptation was to hit back, or dismiss the message.  Fight or
flight.  I think Brian probably
lost a bunch of the audience with this slide.  It sure did get my attention.&lt;/p&gt;

&lt;p&gt;These days, when I feel that reaction, I try to leverage the added
awareness that comes with the adrenaline, to be on the lookout for
whatever comes next, because it is full of valuable information,
especially if it is highly disagreeable.  Beware of the moments
when rationality tries to slip away: those are the times you most need
it.&lt;/p&gt;

&lt;p&gt;As I am somewhat dogmatic about endeavoring to
reject reality less, I was very excited to hear what we might be
missing.&lt;/p&gt;

&lt;p&gt;Sadly, the justification for the &amp;#8220;ignores reality&amp;#8221; claim was not as
pointed as I would have liked.  It amounted to:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;JavaScript is a garbage collected language.  Garbage collection
pretends that you have infinite memory, and you don&amp;#8217;t.&lt;/li&gt;
&lt;li&gt;IO always &amp;#8220;actually&amp;#8221; blocks somewhere, so the comparison between
events and blocking is not valid, since it has to block somewhere.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;For sure, garbage collection is tricky, and the interaction between
Node.js and the V8 garbage collector could probably be improved.  But to
call it a lie is a bit silly.  Garbage collection doesn&amp;#8217;t pretend that
you have infinite memory; that&amp;#8217;s virtual memory.  Garbage collection
pretends that you don&amp;#8217;t have to &lt;code&gt;free&lt;/code&gt; memory in order for it to be
re-used.&lt;/p&gt;

&lt;p&gt;One of the biggest pain
points of non-managed languages is having to explicitly free memory.
The biggest pain point in managed languages is having to deal with a
garbage collector.  There may be some sort of approach to memory
management that isn&amp;#8217;t collected or manual, but better than either.  If
so, I don&amp;#8217;t know of it, and it doesn&amp;#8217;t matter anyway, because &lt;strong&gt;that is
a language design problem, and Node.js is not about designing a
language&lt;/strong&gt;.  If you have a beef with garbage collection, take it up with
V8 and TC-39.&lt;/p&gt;

&lt;p&gt;As for node being single-threaded, and IO always blocking, that&amp;#8217;s kind
of confusing to me.  Of course, you don&amp;#8217;t
actually have application-level &lt;em&gt;processing&lt;/em&gt; of IO in parallel,
since there&amp;#8217;s only a single &lt;em&gt;JavaScript&lt;/em&gt; thread, but IO definitely is
performed in parallel to the degree that the machine can provide,
and &amp;#8220;nonblocking&amp;#8221; is the technical term for the
type of IO that node does on sockets.  (Nonblocking IO on files is
simulated using threads.)&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d really like more details about what exactly Brian
was referring to on this point about IO &amp;#8220;always blocking somewhere&amp;#8221; and
in what way Node.js rejects that reality.&lt;/p&gt;

&lt;h3&gt;entire ecosystem of tools and libraries must be built&lt;/h3&gt;

&lt;p&gt;This was a valid concern in 2010.  I said at the time that it
would not be an issue in a few years.  It&amp;#8217;s not an issue today.&lt;/p&gt;

&lt;p&gt;To an extent, this was by design.  A large part of
Ryan&amp;#8217;s reason for choosing
JavaScript was that it is the only popular interpreted language with a
suitably powerful VM and no existing IO paradigm.  Additionally,
to the extent that JavaScript &lt;em&gt;does&lt;/em&gt; have a tradition of IO, it&amp;#8217;s
XHR and the DOM, which are event-based and asynchronous.&lt;/p&gt;

&lt;p&gt;Since the birth of Node.js, a lot of libraries have been built.  There
are 8500 modules on
npm.  There are bindings to every popular database, sophisticated test
frameworks, template libraries, HTTP routers, and so on.  It&amp;#8217;s easy and
fun to write modules, and so people have written modules.  This approach
is remarkably valuable.&lt;/p&gt;

&lt;p&gt;That being said, module discovery and visibility leaves a lot to be
desired.  npm has grown much faster than Rubyforge or PyPI, much earlier
in the life of Node, and so we have hit these problems earlier.&lt;/p&gt;

&lt;p&gt;Regarding tools, things are coming along quite nicely.&lt;/p&gt;

&lt;p&gt;Post-mortem debugging with MDB
just landed in the master branch, and will be in node 0.7.8.  (Node v0.6
has had this for a while already.)  Mad props to Dave Pacheco for that.
Seriously, if you&amp;#8217;ve never seen it in action, it&amp;#8217;s amazing.  In all my
years using PHP, I can&amp;#8217;t even count the number of times I&amp;#8217;d desparately
wanted this sort of thing.  The zend IDE had some pretty good debugging
capabilities, but Dap&amp;#8217;s jsstack stuff is truly magical.  Call me a
fanboi, I don&amp;#8217;t care: believe the hype.  It&amp;#8217;s fantastic.
The only sad
point is that it&amp;#8217;s only available in SmartOS, but it&amp;#8217;s not exactly
surprising that the OS made by Joyent has some special love for Node.js
;)&lt;/p&gt;

&lt;p&gt;The DTrace support in Node is also impressive.  Again, not
surprising, given the fact that so many DTrace heavyweights work at
Joyent, but the go-to DTrace library for node is not written by a Joyent
employee.  It&amp;#8217;s Chris Andrews&amp;#8217;
&lt;a href="https://github.com/chrisa/node-dtrace-provider"&gt;node-dtrace-provider&lt;/a&gt;
module.  Anarchy &amp;gt; curation, yet again.&lt;/p&gt;

&lt;p&gt;The depth and breadth of information that can be provided by
DTrace, and the great work by Brendan Gregg and others at Joyent to
actually massage that data into a format that humans can easily consume,
is absolutely phenomenal.&lt;/p&gt;

&lt;p&gt;Similar work on run-time analytics and post-mortem debugging is underway
at Microsoft, I&amp;#8217;m told.  Windows users: stay tuned.&lt;/p&gt;

&lt;p&gt;As a long-time text-editor-and-shell guy
(moved from TextMate to vim a while ago), I don&amp;#8217;t really
follow the IDE stuff too closely.  But, Microsoft,
Cloud9, and many others are iterating furiously in this space.
Many of them are leveraging their existing work on other JavaScript
tooling, so it&amp;#8217;s moving quite fast.&lt;/p&gt;

&lt;p&gt;The built-in node debugger client is more my style, but node-inspector
hooks into the Chrome debug tools, which imo blow away most visual
debuggers available.  (They even have heap analysis tools!)  There are
also plugins for Eclipse to provide stepwise debugging and analysis, and
a lot of existing Eclipse users are more at home there.&lt;/p&gt;

&lt;p&gt;So, it&amp;#8217;s not so much that the ecosystem of tools &amp;#8220;must
be built&amp;#8221;, as much as that it is being built, and leverages the existing
JavaScript, V8, and system tools that already existed before Node showed
up.  In many ways, Node.js provides one of the first server-side systems
that can fully take advantage of these things in a mostly cross-platform
fashion.&lt;/p&gt;

&lt;h3&gt;Node.js will reproduce the last 15 years of ruby mistakes&lt;/h3&gt;

&lt;p&gt;Bold claim.  One that I was excited to see ample justification for.  What
are the last 15 years of Ruby mistakes?
How can we avoid making those
same mistakes?  How did ruby fix them?  What can we learn from ruby&amp;#8217;s
experience?&lt;/p&gt;

&lt;p&gt;Brian&amp;#8217;s main justification of this point was that the
cluster module is a repeat of Phusion Passenger.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s not entirely
clear whether he was referring to TJ&amp;#8217;s &amp;#8220;cluster&amp;#8221; package, or the
built-in &amp;#8220;cluster&amp;#8221; module in v0.6, or the much improved &amp;#8220;cluster&amp;#8221;
module in node v0.7.  None of them are a particularly close reproduction
of passenger, though I suppose that TJ&amp;#8217;s is probably the closest.  But
it&amp;#8217;s not as if any of these are an Apache plugin, or tied to a specific
web framework.  The analogy is a stretch, to say the least.&lt;/p&gt;

&lt;p&gt;What&amp;#8217;s even less clear is how Phusion Passenger, a program written in
2009, and widely recognized as the most effective and popular way to
deploy the most effective and popular Ruby application framework, can
possibly represent a &amp;#8220;mistake&amp;#8221;, let alone 15 years of mistakes.&lt;/p&gt;

&lt;p&gt;I can only conclude that I do not understand what he was trying to say,
because otherwise, I cannot make sense of it.
Maybe there was something else called &amp;#8220;passenger&amp;#8221; in the Ruby world once
upon a time, which did kernel load balancing, IPC, and not much else.
Perhaps this &amp;#8220;passenger&amp;#8221; was deemed a mistake, and is now gone.&lt;/p&gt;

&lt;p&gt;Show me a ruby mistake we&amp;#8217;re reproducing, and I&amp;#8217;ll make sure it gets
fixed.&lt;/p&gt;

&lt;h3&gt;process concurrency is doomed&lt;/h3&gt;

&lt;p&gt;Brian declared that process concurrency will never be able to scale
adequately.  I cannot accept this without data.  Instead of data, he
gave some hand-wavey assertions about garbage collection getting out of
control.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll assume that he was running low on time, and perhaps had to cut out
the histograms and demonstrations.  So let&amp;#8217;s leave that question open.&lt;/p&gt;

&lt;p&gt;Of course, spawning one process per request, or one process per IO
or timer, is completely unreasonable.
That&amp;#8217;s why CGI was not adequate, and no one runs a real web platform
on bash.  However, running a single process
per core, and having multiple HTTP servers share the open socket,
and then using an event loop for IO and timers, is remarkably effective.&lt;/p&gt;

&lt;p&gt;If there is doom on the horizon, don&amp;#8217;t hint about it.  Show me the
evidence.&lt;/p&gt;

&lt;h3&gt;symmetric errors, chain of evidence&lt;/h3&gt;

&lt;p&gt;Finally!  Something that &lt;em&gt;genuinely sucks a &lt;strong&gt;lot&lt;/strong&gt; in Node.js!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Domains is on the list for v0.8.  I don&amp;#8217;t know that the first pass at
domains will be the final and ultimate fix for this, but it&amp;#8217;ll be
something to iterate on.  This will make errors much more symmetric, and
provide a much clearer chain of evidence.&lt;/p&gt;

&lt;p&gt;The chain of evidence is also much improved by having post-mortem
debugging of production systems.  If you haven&amp;#8217;t yet, check out Bryan
Cantrill&amp;#8217;s talk &lt;a href="http://www.infoq.com/presentations/Debugging-Production-Systems"&gt;And It All Went Horribly
Wrong&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, this is important to me, it&amp;#8217;s important to Node.js users, it&amp;#8217;s
important to the various companies paying the salaries of the node core
team.  It&amp;#8217;s reasonable to trust it&amp;#8217;s high priority.&lt;/p&gt;

&lt;h2&gt;Problems I Wish He&amp;#8217;d Mentioned&lt;/h2&gt;

&lt;p&gt;If you want to know what&amp;#8217;s wrong with node, ask a node-core developer.&lt;/p&gt;

&lt;p&gt;These are some of the things that are really problematic, some of them
in a pretty deep way.  Of course, these are the things I know about,
so they&amp;#8217;re things that we&amp;#8217;re working on for future releases of Node.js.
If there are things that you think belong on this list, let us know.&lt;/p&gt;

&lt;p&gt;Some of them are very hard,
and will require iteration.  Some of them are pretty straightforward,
and will be addressed soon.  Some of them are not super difficult, but
just lower priority, and won&amp;#8217;t get addressed for a while.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Debugging.
See above.  It&amp;#8217;s our top issue, and it&amp;#8217;s coming along.  It was
mentioned, but less strongly than I would have liked to see.&lt;/li&gt;
&lt;li&gt;It is very hard to get visibility into which pending actions are
keeping the event loop running.  This is a source of subtle errors.
The libuv refcount behavior is in the process of being cleaned up,
and v0.8 will include a mechanism for seeing exactly which handles
are in an open state.&lt;/li&gt;
&lt;li&gt;The Stream API, which is by all accounts the core use-case for node,
is remarkably inconsistent and hard to extend.  It&amp;#8217;s a lot nicer in
v0.4 and v0.6 than it was in v0.2 and before, but it&amp;#8217;s got a ways to
go yet.  We paper over a lot of the inconsistency in the
Stream.pipe() method, but it&amp;#8217;s a source of many subtle issues.  Node
v0.9 will focus primarily on this issue.&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s hard to find good node modules.  Reducing the barrier to entry
for node package creation has made it a lot easier for more people to
take advantage of.  However, when you solve a problem, you open the
door for new ones that were hiding behind it.  We&amp;#8217;ve grown faster
than most platforms, which means that we&amp;#8217;re encountering the
discovery issues sooner.  This will be addressed in the coming months
with a new npmjs.org website.&lt;/li&gt;
&lt;li&gt;The Node.js project lacks a consistent and visible continuous
integration system, so performance degradations can occur silently.&lt;/li&gt;
&lt;li&gt;Using binary modules is overly difficult, and requires a build
toolchain on the install target.  Work is underway to improve this,
but it&amp;#8217;s tricky.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;And of course, just the fact that Node.js is very young, and has some
bugs.  It&amp;#8217;ll no doubt get more, as we continue to work on it, but the
goal is to change things in ways that make these bugs easier to spot and
easier to fix.&lt;/p&gt;

&lt;p&gt;It is not sufficient for Node.js to be better than any other platform.
It must be so good that it permanently raises expectations in this
space.  It must continue to impress and delight users.  There is so much
work yet to do, it&amp;#8217;s mind boggling.&lt;/p&gt;

&lt;p&gt;Laurels are not very comfortable to rest on.&lt;/p&gt;

&lt;h2&gt;And finally&amp;#8230;&lt;/h2&gt;

&lt;p&gt;If you&amp;#8217;ve gotten this far, congratulations.  I try to keep blog posts
much shorter than this, but there was a lot to respond to here, and
touched on several issues that are very close to my interests.&lt;/p&gt;

&lt;p&gt;Brian&amp;#8217;s talk was fascinating.  Even the mistakes were
interesting.  When the video comes out, I highly recommend watching it.
Go get &lt;a href="http://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374275637/"&gt;Thinking, Fast and
Slow&lt;/a&gt;.
I haven&amp;#8217;t read it, but I&amp;#8217;m familiar with some of
Kahneman&amp;#8217;s other work in behavioral economics, and I suspect it&amp;#8217;s
every bit as fantastic as Brian claims.&lt;/p&gt;

&lt;p&gt;I got a chance to talk to Brian after the talk, and so hopefully a lot
of these points (at least, the specific technical details of what sucks
in Node.js and what we&amp;#8217;re doing about it) doesn&amp;#8217;t come as a surprise to
him.  He seems like a genuinely nice and thoughtful person.&lt;/p&gt;

&lt;p&gt;For a talk that started off with a request that we use science and
make conflict useful, I was disappointed that his criticisms of Node
were lacking in scientific rigor or constructive calls to action.  But
as I mentioned earlier, it&amp;#8217;s hard to fit it all into a 30 minute talk.
I hope this conversation will not end here.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re all humans.  We all think wrong.  We all love, and worry, and try
to do interesting things.  We all fail, and feel shitty, and try
to explain why we&amp;#8217;re not a bad person for it.  We
all succeed, and want to brag about it.  We tell ourselves stories, and
sometimes those stories are true, but usually they&amp;#8217;re only just true enough
to get by.&lt;/p&gt;

&lt;p&gt;Try to remember this, the next time you&amp;#8217;re telling someone how awesome
(or over-hyped)
Node.js is, or any other thing you have feelings about,
and they suggest that you may be a brainwashed idiot.  They are
just trying to protect something, as are you, and in the course of this
protection, our instincts will cause us to fail.&lt;/p&gt;

&lt;p&gt;Show that monkey brain who&amp;#8217;s boss!
Slow down, breathe, and try to remember that this person
who disagrees with you is not some big dumb idiot, but most likely a very
thoughtful person who&amp;#8217;s trying to do their best to create truth and beauty
in the world.  If you don&amp;#8217;t learn what motivates them, how can you ever
join forces?&lt;/p&gt;

&lt;div class="small"&gt;Many thanks to Mikeal Rogers, Bryan Cantrill, Marco Rogers for reading early drafts of this post and providing feedback.&lt;/div&gt;</description><link>http://blog.izs.me/post/20786279320</link><guid>http://blog.izs.me/post/20786279320</guid><pubDate>Mon, 09 Apr 2012 10:27:00 -0700</pubDate></item><item><title>Stack</title><description>&lt;p&gt;A stack of things, is right now on my floor,&lt;br/&gt;
And the stack&amp;#8217;s depth currently measures four.&lt;br/&gt;
At the bottom, a table I bought at a local thrift store,&lt;br/&gt;
On it a pack for computer, and more&lt;br/&gt;
On that, a t-shirt, my girlfriend today wore&lt;br/&gt;
And on that, a cat, who is a plasticovore,&lt;br/&gt;
Next to him, are some flowers, but they don&amp;#8217;t rhyme.&lt;/p&gt;</description><link>http://blog.izs.me/post/20702974946</link><guid>http://blog.izs.me/post/20702974946</guid><pubDate>Sun, 08 Apr 2012 00:04:00 -0700</pubDate><category>poem</category></item><item><title>merlin:

Inspecting the World’s Most Derp-Derp Subway Map</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_m252qeWZLP1qz4rlzo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://www.kungfugrippe.com/post/20689226702/inspecting-the-worlds-most-derp-derp-subway-map" class="tumblr_blog"&gt;merlin&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;h1&gt;Inspecting the World’s Most Derp-Derp Subway Map&lt;/h1&gt;&lt;/blockquote&gt;</description><link>http://blog.izs.me/post/20702924104</link><guid>http://blog.izs.me/post/20702924104</guid><pubDate>Sun, 08 Apr 2012 00:02:52 -0700</pubDate></item><item><title>Sexism, Words, and Marketing</title><description>&lt;p&gt;Go read this: &lt;a href="http://storify.com/charlesarthur/oh-hai-sexism"&gt;Oh Hai Sexism&lt;/a&gt;.  (Aside: I&amp;#8217;m finding that more and more of the news stories I really like are on &lt;a href="http://storify.com"&gt;Storify&lt;/a&gt;, which I first heard about as one of the earliest Node.js adopters.  Nice to see them doing well.)&lt;/p&gt;

&lt;p&gt;Some of the confusion on the part of bystanders to this flame war was, &amp;#8220;So, there&amp;#8217;s a model being objectified in an underwear commercial.  What&amp;#8217;s the big deal?&amp;#8221;&lt;/p&gt;

&lt;p&gt;However, a &lt;em&gt;very&lt;/em&gt; important point here, I think, is that this video was not being used &lt;em&gt;solely&lt;/em&gt; to sell underwear, and that&amp;#8217;s where it started going wrong.&lt;/p&gt;

&lt;p&gt;Design Like Whoa is a clothing company.  Clothing companies use models to sell clothing.  Models are chosen for their looks, and they are &lt;em&gt;literally&lt;/em&gt; objectified, as part of their job.  They&amp;#8217;re also consenting, and reasonably well paid.  This method of selling clothes is used by just about every single clothing company, because it works.  I don&amp;#8217;t think there&amp;#8217;s a single thing wrong with the video as such, qua underwear commercial, or at least, nothing that isn&amp;#8217;t &lt;em&gt;also&lt;/em&gt; wrong with the whole clothing industry and our irrational ape-brained methods of choosing clothing, but I don&amp;#8217;t think DLW can be expected to change that.  It&amp;#8217;s actually relatively un-sexy, compared to other underwear commercials.  &lt;a href="http://www.youtube.com/results?search_query=victoria%27s+secret+commercial"&gt;Quid veritas&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add to this that Design Like Whoa markets their clothing by putting startup logos on them.  Not a terrible plan, I mean, if it moves clothes, why not, right?  People are passionate about the websites they use.  Lots of companies put various logos on things to sell them by associating with the brand.  &lt;del&gt;Allegedly, Geeklist gave DLW permission to use their logo, and then DLW made the video without Geeklist&amp;#8217;s involvement, and just happened to choose their branded apparel in the commercial.  I&amp;#8217;m willing to give them the benefit of the doubt there.&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;ins id="edit-2012-03-23"&gt;Edit: Geeklist was &amp;#8220;involved&amp;#8221; with the making of the video, somewhere between &amp;#8220;It was all their idea&amp;#8221; and &amp;#8220;They asked for photos, and got a video.&amp;#8221;  It&amp;#8217;s not very relevant to the points I&amp;#8217;m trying to make here, so I&amp;#8217;m not going to go into it any further.  &lt;a href="http://designlikewhoa.tumblr.com/post/19791735980/response-to-geeklists-letter-after-reading"&gt;Gemma says this.&lt;/a&gt;  Christian disputes (via private email) some of what she wrote, but not all.  There&amp;#8217;s definitely some room for interpretation.  I&amp;#8217;m not really interested in the finer points of how this started, as much as where it ended up.  Bottom line: no one intended to offend anyone at the start, but that doesn&amp;#8217;t actually matter in the end.&lt;/ins&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;The problem, however, came about when Geeklist decided to use a women&amp;#8217;s underwear commercial as a marketing technique for their own product, which is a social networking website for people in technology.&lt;/p&gt;

&lt;p&gt;This was the first line crossed.  I hadn&amp;#8217;t seen that marketing, since I never use geeklist and don&amp;#8217;t really care about their product except for the fact that it&amp;#8217;s written in node.  (That&amp;#8217;s not intended as a slight against Geeklist.  It seems like a fine enough product.  I am just set in my ways.  I use twitter and github and IRC, and that&amp;#8217;s about the extent of my social networking.  I don&amp;#8217;t really use Facebook much, either.)  Using a model in underwear to sell underwear is fine.  Using a model in underwear to sell an inclusive social network for technologists?  Sends the wrong message.&lt;/p&gt;

&lt;p&gt;So far, in my book, no major harm done.  Doing interesting things means taking risks, and taking risks means sometimes being wrong.  It&amp;#8217;s important to give people permission to make mistakes, or else nothing interesting happens.  &lt;strong&gt;The trade-off of that permission is the trust that they&amp;#8217;ll act appropriately when their mistakes are made known to them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/harthvader/status/182982567220363265"&gt;According to Heather Arthur&lt;/a&gt;, at least one private complaint about the video was ignored.&lt;/p&gt;

&lt;p&gt;Heather&amp;#8217;s email should have been taken as a red flag.  Heather is exactly the sort of person that geeklist &lt;em&gt;should&lt;/em&gt; be trying to target: She&amp;#8217;s young, prolific, and very actively involved with several happening developer communities.  She is a paradigm example of Geeklist&amp;#8217;s money demographic.  Any principles aside, if she felt put off by their marketing, then the marketing is broken, period.&lt;/p&gt;

&lt;p&gt;Shanley Kane complained about it publicly on Twitter.  Again, I can&amp;#8217;t really think of anyone more fitting the ideal Geeklist target demographic.  A product manager and marketeer at Basho (maker of Riak, one of the most relevant nosql databases), and also a Ruby coder and technical hobbyist.  Someone who goes to conferences and &lt;strong&gt;networks with technologists&lt;/strong&gt; as her &lt;strong&gt;job&lt;/strong&gt;.  Geeklist should be happy to get &lt;em&gt;any&lt;/em&gt; feedback from her, and should take it extremely seriously if she&amp;#8217;s put off by their marketing.  Anything short of a brick through the window should have been accepted gratefully.&lt;/p&gt;

&lt;p&gt;This was an opportunity.  There is rarely a case where the right answer is so obvious.  Christian could have replied, &amp;#8220;Good point. I&amp;#8217;m on it. We don&amp;#8217;t own the video, I&amp;#8217;ll talk to the person who does. No offense was intended. Thanks.&amp;#8221; and actually walked away from this event perhaps not a hero, but certainly not a villain.&lt;/p&gt;

&lt;p&gt;Instead, he got defensive, and took offense at Shanley&amp;#8217;s &amp;#8220;insult&amp;#8221; to his &amp;#8220;brand&amp;#8221;.  News flash: you don&amp;#8217;t get to have a brand, or a project, or a company, or any public anything, without people insulting it.  People say &amp;#8220;fuck&amp;#8221; sometimes.  That&amp;#8217;s just how it works.&lt;/p&gt;

&lt;p&gt;From there, it spiraled WAY out of control.  However much Shanley&amp;#8217;s &amp;#8220;cursing&amp;#8221; may have offended geeklist&amp;#8217;s brand, Reuben&amp;#8217;s and Christian&amp;#8217;s response to it was much worse.  The veiled threats about talking to Shanley&amp;#8217;s employer were just so far beyond what is sensible or appropriate, I am at a loss for words.&lt;/p&gt;

&lt;p&gt;There was &lt;a href="http://gklst.tumblr.com/post/19734620901/geeklist-and-a-public-apology"&gt;an apology&lt;/a&gt;, and the video is now gone, which I guess is good.  But my two worst nopology pet peeves are in there: &amp;#8220;We apologize &lt;i&gt;&lt;b&gt;if&lt;/b&gt;&lt;/i&gt;&amp;#8230;&amp;#8221;, and justifications for the behavior that they&amp;#8217;re ostensibly apologizing about.  Don&amp;#8217;t tell me why I &lt;strong&gt;shouldn&amp;#8217;t&lt;/strong&gt; be offended, and then apologize &lt;strong&gt;if&lt;/strong&gt; it was offensive.  Tell me why I &lt;strong&gt;should&lt;/strong&gt; be offended, and then apologize &lt;strong&gt;because&lt;/strong&gt; it was offensive.&lt;/p&gt;

&lt;p&gt;As &lt;a href="https://twitter.com/mikeal/status/182984512261734400"&gt;Mikeal put it&lt;/a&gt;, &amp;#8220;apologies that don&amp;#8217;t contain the words &amp;#8220;we fucked up&amp;#8221; aren&amp;#8217;t usually genuine.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Put aside your immediate feelings and keep your eye on your choices and their likely results.  This isn&amp;#8217;t just &lt;em&gt;part&lt;/em&gt; of being a grown up, it&amp;#8217;s basically the &lt;em&gt;definition&lt;/em&gt; of being a grown up.  People won&amp;#8217;t remember that you valiantly defended your brand from the vicious assault of an outraged feminist.  They&amp;#8217;ll remember that you insulted and intimidated the exact sort of person you&amp;#8217;re claiming to cater to, and you&amp;#8217;ll lose their trust.&lt;/p&gt;

&lt;p&gt;Can we please go just a few weeks without some insecure startup founder pissing off a huge chunk of the technology community with macho antics?  And, really?  I don&amp;#8217;t care if you actually are a beer-chugging juggy-hooting misogynistic bro douchebag in the privacy of your own home.  Just please keep it out of twitter, the work place, conferences, and other public forums.  Just temporarily, in public, &lt;em&gt;pretend&lt;/em&gt; to be grown ups.  Think about your words, and choose the ones most likely the have the effects you desire.&lt;/p&gt;

&lt;p&gt;There are smart talented women going into applied science and fucking &lt;strong&gt;academia&lt;/strong&gt; because of you asshats.  Clean up your act.  We need more good programmers, and you&amp;#8217;re scaring off half of them.&lt;/p&gt;

&lt;h2 id="addendum-2012-03-23"&gt;Addendum&lt;/h2&gt;

&lt;p&gt;Just to clarify, I&amp;#8217;ve met Christian Sanz numerous times.  He seems like a really nice guy.  It&amp;#8217;s easy to get swept up in a flamewar and say stupid things, and a lot of us have done so.  They clearly realized much too late that the train was headed for crazy town, and fumbled awkwardly to try to change course.  I&amp;#8217;m more disappointed than angry about all this.  It&amp;#8217;s kind of sad, really.&lt;/p&gt;

&lt;p&gt;A person is not just one conversation, and a product is not just one person.  My hope is that Geeklist (particularly Christian and Reuben) will learn from this event and let it inform their actions the next time someone criticizes their marketing decisions, rather than be so scared off from the event that they stop taking risks at all.&lt;/p&gt;</description><link>http://blog.izs.me/post/19786163075</link><guid>http://blog.izs.me/post/19786163075</guid><pubDate>Fri, 23 Mar 2012 09:40:00 -0700</pubDate></item><item><title>Watch this video.  I really like a lot of what he has to say. ...</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/o9pEzgHorH0?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Watch this video.  I really like a lot of what he has to say.  Two main comments:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;strong&gt;165&lt;/strong&gt; Exceptions in the standard library, is &lt;em&gt;enough&lt;/em&gt;!?  &lt;strong&gt;Are you fucking kidding me?&lt;/strong&gt;  JavaScript has 7, and if you ask me, that’s way too many.  &lt;code&gt;URIError&lt;/code&gt; is completely unnecessary, and &lt;code&gt;EvalError&lt;/code&gt; is always better off being expressed as something else.  The only Error types you ever need to use in your code are &lt;code&gt;Error&lt;/code&gt; or &lt;code&gt;TypeError&lt;/code&gt;.  That being said, “Don’t create a new exception type” is 100% spot-on.  Even having typed catches in the language encourages this kind of awful profusion.&lt;/li&gt;
&lt;li&gt;The reliance on “the standard library” is, imo, a bad thing.  The idea that we should not reinvent wheels is great.  s/standard library/npm registry/g and you’ve got me.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Many aspects of the Node.js module system, and the npm package registry, are built with exactly these principles in mind.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;code&gt;module.exports&lt;/code&gt; allows you to export a single thing from a module.  If I had the opportunity to do it again, I’d only support that, rather than an &lt;code&gt;exports&lt;/code&gt; object. If you really want to export multiple things, you’d still be able to, but it should be an extra mental leap to do so.&lt;/li&gt;
&lt;li&gt;The single-level namespace in the npm registry makes it a bit less likely to end up with garbage like &lt;code&gt;com.initech.utils.UtilityFactory.UtilityFactoryExceptions.UtilityFactoryNotFoundException&lt;/code&gt;.  “Namespaces are for preventing collisions, not for creating taxonomies.”  I cheered when he said this.&lt;/li&gt;
&lt;li&gt;Once upon a time, I foolishly implemented the proposed “modules” feature in package.json.  Ryan gave me a lot of shit about that and refused to support it in node, no matter how easy it was to do.  I realized (a bit too late) that he was absolutely right, and pissed off some folks by removing it.  Today, you get one &lt;code&gt;main&lt;/code&gt; module defined in package.json.  That’s it.  A package is a module.  Yes, a package is also a folder, and modules are files, so you &lt;em&gt;can&lt;/em&gt; dive into it and get at its guts.  But it’ll feel &lt;em&gt;off&lt;/em&gt;, because it’s weird, and non-standard.  You’ll get funny looks.  &lt;strong&gt;This is on purpose,&lt;/strong&gt; because it nudges you towards a flatter namespace by default.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The social engineering in node and npm is always more carrot than stick, and we always try to nudge people in a good direction by saying “no” to a feature rather than saying “yes” to one.  This hasn’t been done perfectly in the past, but I am fairly proud of the results.&lt;/p&gt;

&lt;p&gt;It’s a shock to someone who’s used to writing giant monolithic programs, and has to re-think how they draw their boundaries.  That’s good.  In fairly short order, things like local installs and limited exports start to “click” in a programmers mind most of the time.  I’ve seen a lot of people start out frustrated and angry, and then a month later tell me how odd it is to use other platforms that don’t have the a similar approach.&lt;/p&gt;

&lt;p&gt;When you solve a problem that others accept as the status quo, you often end up finding new problems.  You don’t have to worry about coming up with unique descriptive names for your programs when you can nest them 7 layers deep underneath a company name.  You don’t need to come up with approaches for managing a deep dependency graph if conflicts are insoluble.&lt;/p&gt;

&lt;h2&gt;Addendum&lt;/h2&gt;

&lt;p&gt;It’s not that I’m against using classes.  I’ve written several programs that use classes extensively.  It’s the proper abstraction for a long-lived object that needs to keep state and be interacted with.  The hoop-jumping required to do this sort of thing in pure functional languages, with accumulator sets and so on, is kind of silly sometimes.&lt;/p&gt;

&lt;p&gt;That being said, the &lt;em&gt;point&lt;/em&gt; of using classes is to make things &lt;em&gt;easier&lt;/em&gt;.  If your class is a fire-and-forget thing with a single method, then it’s really just a function, and would be easier expressed in that manner.&lt;/p&gt;

&lt;p&gt;There’s no hard and fast rule here.  You have to actually think about what would make your program easier to use, easier to debug, and easier to understand.&lt;/p&gt;</description><link>http://blog.izs.me/post/19521376222</link><guid>http://blog.izs.me/post/19521376222</guid><pubDate>Sun, 18 Mar 2012 10:40:00 -0700</pubDate></item><item><title>How I Would Do It</title><description>&lt;p&gt;One of the most common shorthands for evaluating the choices of others is to internally ask ourselves if we would make those same choices in the same situation.  If the choice is &amp;#8220;Not how I would do it&amp;#8221;, then it is deemed &amp;#8220;Bad&amp;#8221;, and reflects poorly on the chooser.&lt;/p&gt;

&lt;p&gt;Like most sources of error, this shorthand is insidious precisely because it is a valuable time-saver in so many situations.  A person doing foolish things is likely a fool, and by establishing this aversion early, we can save ourselves the trouble of evaluating their future actions and words in depth.  If there&amp;#8217;s something that I know how to do &amp;#8212; whether that&amp;#8217;s writing a JavaScript program or making meatloaf or listening to music or dating &amp;#8212; then approaches that look &lt;em&gt;off&lt;/em&gt; probably are.  Difference smells funny, and why look deeper?&lt;/p&gt;

&lt;p&gt;Not every change is an improvement, but every improvement is a change.  We must be ever vigilant to not turn our noses up at progress simply because it is new, or at help simply because it comes in a shape somewhat different from what our own hands would make, or at a friend simply because they like different things.&lt;/p&gt;</description><link>http://blog.izs.me/post/19258486115</link><guid>http://blog.izs.me/post/19258486115</guid><pubDate>Tue, 13 Mar 2012 16:15:00 -0700</pubDate></item><item><title>Coffee, sun, and hacking. &lt;3 (Taken with instagram)</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lztlw4USMU1qzjzo9o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Coffee, sun, and hacking. &lt;3 (Taken with &lt;a href="http://instagr.am"&gt;instagram&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.izs.me/post/18100078521</link><guid>http://blog.izs.me/post/18100078521</guid><pubDate>Wed, 22 Feb 2012 16:40:51 -0800</pubDate></item><item><title>Giantass ship, as seen from my desk.  (Taken with instagram)</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_lzikn3QI4q1qzjzo9o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Giantass ship, as seen from my desk.  (Taken with &lt;a href="http://instagr.am"&gt;instagram&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.izs.me/post/17741913725</link><guid>http://blog.izs.me/post/17741913725</guid><pubDate>Thu, 16 Feb 2012 17:40:14 -0800</pubDate></item><item><title>Bikes on Bart (Taken with instagram)</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_lzasujl8sF1qzjzo9o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Bikes on Bart (Taken with &lt;a href="http://instagr.am"&gt;instagram&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.izs.me/post/17508339747</link><guid>http://blog.izs.me/post/17508339747</guid><pubDate>Sun, 12 Feb 2012 12:56:43 -0800</pubDate></item><item><title>Software Personality</title><description>&lt;a href="http://blog.fetchnotes.com/post/17155558880/what-happens-when-you-swear-at-your-users"&gt;Software Personality&lt;/a&gt;: &lt;p&gt;&lt;a href="http://blog.fetchnotes.com/post/17155558880/what-happens-when-you-swear-at-your-users" class="tumblr_blog"&gt;fetchnotes&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p id="internal-source-marker_0.6089860387146473"&gt;Last semester, Chase and I took a business communication class in which we dissected the PR crisis that resulted from someone trashing an &lt;a href="http://www.airbnb.com"&gt;Airbnb&lt;/a&gt; user’s home. At the time, it seemed very abstract and unlikely — crises never happen to those who prepare! Well, one just happened to us.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;There’s an important lesson here.  Don’t be too afraid to show a little personality in your products.  Let your team’s humanity show.  Keep the character in mind, and be true to it.&lt;/p&gt;

&lt;p&gt;Think, &lt;i&gt;“If this product were a person, what kind of person it be like?  How would it dress?  What would it feel?  What would it say to you when you’re having a bad day, or when you come to it with good news that you’re excited to tell?”&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;In developing npm, this has always been chief in my thoughts.  Very early on, I started imagining npm as a friendly helper and developer cheering-section.  It just wants you to succeed so much.  It loves your program like a parent, and is proud of the day when it can get all its dependencies taken care of, and leave your warm embrace to go out into the harsh world of deployment.  It wants to know you’re prepared, that you’ve run all your tests.  It will help you find friends and allies, try to warn you which ones to steer clear of.  This can be a little smothering at times, but when your program is out there in the wild, maybe you’ll &lt;code&gt;require()&lt;/code&gt; a little something, and there it’ll be, because of how much npm cared for it, and it’ll think warmly of the place it grew up, back in the &lt;code&gt;$HOME&lt;/code&gt; directory on your laptop.&lt;/p&gt;

&lt;p&gt;This mental image is what inspired the “npm loves you” meme.  (It’s right in the faq.)&lt;/p&gt;

&lt;p&gt;On the other hand, Node.js has a slightly different personality.  It doesn’t shield you from harsh realities.  It’ll go with you out into the wild, and handle all the incoming requests with you.  It’ll be by your side through thick and thin, and follow your commands to the bitter end.  It won’t go out of its way to be a jerk, but if there’s ever a choice between being fast and being nice, you know what it’s going to pick.  If something needs to break between versions, well, then that’s what has to happen.  It knows you’re going to be able to deal with it.&lt;/p&gt;

&lt;p&gt;This, in my opinion, is the chief conceptual difference between a “platform” and a “tool”.  Of course, to some extent, every platform is a tool for interacting with the system, but you really want a different personality from your platform than you do from a tool.  A tool gets you there, and then is left behind; a platform is a part of the show from start to finish.&lt;/p&gt;

&lt;p&gt;Bryan Cantrill has mentioned to me that every software project carries the esthetic of its creator.  I think there’s a lot of truth to this.  But, just as children don’t necessarily grow up into copies of their parents, software’s personality doesn’t necessarily match the &lt;em&gt;personality&lt;/em&gt; of its creator.  In many ways, Ryan is much nicer than I am, but npm is certainly more friendly than Node.&lt;/p&gt;

&lt;p&gt;This phenomenon is uniquely challenging for companies that want to appear “grown up” and be taken seriously.  The line between “grown up” and “robotic” is so subtle.  Certainly, cursing at your users in a test message is a very risky way to breathe life into a product, but nevertheless, I find myself unsurprised by the reaction to the fetchnotes flub.&lt;/p&gt;</description><link>http://blog.izs.me/post/17171534031</link><guid>http://blog.izs.me/post/17171534031</guid><pubDate>Mon, 06 Feb 2012 14:02:22 -0800</pubDate></item><item><title>I really like the view from where I live.</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_lywt0jhEoM1qzjzo9o1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I really like the view from where I live.&lt;/p&gt;</description><link>http://blog.izs.me/post/17081603824</link><guid>http://blog.izs.me/post/17081603824</guid><pubDate>Sat, 04 Feb 2012 23:33:55 -0800</pubDate></item><item><title>hamburglr:

First, go grab some headphones. The best ones you’ve...</title><description>&lt;embed type="application/x-shockwave-flash" src="http://assets.tumblr.com/swf/audio_player_black.swf?audio_file=http://www.tumblr.com/audio_file/15351581315/tumblr_lpoxuxF3Fl1qzusoy&amp;color=FFFFFF&amp;logo=soundcloud" height="27" width="207" quality="best" wmode="opaque"&gt;&lt;/embed&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://hamburglr.tumblr.com/post/8717276078/first-go-grab-some-headphones-the-best-ones" class="tumblr_blog"&gt;hamburglr&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;First, go grab some headphones. The best ones you’ve got. If the best ones you’ve got are &lt;a href="http://store.apple.com/us/product/MB770G/B?fnode=MTY1NDA0Ng&amp;mco=MTA4NTA2ODU"&gt;these suckers&lt;/a&gt; (or something similar), you should really go buy new ones, but use the best you’ve got for right now.&lt;/p&gt;
&lt;p&gt;Take a break from whatever you’re doing for 2 minutes and listen, but just listen to the whole thing, even if you have to multi-task.&lt;/p&gt;
&lt;p&gt;Headphones on? Ok. Good.&lt;/p&gt;
&lt;p&gt;Now, press play.&lt;/p&gt;
&lt;br/&gt;
“Upular (3D Audio Version)” - Pogo&lt;/blockquote&gt;</description><link>http://blog.izs.me/post/15351581315</link><guid>http://blog.izs.me/post/15351581315</guid><pubDate>Thu, 05 Jan 2012 09:51:12 -0800</pubDate></item><item><title>aredridel:

Or, you know, we could go own our own...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lx5brpApFT1qfb6qxo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://aredridel.tumblr.com/post/15201371401/or-you-know-we-could-go-own-our-own" class="tumblr_blog"&gt;aredridel&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Or, you know, we could go own our own infrastructure. Start your own blog, folks. Find a local company who hosts sites or get your own virtual server. Get help setting it up or learn how yourself. And then there are no limits save the actual resources you’re using.&lt;/p&gt;
&lt;p&gt;You’ll learn a lot. You’ll own your space, not just lease it for the price of your privacy to another company.&lt;/p&gt;
&lt;p&gt;&lt;a class="tumblr_blog" href="http://samueloser.tumblr.com/post/15152527217/remember-back-when-tumblr-didnt-have-all-these"&gt;samueloser&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Remember back when Tumblr didn’t have all these restrictions? It was great! Well since then, they’ve added new limits to the things we can do.&lt;/p&gt;
&lt;p&gt;Reblog this if you want the Ask Limit, the Post Limit, and all the other limits that Tumblr has been adding to be repealed. If this gets enough notes, hopefully we’ll be able to persuade them to repeal the limits, or at least lessen the restrictions!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reblog &lt;/strong&gt;and &lt;strong&gt;Reblog &lt;/strong&gt;and &lt;strong&gt;Reblog,&lt;/strong&gt; and get your friends to &lt;strong&gt;Reblog &lt;/strong&gt;as much as possible!&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;</description><link>http://blog.izs.me/post/15212505704</link><guid>http://blog.izs.me/post/15212505704</guid><pubDate>Mon, 02 Jan 2012 16:46:08 -0800</pubDate></item><item><title>Xmas Traditions</title><description>&lt;p&gt;As an american, especially one descended from european catholics, there
is no annual event as steeped in tradition and ritual as Christmas.  It
seems at times that failing to maintain our traditions would be an
affront to our ancestry, and a crime to our descendents.&lt;/p&gt;

&lt;p&gt;Tradition is a funny thing.  It&amp;#8217;s a social fiction.  It&amp;#8217;s something that
&lt;strong&gt;we as humans decide we&amp;#8217;re going to do&lt;/strong&gt;.  On the one hand, traditions
can give comfort and stability in the midst of a shifting world.  On the
other hand, &amp;#8220;because we&amp;#8217;ve always done it this way&amp;#8221; is hardly an optimal
heuristic for social behavior (or even good evidence for having in fact
always done it that way).&lt;/p&gt;

&lt;p&gt;Back when our software was being
written, when our world changed less quickly, and tribal unity was a
life or death issue, it probably made a lot of sense to value stability
over most other aspects of life.  However, in the modern world, the
absurdity of this pattern seems so painfully clear sometimes.&lt;/p&gt;

&lt;p&gt;Christmas just a few generations ago would have been &lt;em&gt;unrecognizable&lt;/em&gt; to us
today.  The &amp;#8220;Santa Claus&amp;#8221; character as we know him today, with the reindeer
and flying and chimneys and north pole, was invented
less than 200 years ago, and only became an overweight bearded red-clad man in
the 1920s.  Our &amp;#8220;classic&amp;#8221; christmas songs were almost all written
in the 1940s and 1950s.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A lot of our &amp;#8220;time-honored&amp;#8221; christmas traditions were invented while
my parents were kids.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The christmas traditions that I remember were waking up early, opening
presents, and then spending the day in pyjamas playing with new toys.
No travelling, no extended family, no huge dinner.  We didn&amp;#8217;t have any
xmas eve celebration (probably because my parents did a lot of their
shopping and preparation the night before.)  The &amp;#8220;christmas dinner&amp;#8221; was
usually delivery chinese.  Normal Rockwell would&amp;#8217;ve been scandalized.&lt;/p&gt;

&lt;p&gt;The extravagance of our christmas presents varied quite a lot.
My dad ran his own business, and along with that came a lot of
ups and downs.  When we didn&amp;#8217;t have a lot of money, my parents put
a lot of creativity into it.&lt;/p&gt;

&lt;p&gt;One year, our gifts consisted mainly of coupons to be redeemed for
outings or favors at some later date.  We were young enough to be
excited about that.  Those coupons were made at home, printed
to look official and then decorated with magic marker (our printer at
the time was a black and white dot-matrix.)&lt;/p&gt;

&lt;p&gt;The most awesome part of our xmas tradition came out of a creative
solution to a last-minute problem.  It was a good year, and my parents
had bought me
and my sister new bicycles.  But, they didn&amp;#8217;t see any way to bring them
into the living room and wrap them in such a way that we wouldn&amp;#8217;t know
right away what they were.&lt;/p&gt;

&lt;p&gt;They had the innovative idea to put the bikes outside in the shed,
but rather than just tell us to go out and get them, my mom designed a
treasure hunt that my sister and I would have to work together
to solve.  The first clue was on a card buried in the middle of the
tree.  That led to another clue, which led to another, and so on.  Each
one was a little puzzle that had to be solved, and it was all allegedly
from &amp;#8220;Santa&amp;#8221;.  So, when we asked my mom for help, she just threw up her
hands, and said, &amp;#8220;Hey, I didn&amp;#8217;t help him make this thing.  Call up the
north pole if you can&amp;#8217;t figure it out.&amp;#8221;  (We were old enough at the time
to know she was putting us on, but she can be very stubborn.  Her
sense of humor is so dry, you never really know if she&amp;#8217;s joking, or
has had some break with reality and believes what she&amp;#8217;s saying.)&lt;/p&gt;

&lt;p&gt;Every year, whatever big present we got, it was at the end of a similar
treasure hunt.  It kept us out of our parents hair, that&amp;#8217;s for sure.  A
chemistry set in the trunk of the car.  A Nintendo and a few games (that
year, my parents were eager for us to finish so that they could &amp;#8220;help&amp;#8221; play
with it.)  A &amp;#8220;treasure box&amp;#8221; filled with about $25 in quarters and dollar
bills and some plastic pirate toys (not one of the fat years, but still fun.)
One year in highschool we had to drive across town to pick up one of the
clues.  Once one of them was hidden in a file on a computer.  (And,
just to throw us off, another clue that year was in a piece of paper
literally &lt;em&gt;inside&lt;/em&gt; a different computer, so we had the thing mostly taken
apart to individual pieces before reading the clue more carefully.)&lt;/p&gt;

&lt;p&gt;Looking back, I attribute a lot of my relationship with my sister to the
fact that my mother put so much time and thought
into getting us to work together and experience joy and frustration
together.&lt;/p&gt;

&lt;p&gt;It wasn&amp;#8217;t until recently that I learned that all this was a huge departure
from the traditions in the Schlueter family, which previously had
involved trekking back to my dad&amp;#8217;s home town (in &lt;strong&gt;South Dakota&lt;/strong&gt; of all
bloody places!)  Christmas eve gift exchange, followed by midnight mass,
sleep, followed by &lt;em&gt;another&lt;/em&gt; church service Christmas morning, and then a
huge elaborate dinner.  More Jesus than Santa.&lt;/p&gt;

&lt;p&gt;We did that one year.  I remember it sucking, and wishing that we could
just do a &amp;#8220;normal&amp;#8221; christmas instead of all this work and church stuff,
and driving across the country.  The food was ok, but I didn&amp;#8217;t see why I
had to put on dress pants and uncomfortable shoes to eat with my
cousins.&lt;/p&gt;

&lt;p&gt;When I heard about other kids doing other
things, visiting family and such,
I thought, &amp;#8220;Oh, that&amp;#8217;s kind of weird, I&amp;#8217;m glad I don&amp;#8217;t have to do that.&amp;#8221;
I didn&amp;#8217;t feel uncomfortably different
for our &amp;#8220;easy&amp;#8221; traditions; they were &lt;strong&gt;great&lt;/strong&gt;.  Low-stress,
low-expectation, high-fun.&lt;/p&gt;

&lt;p&gt;I remember sensing at the time that my mom didn&amp;#8217;t
have as much fun with it as I did, and figured it was because she had to
do a bunch of work.  I didn&amp;#8217;t realize at the time, it wasn&amp;#8217;t just the
work, it was the &lt;em&gt;sense of obligation&lt;/em&gt; she felt that made the work seem
so awful sometimes.  She&amp;#8217;d grown up disliking christmas,
and felt a tremendous pressure to make it magical for her kids.  She
succeeded&amp;#8212;impressively&amp;#8212;but probably went well beyond the realm of
diminishing returns.  She could have done a bit less, been just as
successful in making a great experience for her kids, and enjoyed the
process more.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not a father today, but I am an adult.  And I find myself
with a family that&amp;#8217;s quite a lot bigger and more spread out than just the
4 of us.  It&amp;#8217;s easier to appreciate what my parents were giving up by
staying home, and how hard that decision probably was.  I feel that
pressure, to do this and that, to be here and go there, and get this for
these, and that for those, to drive around from town to town visiting
everyone and being at every party.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s fun, sometimes.  There are
people that I love, and don&amp;#8217;t see often enough, and this is a great
excuse to make that happen.  There&amp;#8217;s also a lot of stress and
headaches involved, and that can make everyone grumpy and annoyed.  We
feel an obligation to this thing called &amp;#8220;Tradition&amp;#8221; that feels so real
and solid, and sometimes end up spending our time
doing things no one likes for reasons no one understands, often for the
alleged benefit of &amp;#8220;passing on&amp;#8221; traditions to children who will accept it for
whatever it is, no matter what we end up doing.&lt;/p&gt;

&lt;p&gt;The moral of the story is this:
you don&amp;#8217;t owe the past shit.  If you want
your kids to enjoy christmas, and have happy memories, then do what makes you
happy, and focus on having fun with them today, in the here and now.
The universe will forgive you if
you give people presents in January or November, or if your bonding
event is movies and chinese takeout in pj&amp;#8217;s rather than church and ham in
slacks.&lt;/p&gt;

&lt;p&gt;Tradition is a story you can rewrite at any time, so write one you can
enjoy.&lt;/p&gt;</description><link>http://blog.izs.me/post/15003058533</link><guid>http://blog.izs.me/post/15003058533</guid><pubDate>Thu, 29 Dec 2011 18:45:00 -0800</pubDate></item><item><title>Browser : Operating System</title><description>&lt;p&gt;Fairly early in my career as a programmer, I switched from the C and C++ path over to front-end web development. It was fun, in-demand, and provided a way to scratch my artistic and programming itches at the same time.&lt;/p&gt;

&lt;p&gt;I spent a lot of that time wrestling with web browsers.&lt;/p&gt;

&lt;p&gt;These days, I write most of my JavaScript for node, and run my programs on servers. I&amp;#8217;ve found that wrestling with operating system differences is very similar to web browsers.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;(Disclaimer: this is a joke. Please don&amp;#8217;t email me.)&lt;/i&gt;&lt;/p&gt;

&lt;h2&gt;IE&amp;#160;: Windows&lt;/h2&gt;

&lt;p&gt;Full of Microsoftisms. Most things mostly work, except that sometimes they don&amp;#8217;t, and when they do, it&amp;#8217;s usually in a completely foreign and strange way. So different that many people either don&amp;#8217;t support it, or don&amp;#8217;t support anything else.&lt;/p&gt;

&lt;h2&gt;Firefox&amp;#160;: Linux&lt;/h2&gt;

&lt;p&gt;Mostly works, but always awkward. A perpetually broken mish-mash of components that often weren&amp;#8217;t really intended to be used together. No two are alike, and nothing ever looks exactly right.&lt;/p&gt;

&lt;p&gt;Shrouded in a religious belief that it is fixing the worlds problems. Any criticism is viewed as heresy (unless it comes with a patch).&lt;/p&gt;

&lt;h2&gt;WebKit/Safari/Chrome&amp;#160;: Darwin/BSD&lt;/h2&gt;

&lt;p&gt;Very nice, very polished. Would probably die if not for the fact that a huge corporation decided to back it (since we already have a public option with Linux/Firefox). Mostly open source, but if you have to actually do things, you&amp;#8217;ll inevitably be forced into the &amp;#8220;blessed&amp;#8221; APIs, which are not standard.&lt;/p&gt;

&lt;h2&gt;Opera&amp;#160;: SunOS&lt;/h2&gt;

&lt;p&gt;All 12 of its users loudly agree it is superior in every way, and they have graphs to prove it.&lt;/p&gt;</description><link>http://blog.izs.me/post/13505112016</link><guid>http://blog.izs.me/post/13505112016</guid><pubDate>Tue, 29 Nov 2011 09:46:00 -0800</pubDate></item><item><title>badlipreading:

“HERMAN CAIN” — A BLR Soundbite

Only slightly...</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/uE5xZKszXMQ?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://badlipreading.tumblr.com/post/12047299166" class="tumblr_blog"&gt;badlipreading&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;“HERMAN CAIN” — A BLR Soundbite&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Only slightly more crazy than the actual Herman Cain.&lt;/p&gt;</description><link>http://blog.izs.me/post/12961214402</link><guid>http://blog.izs.me/post/12961214402</guid><pubDate>Thu, 17 Nov 2011 23:29:38 -0800</pubDate></item><item><title>Experts, Idiots, and Taste</title><description>&lt;p&gt;My nerd rage on the topic of Fibers, co-routines, and compiled-to-js languages in node.js comes from seeing a non-problem solved in a way that makes it worse.&lt;/p&gt;

&lt;p&gt;There are two really dangerous rationalizations in software design:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&amp;#8220;We need to make it easier for newcomers.&amp;#8221;&lt;/li&gt;
&lt;li&gt;&amp;#8220;Only experts will use this, anyway.&amp;#8221;&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;Tower of Babel of Cards&lt;/h2&gt;

&lt;p&gt;They&amp;#8217;re dangerous because each seems to imply that the other can be disregarded.  The worst approach is to vacillate between them: &amp;#8220;We need to make (async IO, object cleanup, database queries, whatever) easier for new users, so we&amp;#8217;ll add this magic that experts will use to make intuitive APIs.&amp;#8221;&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a vicious spiral.  You can justify adding complexity, because &amp;#8220;this is for experts only&amp;#8221;, and also exposing the functionality in an obscured way in the name of making it &amp;#8220;intuitive&amp;#8221; for newcomers.  The result is inevitably a towering house of cards.  On a somewhat visceral level, I get this gut reaction to a &amp;#8220;handing down from the mountain&amp;#8221; mentality that is only harmful in the long run for everyone.&lt;/p&gt;

&lt;p&gt;A better goal is to make an API such that when an expert uses it expertly, a newcomer can still understand it thoroughly.  It requires an API (and more importantly, a culture) that limits experts, and educates newcomers.  I don&amp;#8217;t know the best way to approach problems to get there, but I&amp;#8217;ve found pretty good results from thinking, &amp;#8220;I&amp;#8217;m probably going to mess this up the next time I touch it, so I&amp;#8217;d better make it really obvious.&amp;#8221;  I usually fail at it, and end up cursing myself later when I rewrite the damn thing yet again.&lt;/p&gt;

&lt;p&gt;Passing around a function that gets called later is &lt;em&gt;not that hard&lt;/em&gt;.  We&amp;#8217;ve been doing that in JavaScript forever.  Yes, newcomers to the language, especially if they come from a language without closures and first-class functions, have a little bit of a learning curve to get used to this phenomenon.  In my opinion, you do them a disservice by trying to shield them from that.&lt;/p&gt;

&lt;p&gt;(Passing around function pointers in C is actually a little bit better in some ways, because you &lt;em&gt;can&amp;#8217;t&lt;/em&gt; define your functions inline, and all the captured data must be passed around explicitly.  This is a bit like using named functions instead of nested closures, which is a common low-complexity approach to the alleged callback problem.)&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been writing JavaScript for a while now, and other languages for a few years before I got into JavaScript.  I&amp;#8217;m not the most expert at it, but I certainly don&amp;#8217;t consider myself a newcomer.  In that time, I&amp;#8217;ve learned something:&lt;/p&gt;

&lt;h2&gt;We&amp;#8217;re All Idiots&lt;/h2&gt;

&lt;p&gt;All of us, whether experts or newcomers.  Well-meaning idiots, perhaps, but idiots.  We all write bugs, all the time.  That is the normal state of software.  There is no abstraction so perfect that a human won&amp;#8217;t fuck it up at the first opportunity.  But we can try to be better, simpler, to make it easier for our future idiotic selves to figure out what we were thinking in our cleverly idiotic brains, and chop the problems into smaller pieces so that our future selves can have some clues to find the maddeningly idiotic bugs we stuffed in there.&lt;/p&gt;

&lt;p&gt;If your code uses step or async or slide or Q, I can read it, and I see a function getting called and passed some arguments.  I can look at how you got that function from a require() statement, pull up that module, and look at its definition.  These are lightweight abstractions that are highly penetrable.  I&amp;#8217;ve suggested in the past that everyone should write their own flow control lib, because it&amp;#8217;s the best way to really understand how they work, and it&amp;#8217;s not that hard.  Once you grasp the basic concepts, reading someone else&amp;#8217;s flow control utility is pretty easy.&lt;/p&gt;

&lt;p&gt;If your code uses a compiled fibers library, or something that transforms the code, then it&amp;#8217;s &lt;em&gt;much&lt;/em&gt; harder for me to figure out what the heck is going on.  The introspection is gone.  The languages change.  Stuff happens that isn&amp;#8217;t present in the code I&amp;#8217;m looking at.  &lt;strong&gt;This is fundamentally different from a library that just passes functions around.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That means: I won&amp;#8217;t use your library if there&amp;#8217;s any alternative (including writing the exact same functionality myself).  It&amp;#8217;s nothing personal.  I just would rather spend my time solving necessary problems rather than manufactured ones.  I simply don&amp;#8217;t believe that you&amp;#8217;ve put the same level of thinking into your coro util that TC-39 and the v8 team has put into JavaScript, or that Bert and Ryan and Ben and Igor have put into libuv.&lt;/p&gt;

&lt;p&gt;Not everyone is the same, and that&amp;#8217;s great!!  If you find that Fibers solve a problem &lt;em&gt;for you&lt;/em&gt;, and they make the code that you write easier &lt;em&gt;for you&lt;/em&gt; to manage and design, then that&amp;#8217;s awesome.  Use them.  Understand them.  Drop the illusory dichotomy of &amp;#8220;experts&amp;#8221; and &amp;#8220;newcomers&amp;#8221;, and realize that they are both idiots, and both you.&lt;/p&gt;

&lt;p&gt;Every choice that isn&amp;#8217;t completely boring will alienate someone.  Pleasing everyone is a recipe for blandness.  That&amp;#8217;s why we keep the node-core standard lib super small, and encourage variation and repetition and iteration in userland modules.&lt;/p&gt;

&lt;h2&gt;Absolutes&lt;/h2&gt;

&lt;p&gt;If your goal is to please &lt;em&gt;me&lt;/em&gt; (and other stodgy &amp;#8220;javascript is fine, callbacks aren&amp;#8217;t hard&amp;#8221; types) with a compiled coroutine library that adds magic to the language, you should realize how horribly unlikely that is.  I do actually think that this approach is fundamentally flawed.  I&amp;#8217;ve played with Marcel&amp;#8217;s fibers lib a bit, and it&amp;#8217;s about the nicest I&amp;#8217;ve seen, but it still adds an unacceptable &lt;em&gt;(for me!)&lt;/em&gt; amount of magic to programs.&lt;/p&gt;

&lt;p&gt;Programmers tend to think in absolutes, perhaps because computers are such absolute things, or maybe just because absolutes are easier and we&amp;#8217;re all idiots.  I&amp;#8217;ve done it in this post, because I&amp;#8217;m as lazy as anyone.  Maybe you&amp;#8217;re the exception, and you actually are smart enough to use Fibers or Streamline wisely and still know what&amp;#8217;s going on when you read the code a year later.  If the benefit is greater than the cost, then go for it.  It&amp;#8217;s your house, you decide whether to wear pants or not.&lt;/p&gt;

&lt;p&gt;When we are discussing things like this, it&amp;#8217;s important to realize that we&amp;#8217;re artists discussing matters of taste.  If everyone agreed, then it would mean it wasn&amp;#8217;t interesting.  Maybe we should be less interested in convincing people of stuff, and more interested in just writing programs that do interesting things.&lt;/p&gt;</description><link>http://blog.izs.me/post/12604303054</link><guid>http://blog.izs.me/post/12604303054</guid><pubDate>Thu, 10 Nov 2011 10:15:00 -0800</pubDate></item></channel></rss>

