Huh? A software cooperative?

I recently wrote about how thankful I am, after a decade in software, to work for an employer which inherently understands my values and the values of all my colleagues. That employer is me. That employer is also all of my colleagues. That employer is nilenso: a software cooperative owned and operated by its employees here in Bangalore.


What is a coop?

According to Wikipedia: "A cooperative ("coop") or co-operative ("co-op") is an autonomous association of persons who voluntarily cooperate for their mutual social, economic, and cultural benefit."

That's a bit vague. This higher-level description of cooperatives includes things like housing cooperatives, social cooperatives (employing the previously unemployable), and consumers' cooperatives (owned by its customers). I won't be discussing cooperatives of this structure, but a housing cooperative is a helpful illustration:





Let's use this cute, orange condo building as a conversation piece. Normally when we think of condominiums we think of the green building: it's entirely owned by a property developer (see the helpful pie chart?). Each condo is sold to an individual and that individual has no ownership or authority over the building as a whole. It's possible for the owner of an individual condo to join the condo board to deal with issues like the noisy neighbour who comes home at 3:00 AM to listen to Taylor Swift remixes. It's not possible for the condo board to prevent that noisy person from purchasing a condo unit in the first place.

The yellow building presents the alternative: each condo owner not only owns their own unit, but also a percentage of the building itself (usually 1/N, where N is the number of condo unit owners). The building is still owned by a corporation. But now, rather than some external entity, the corporation which owns the building is itself owned by the residents of the building. Here, your pink penthouse also gives you a pink slice of the overall pie.

For the purposes of our discussion, the cooperatives we're discussing are profit-seeking corporations  participants of the market economy. Let's use nilenso as a canonical example. Nilenso operates externally as any other business would: an employee in an executive capacity sign contracts with our clients, the company mails out invoices for work we've completed, the company pays rent for office space, the company collects profits. Yadda, yadda.

Internally, however, things are slightly different. Rather than "founders" owning and operating the business however they like, nilenso is owned equally by every employee and operated by an elected Executive. Our salary structure is completely transparent. As are our books. As are all of our business conversations. Large decisions (like hiring a new member -- or firing someone, if it ever came to it) require a two-thirds majority. Since everyone in the company is an owner, everyone also has agency. Want a new keyboard? Need a book? Headphones? Office furniture? Grab the company credit card and execute; there's no one here to babysit you.

To make use of more ridiculous pie charts, ownership in nilenso (and therefore, votes) looks like this:




The usual idea of fun, young businesses run as employee-owned cooperatives probably conjures up images of this guy and his life partner, running their organic, fair-trade, non-GMO coffee roasterie and espresso shop:



That guy looks like a he'd run a solid coffee shop. Or... lumberyard. But he probably won't grow that into a multinational corporation any day soon. Many people don't realize that big coops do exist. Larger cooperatives (like the unimaginatively-named Federated Cooperatives Ltd. of my home country) adjust their structure to handle scale: with thousands of employees, they will have a board in addition to an elected executive. They will have departments and budgets and middle managers. They will look much more like a regular corporation internally than little 12-person nilenso does. But they are still owned and operated by their employees and they are still very much cooperatives. There's nothing about a cooperative which prevents it from being pedestrian.


Why build a cooperative?

Why do we prefer to live in a democracy? We prefer a society in which governance is not military, not centralized, and not dictatorial. We prefer to have the power to fire a government (and government agents) if they aren't acting in the citizens' best interests. Well, a corporation is always governed by someone, and in a cooperative that someone is you. A cooperative is a democracy.

This capitalist democracy is not all that different from the democracy of a nationstate. An executive body is elected and maintains tenure for a predetermined period until the next election is held. Large decisions can be put to a referendum. In both cases, citizens (employees) have agency.

This also lends itself to transparency. A business led by uninformed decisions is a business doomed to fail. If the most important decisions of the business are left to the employees, the employees must have full access to information about its operation: How are salaries structured? Bonuses? What is our P&L? Who is authorizing expenses? Who is responsible for what income? Who is exceeding expectations? How?

From transparency come checks and balances. It's easy to see how an opaque, privately-owned company like Koch Industries could run so far astray of meaningful, productive, progressive business as it has. But even publicly-held companies lack serious checks and balances. Bear Stearns, Lehman Brothers, and General Motors are public financial failures. Public companies are also subject to environmental disaster, contribution to war, human rights abuses, and corruption of politics. Most people don't think of Apple or British Petroleum as inherently flawed or evil. And perhaps they aren't, yet. But when corporate checks and balances are comprised of profit motives alone, it's not impossible to imagine public companies becoming meaningless, unproductive, and retrograde societal scars, like Koch.

Transparency and a self-regulating system won't be perfect, of course. Cooperative oil companies still have refinery explosions and oil spills. An employee-owned company distributes the greed of an individual "founder" to its entire staff, rather than eliminating it. But it would take formidable collective greed for a cooperative to brush off environmental & safety issues, buy politicians, or hire an international contractor known for its human rights abuses. On the other end of the scale, the agency provided to members of a cooperative make "corporate social responsibility" a daily activity, rather than an afterthought. At nilenso, we think collectively about our office waste, how we treat our contractors, and how we interact with our local community.

Perhaps, as a software developer, you don't care about the environment. Maybe you don't care about the company's financials or the sales cycle or improving the local community. Cool. You are perfect for a cooperative. What do you care about? Good coffee? A parking space? A gym membership? Software licenses? Conferences? Coops have you covered. Join, speak up, and change the company into what you want it to be. Remember: a coop is your company, in the most literal sense. Technology companies love to proclaim "this is your company", "we want you to be your own boss", and "we want entrepreneurs". But this is all hand-waving unless it means something legally.


Challenges

If running a cooperative interests you, I'd like to provide fair warning that starting and running a cooperative is not without its own set of difficulties. At nilenso, it took us months to figure out our executive structure. Prior to that, we held a lot of referendums and decisions were made slowly. Finding a structure that works for you will take time.

A "Cooperative Corporation" is a specific legal entity, and nilenso isn't an internationally recognized Cooperative Corporation. India's Cooperative laws are antiquated, to say the least. Most of the cooperatives in India are either agriculture firms or small banks, and most of the laws are targeted at agri-business. A generic Cooperative Corporation in India requires a minimum of 50 (or 60, depending on which government document you read) employees and cannot own an international subsidiary. That's a big ball of nonstarter for us.

Your country might have similar restrictions  or you might just prefer the flexibility of starting a cooperative under another category of legal entities. Our lawyer recommended we use an LLP (Limited Liability Partnership), so our first partnership agreement looked like this:




This works well enough. The LLP can own international subsidiaries (like our California-based C-Corp), can contain any number of employees-as-partners, and we can write up the partnership agreement to reflect the structure we want for the corporation. With every person who joins or leaves nilenso, we rewrite the partnership agreement to add or remove them.

While everyone in nilenso owns (1/N)% of the company, we strive to make it a meritocracy: we have salary bands and everyone is slotted into a salary band based on her/his skills, experience, and contributions to the company. The partnership agreement doesn't affect anyone's finances, since all remuneration is through the salary structure.

Uncommon is the only other software cooperative in India that I'm aware of. They've taken another, totally valid strategy: They are structured as a Private Limited corporation. Rather than partners, every employee of Uncommon is a director and rather than a static salary structure, every employee takes home a salary corresponding to the work they've delivered that month.

Hiring and firing is one of the most difficult aspects of running any business, but it's even more difficult with a cooperative structured as a partnership. Decide procedures for employee on-boarding and exits before you start  then write them down. It's tempting to believe a team of friends will always be as happy and cohesive as they were on Day One... but it's a delusion. You are running a business and it's going to grow or fail. Either way, be ready.

Last but not least, a coop can't receive venture capital since that would mean the company was no longer owned by its employees. There are ways around this through child companies, joint ventures, and the like. But for someone like me who's not keen on the VC scene anyway, it's not really an issue. For us, this meant having enough cash in the bank to get nilenso off the ground in the first place.


What is nilenso?

Over the past year, the twelve of us have decided what nilenso is: Our primary focus is building increasingly sophisticated software. This past year, we've made wonderful tools of devops automation, distributed computing, machine learning, and multi-variate testing. Our tools and skills will only get more interesting and what defines "interesting" is decided by us! As a group, our office is excited about using this toolset, particularly through open source, to enhance essential services: water, food, housing, healthcare, education, scientific exploration.

But what we're excited about goes beyond software. We've made the nilenso office a space where we want to be: We have a library packed with books and meditation cushions. We have a washing machine. We have a nap room. We get healthy, homemade food catered for lunch in environmentally-friendly tiffins. We are investing in the education of our contract staff (cleaning and security). We have a composter for food waste and we recycle everything else. We have secure bicycle and car parking. We have delicious South Indian coffee. Over the next year, we'll change this so that nilenso is the kind of company we want in 2016.

That all describes what nilenso looks like more than it describes what nilenso actually is. Nilenso started as an experiment. None of us were sure if a software cooperative made sense or if we could make it work. After a year and a half, nilenso has grown from an experiment to an idea we want to share. We encourage you to try it out, criticize it, expand on it, and tear it apart. Resilient software systems are made through flexibility and by facing unforeseen obstacles. Resilient businesses are likely to be made of the same stuff.

What would your technology cooperative look like?

Welcome, gratitude.


I recently suffered the most severe injuries of my life - I experienced a retinal tear and detachment which led to multiple surgeries. Those surgeries themselves have permanently damaged my vision and physically deformed my right eye. While I was recovering, I was unable to read, use a computer, or watch video. Oh. And I was in California, on business. The surgeries prevented me from flying so I was unable to go home to India or home-home to Canada. When one is confronted with such restrictions, a strategy is required.

The strategy recommended by everyone I spoke to was familiar: distraction. "You can't read? You should watch movies!" "You can't even watch TV? You should definitely get some audiobooks." The familiar imagery of a sick child surrounded by books, video games, and constant television stood in stark contrast to the time I spent trapped in a Marriott. I meditated. I bathed. I ate. I thought.

Thus far, I have been on 4 silent meditation "retreats". Being entirely alone with one's self is difficult, even when life feels perfectly balanced and content. To attempt such a "retreat" on my own in the midst of my first medical trauma was to oscillate on an emotional sling. This mental and emotional cha-cha danced over both habit and interpretation. In pondering the latter, I arrived at some conclusions which rang truer the more I pondered them.

Habit and emotion was the first constant struggle I encountered. It took a surprising amount of patience to acknowledge, even for a moment, that the accident leading to my retinal tear was entirely my fault. If I fixated on any of the factors leading up to the surgery, I'd find myself externalizing blame for hours. My reptile brain was furious and anxious to pin the blame on the optometrists who refused to sell me contact lenses, the distractions I had encountered riding home that night, and even my friends.

Acknowledging and accepting that the accident was entirely my fault turned out to be only half the battle. Yes, I had decided to ride a bicycle after drinking with friends, with glasses on, late at night, in the dark. Yes. "I" had made these choices. But who was "I"? Was the me of a month prior so much worse a person than I was in the moment of remembering? Was the me of the past worthy of my anger and disappointment? Day by day, I came to see externalizing blame and time-shifting blame to be quite similar. The past is undeniably immutable and yet we humans seem prone to lament and regret the decisions and experiences which created the immediate world we now live in.

Whenever I became obsessed with externalizing the causes of my feelings, I found the only real emotion I would ever hold on to for an extended period of time was anger. Feeling sad? Find a reason to be angry about the thing that "made me sad". Feeling anxious? Don't worry! That emotion is easily stomped on by a good bout of rage. Feeling fear? Humanity has long since proven the best solution to sources of fear are to destroy them. And if we're powerless to destroy mosquitoes buzzing in our ears, the very least we can do it sit around and hate them passionately. As weeks passed, my eye stopped bleeding and eventually lost its sensitivity to the light so I could go outside. But while trapped inside I was vexed by a world of violence, a temporary home in a country with a savage healthcare system, topical police brutality, an ignorant march of Atheists creating A New Religion, global warming, and -my god!- my hotel room didn't have recycling!

The other end of the emotional sling was more productive and the sling did reach this productive end on occasion. While trapped alone with my damaged eyeball, anger was most often a thin veil for fear. My Aunt had sent me an email (read to me by a friend, since I couldn't read it) describing neurological research which placed fear and gratefulness on two ends of an emotional spectrum which could not be tied up simultaneously, thanks to limitations of the human brain. It appeared she was right. While it was easier to fantasize about changing the world into a more beautiful, more scientific, more peaceful place it was not all that difficult to be thankful for the world I was presently experiencing. Similarly, while it was easier to fantasize about having my sight back it was not impossible to be thankful for what sight I still had. With every moment of gratefulness came another. Meditating on gratefulness for a few hours a day, constantly returning to feelings of gratefulness when I was distracted by fear, the moments began to snowball. Soon, full days were spent distancing myself from feelings of fear and anger, even while I was in very intense pain. The distance wasn't rejecting emotion or burying it, however. It was a genuine disinterest in indulging those hateful fantasies I had in prior days.

What I found interesting about gratitude was that it left me surveying where I was, what I was doing, and how I viewed the exciting opportunities which lay ahead. Where anger became narrowing and obsessive, gratitude appeared to grow boundlessly and open new doors to thought and creativity as it went. I had shifted my focus from emotion to interpretation.

I began to ponder my ideals, my philosophy, and my "spirituality" (for lack of a better term). Having recently watched Carl Sagan's original "Cosmos" series, the notion of the Cosmic Calendar, in which the existence of the universe spans one calendar year and the existence of homo sapiens sapiens spans eight full minutes, I began to linger on the idea of human progress viewed under a 200,000 year lens. Previous visualizations of the scientifically observable universe (such as scaleofuniverse.com) always left me feeling utterly insignificant, as though the time scale of the universe were so large as to exist beyond comprehension. The scale of the Cosmic Calendar was comfortingly familiar: I had experienced one year and knew what it felt like. I had experienced milliseconds and knew what they felt like. The scale presented me with a foundation for the consideration of my own actions which did not reduce me (and everyone else) to the infinitesimally small.

I've spent much of my life in search of moments where I felt relevant: scoring a goal, making someone laugh, getting a raise, making a new friend, convincing others of my opinions, demonstrating my intelligence or strength or stamina. Structured as events, every success is ephemeral. Structured as events, my relevance is fleeting. Structured as participating in a continuum, my relevance is not only constant but does not require my superiority over another person in any way. While exploring this idea, it became apparent that the difference between perceived relevance as an aggregation of events and perceived relevance as participation in a continuum was the role of the individual, the self. In the former case, individualism mirrors my fears. The goals and accomplishments of the past are increasingly narrowing of what defines success in the future; my next accomplishment must outstrip my last. In the latter case, individualism is a paradox and mirrors the joy and gratefulness attached to the opposing end of the emotional spectrum. On a 100,000-year timescale, our efforts are collective, cooperative and our "selves" are limitations of perception provided for us to overcome. Within this paradox, the limitations of my "self" are yet one more thing to be grateful for: I get to overcome my self-perception. While held in these moments of intense gratitude, self-reflection could be identified in no other way. On a superficial level, where in the past I've believed myself to observe argument objectively, such joy found in the concept of self-destruction appears nihilistic. I am convinced it is not but to state otherwise without evidence is to ask the reader to indulge in faith or to admit defeat in my ability to dissect what I've observed. Without taking either of those two roads, I hope to unravel that paradox in future essays.

"Where am I? What am I doing?" is a common reflective question for anyone, but particularly for women and men who work in technology. We love to change jobs every year or three, and in my experience a grass-is-always-greener (giag) approach rarely fails. The grass often is greener. Persistent gratefulness changes the answer to this question, though. Where giag says "jump ship!", gratitude says "try steering this ship first."

As a partner of an employee-owned technology cooperative, I get to help steer the ship. I can see that the experiments we run and the conclusions we draw directly influence our collective understanding of what we are building together. Everything we build together lives on a continuum of progress: the entirety of our business, a significant part of our individual lives, and a tiny (but not inconsequential) part of humanity. As I found in quiet moments alone in a darkened room of a Marriott, the consequence of gratitude is to find another source of gratitude. I am very fortunate to be where I am and I'm increasingly thankful for the opportunity to see what's next.

Ceci n'est pas une pipe.

A description of a doctrine without words is not a doctrine without words.

Over the last few days, the internet saw a layered explosion of conversation regarding Adria Richards, and a conversation which happened near her at PyCon 2013. To me, it looked like this:



The first circle represents the initial event. The second circle represents Adria's public reaction. The third circle represents the reactions of HackerNews, Twitter, Playhaven, SendGrid, Anonymous, 4chan, and the internet at large to Adria's reaction. The fourth circle represents the analysis of the internet's reaction. And, for the sake of brevity, the last circle represents the analyses of this analysis. Some where in the middle of that rainbow pile there was some introspection. (Aside: I consider all of these articles worth reading.)

I'm the sort of person who likes to believe I'm above such flame wars, even before I know what they are about. And it was easy for me to nurture that unproductive belief in a little log cabin of silence. Fortunately, I was brought into a conversation in our office and knocked off my little throne of self-righteousness. Someone said something. Someone took offence. Someone else took offense on behalf of the offended (and, of course, themselves). It was discussed and the Original Someone took offense to the implications of that discussion. That's when I stepped in to "help out". Now our picture looks like this:

I've shrunken our original semicircles to avoid a hyperbolic 3364 x 1740 PNG.


No need to thank me, friends. Glad I could help.

Keep in mind that this was a respectful and lucid discussion; everyone I work with is intelligent and thoughtful. But look at those layers: none of us could possibly share a context. It was difficult to nail down what we were even debating most of the time. Our own emotions? A specific incident? The reactions to an incident? The state of our industry? The incident as a microcosm of our industry at large? The state of gender roles and sexuality the world over? Some muddied mix? Anything we'd unravel seemed to hide another layer of experiential and emotional complexity which would quickly bury us again.

It wasn't until hours after Tejas stepped in and suggested we all take the weekend to sleep on it that I realized I was making precisely the mistake I presumed everyone else was making. I believed I understood. I believed I had clarity. I believed if they would just listen to me I could show them the answer. Specifically, I believed I had the one piece of advice everyone else was missing: "Maybe you should take some time to reflect on how she might feel." The irony still hurts.

I will continue to participate in this conversation. (And the related conversation about stopping rape, as it is ultimately more important.) Many of the links in this chain are ugly links. When a conversation is itself about our understanding of one another -- and thus how we treat one another -- those ugly event-links are (a) pointers to discussions we need to have and (b) proof the conversation is valuable, because we haven't stopped hurting each other yet. The recursive nature of the conversation shouldn't scare us but it might suggest we speak carefully.

But before I participate in the conversation, I'm peeling back all ten layers and taking stock: Who am I? A healthy, educated, middle-class, white man. I will never be a woman and I do not have the imaginative capacity to understand what a woman feels. I will never be another person and I do not have the imaginative capacity to understand what another human being feels. I can learn by listening with an open mind, even if I will never perfect my understanding. How beautifully this dovetails with my position of privilege! It's the perfect time to shut up and take some of my own medicine: Reflect.

How do I really see other people? How do I really see myself? When do I judge you? When do I desire you? When do I reject you? Why? When my perceptions take life in my actions and my words do you feel threatened, comforted, intrigued, or confused? Why? Which link in the chain am I? Am I making things better?

. . .

.

defining the test for rubymonk

I wrote some time ago about defining the interface for rubymonk. Glancing at it again that post was a bit rambling. Sorry. However, it did introduce a concept I've been mulling over for the last half-decade: re-framing all software in terms of automation. Robots. I'll start with RubyMonk as an example, and then move on to others and counterexamples.

RubyMonk has quite a sophisticated back-end. The details aren't important for this discussion, but it is essentially a virtual sandbox which quickly and safely executes any programming language (not just Ruby) in isolation, preventing that code from interrupting other users' exercises, other processes running on the RubyMonk servers, other files on said servers, or the clean operation of rubymonk.com itself. Once this sandboxing technology is in place, the interesting question is no longer "how do we run arbitrary code submitted from a browser?" but "how do we teach someone Ruby?"

Everyone on the RubyMonk team has taught Ruby to classmates, colleagues, kids, and friends. The activity of "teaching Ruby" is a known quantity. In the world of yesteryear, however, these lessons always involved our physical presence. From our teachers we have learned how to recognize certain categories of mistakes and how to introduce a correction. From them we have also learned when not to correct someone -- sometimes feeling the pain of a mistake is more memorable. Conversely, they taught us to identify frustrations and to step away from an exercise when it becomes too emotionally taxing. They taught us to ask the right questions when someone doesn't appear to understand a concept. Or to employ humour, analogies, and anecdotes to colour a subject. Finally, they taught us to teach. And so, when we work with a new programmer, we also teach them to teach.

This is an incredibly human endeavour, teaching. But all software is an immaterial robot. We need to bridge the divide. How does the RubyMonk robot work? Today, when you attempt an exercise on RubyMonk, you are learning from an interactive book: first you read a blurb about lambdas or ActiveRecord or your topic de jour. Next, the robot quizzes you by offering up an exercise. Your solution to the exercise is sent to the RubyMonk server and executed against a small battery of tests -- each of your test results is returned to you with a brief explanation. If you pass all the tests, you pass the exercise. So what are we missing? Well, we can't teach you TDD with this method yet -- how do we test a test? And if the solution to that seems obvious, how about teaching SQL? Prolog? Portuguese?  Calculus? And once you solve those problems (and we largely have), the real challenge emerges. So far the robot does not recognize categorical mistakes. The robot does not infer when to let you suffer through a mistake to make it stick (perhaps thankfully!) nor does it know when to tell you to step away for a tea break and give your mind a rest. It doesn't ask the student dynamic exploratory questions on difficult lessons. It doesn't remember the last time it forgot the order of parameters to the signature of Enumerable#inject.

Yet.

The challenge of RubyMonk -- as is of all useful software -- is to replace a human being. And while the task of teaching is surely orders of magnitude more complex than the task of photocopying documents or playing your favourite David Bowie track, the goal remains the same: Build robots. Free up human time. iTunes is a robot. Prismatic is a robot. RubyMonk is a robot.

I've only been back in the startup world for one year. There's a lot of great stuff going on around the world right now. The last time I lived in India there was no Cleartrip or Redbus, which are robotic replacements for travel agents and telephone booking. Online banking was a non-starter. In 2013, every country seems to have technology covering the basics. The better technology companies are geo-agnostic or are striving to be. I don't want to hire a robot I can't take with me to Thailand (it's always fun to see which part of my Rdio collection is missing when I land in a new country... but I'd still prefer if it were all there). The world is getting smaller and faster and more overwhelming -- but thankfully a generation of nerds is fighting to smooth the transition for you. When we can't build a robot to help you, we'll fight the antiquated laws which stifle progress. At least, some of us will.

I see a divide between the inevitable future of beautiful, helpful robots built by a new generation of businesses (and non-profits, for that matter) and the ephemeral world of peculiar toys established on a misguided premise. This hit me in the face as I read through The Lean Startup, agreeing with everything Ries had to say but feeling a peculiar unease throughout the entire book. Why was I getting such a barfy feeling in my guts reading a book of sensible advice? It only occurred to me once I'd finished that most of his experience was drawn from building IMVU, which was a robot version of human... what, exactly? I'm not sure, either.

It's a good thing for those of us in the startup world that there is money to fund such endeavours: GroupOn, Instagram, the iPhone-ordered-artisanal-bread-aged-cheese-local-ingredient-biodegradable-packaging... grilled cheese sandwich. A cornucopia of startups whose primary customers are other startups. (Ever read a short story by an English Lit major about an English Lit major who suffered from writer's block during a short story assignment? Yeah. That.) A thousand other companies that lack a real goal, a real business model, a real raison d'être. If those companies can find enough money to feed their employees, surely so can those building software which solves real problems.

At C42 Engineering we're currently working on a process to help us identify meaningful problems and gaps in the solution space. We'll publish everything about this process because there are big, hard problems left to solve. And each of those problems is an opportunity for someone to build an elegant robot. We can't wait to see yours.

An Atheist's Glimpse of God

One of the benefits of working for a startup like C42 Engineering (where I help build rubymonk.com -- the name is a coincidence) is the broad range of experiences available, both in and out of the office. Thanks to our flexible work environment, I was able to travel to Himachal Pradesh for a couple weeks of experimenting on myself as a break from experimenting with software. I know not everyone enjoys such benefits, so let me start by saying this: I am thankful.

An introductory course in Vipassana meditation is 100 hours of meditation practiced over 10 days. I took this course in late 2012 and it was simultaneously the hardest and most interesting thing I've ever done. In the months since I took the course, I've tried dozens of times to explain the experience in print and in person. I've consistently failed.

With that in mind, let's all just agree this article will also be a failure. Low expectations will prevent us from taking things too seriously and prevent me from talking too much. Hopefully.

The Problem

I haven't identified with atheism since I was an angry teenager but in 31 years on Earth, I've never put faith in something greater than myself. That's fine. I've never had much faith in myself, either. The bigger things aren't missing out on much. I've called out this fact because I expect my retelling of my experience to sound considerably religious, even though I am not.

I ask the same questions we all ask. Who am I? Who are we? Where are we from? What is our purpose? What is my purpose? How can I help? Usually my answers come in the form of pithy quotes from scientists whose attractive wisdom I've come to wish was my own. Other answers I've found in secular interpretation of religious and philosophical tomes: the bible, the torah, the quran, the tao te ching, the writings of chuang tzu, calvin and hobbes, dr. seuss. And though many of these answers are momentarily comforting, I've spent the majority of my life in a state of philosophical discontent.

I'm a middle-class kid from Western Canada. I have a loving, supportive family. I couldn't ask for better friends. Ninety percent of Maslow's pyramid has been taken care of for as long as I could remember, leaving me to arrogantly believe it's my responsibility to improve this world, even if I have no idea how to do so.

Enter Meditation

I didn't start meditating for some spiritual or mystical purpose. I started out of arrogance: "Sit there and think about breathing." Yeah. That sounds pretty easy and relaxing. I bet I'll be good at it.

Once I realized that meditation is incredibly difficult, arrogance transformed from my reason for attempting meditation into my reason for continuing to try: After a while, I noticed that it did start to relax me. Not during meditation, of course: the meditating part was still insanely difficult. But if I meditated for half an hour before work, I found myself occasionally enjoying the unpleasant bus commute. Sometimes there was a marked change in my behaviour for the first few hours of the day. I was less arrogant. I was less of a jerk in general.

Anyway, that's pretty boring. The point is: meditation is hard. To make this point clearer, I've set up an interlude so you can meditate if you've never tried it before. It will only take 10 minutes, which is relatively short compared to the 6000 minutes of an introductory vipassana course.

Meditation isn't usually very complicated. Try this for ten minutes:
  • put your hands on your lap, close your eyes -- don't move or open your eyes until you hear the 10-minute gong.
  • focus on your breath; feel it wherever you can -- in your nose, in your throat, in your lungs, in your diaphragm.
  • distracting thoughts will come up; just ignore them. when you notice you've been distracted, gently let go of the thought and focus on your breath again.
  • if you get really distracted, breathe hard a few times so your breath is easier to focus on.
  • don't feel disappointed or defeated when your mind wanders... it's just what happens.
  • make sure you hear a gong sound when you click "Start"; the timer only works in modern browsers (HTML5).


00:00



How did that go? Was it difficult? If you found it easy, try this twenty minute timer.

00:00



You are amazing.

The Material

The course is completely free of charge. The course center is spartan. The stone buildings have no ornamentation. There is no text beyond the essential. ("Breakfast is served at 6:30AM.", "Toilets this way.") There is no imagery whatsoever, not even a little stone buddha statue. Males sleep in little huts on one side of Camp Goenka and eat on the male side of the kitchen. Females sleep on the other side of Camp Goenka and eat on the female side of the kitchen. Everyone meditates together in a big hall.

The course is taught by recorded video and audio, which gives the drab surroundings an extra-culty feel. All vipassana centres worldwide use the same video, so one hopes Mr. Goenka records a new one in high-definition before he dies. The DVD used for the course already looks dated; in a couple decades it will resemble Scientology recruitment videos from the 1970s... in medium, if not in content. Some of the instructional audio involves chanting. I'm not a fan but by the end of the course I was accustomed to it. The chanting, as it turns out, is little more than the instruction repeated in Pali.

What happens on a vipassana course is very simple: You meditate. There are breaks in the day to eat, sleep, poop, shower, and walk around. Sometimes a dog would wander through the course centre and we could pet him. That was exciting. Sunset was the only daily sensory event of note.

What doesn't happen on a vipassana course? Everything else. Just in case you were wondering, you can't: talk, read, write, exercise, eat your own food,  use the internet, use a phone, or look anyone in the eye. Some monastic rules (precepts) also apply: No killing (even mosquitoes), no stealing, no sex, no masturbation, no lying, no smoking, no drinking, no drugs. Thankfully, when so much is forbidden, some rules cancel each other out! It's easy to avoid telling lies when you can't speak. Though you can speak to the instructor and the volunteers, so there are one or two daily opportunities if you're really jonesing to tell a delicious lie.

Every day follows the same format. Vipassana centers exist in most countries across the globe and the course is run identically in each one:



Though it's never explicitly mentioned, the course is effectively broken up into three equal parts:

Days 1 - 3: Anapana (breathing) Meditation. These first three days are spent mentally staring at your nose. It's not as boring as it sounds because it's excruciatingly painful. Sitting still for ten hours a day hurts. "It will be painful." was the forewarning of the instructor when I complained about my knees. He was right. By the third day, I had experienced the greatest physical pain of my life.

Days 4 - 6: Vipassana (insight) Meditation. These next three days are spent learning and practicing vipassana. It's basically an extension of Anapana: rather than focusing explicitly on the skin beneath the nostrils, scan every bit of skin over the entire surface of the body. Over and over and over. Somehow, this actually calms the pain caused by sitting still for ten hours a day. The pain is not eliminated but it becomes much less significant.

Days 7 - 9: Deep Vipassana Meditation. The last three days of "serious" meditation are where things get weird. Surface scanning gives way to deeper penetration of the body. Physical pain takes a back seat to the volcano of emotion and memory one opens up after six days of attention turned inward. On Day 7, one girl ran out of the hall to sob and howl loudly in the courtyard. After the morning meditation on the ninth day, I broke down and cried in a way I haven't felt myself do since childhood. The meditation hall was so utterly silent on this ninth day it was almost impossible to believe this was the same crowd that was shuffling and burping and grunting and coughing and farting their way through the beginning of the course.

Day 10: Vipassana and Metta Bhavana. Noble silence is broken: we can talk and look each other in the eye again. The businessmen of the crowd are back on their Blackberries. Writing utensils emerge and some return to the book they abandoned nine days prior. As senses return and the intensity of meditation is visibly dulled, the world becomes real again. Each meditation ends with a few minutes of Metta Bhavana (loving-kindness) meditation.

For the following week, I also meditated twice a day at the vipassana centre. Everyone seemed to experience strange physical effects during the course but most of mine appeared during this period. Toni (a friend I'd met just before the course) found her hearing was so sensitive in the days following the course that the sound of a crowded restaurant was deafening. Pieter (a friend I met just after the course) found his sight was increasingly crisp each day until the tenth. 

The most peculiar physical reaction I had during this period was that as long as I was meditating twice a day, I slept comfortably on my back. I have never slept on my back in my entire life. I woke with no lower back pain for the first time as an adult.

The most surreal physical observation I made during this period was twofold: I started to feel deep into my body, on occasion. Once, into my bronchial tubes and the tops of my lungs. Another time, while lying down, I could feel the blood coursing through my cardiovascular system with unnerving clarity. I am a fragile little blood sack.

The Immaterial

Those concepts outside the realm of the physical are, out of interest, those which I tried to impress upon others in the months following my course. This is the section where I will fail, in case you thought I was doing a good job of explaining the experience thus far. I'll do my best but in the end I can only suggest that, if you are at all curious, you could try an introductory course yourself.

"It's strange that the very act of thinking about something makes it impossible to see it." -- Pieter Jan Visser

I didn't have words to describe this until my conversation with Pieter. In the last three or four days of the course, I started to see things. My eyes were closed, of course... and the "things" weren't really visual. However, far in the distance, on the horizon of comprehension, I saw -- briefly and for the first time -- something which resembled my beginnings. I don't know much about this thing beyond what Pieter said. To know it, to think about it, to try to understand it... was for it to disappear. I think it may have been recursive: defined in terms of itself. I can't tell you why or how.

Such a thing... this non-thing, born of nothing, apropos of nothing, ceasing to exist in the presence of anything else, is the closest I've ever come to experiencing anything religious or spiritual in my life. And yet, the process of discovery felt more scientific than anything else. Through sheer observation -- in the necessary absence of effort, suggestion, idea, word, colour, sound, smell, or taste -- an unadulterated reality appeared. It was strange and new but somehow it made sense.

Where this non-thing was very small and very hard to relate, the other idea which appeared toward the end of the course was much clearer: the meditation became an allegory, a microcosm, for the world around me. The past is immutable; why worry about it? The future is unknown and impossible to predict; why worry about it? Planning is not worrying, mind you. Just make plans with these two truths in mind. Meditation is terrific practice since there's no need to plan -- I just get to try my hand at avoiding worry. As an incredibly anxious person, this can be surprisingly informative.

A second microcosm becomes obvious after some time: After eight or nine days of internal monologue, I noticed that the way I treat myself is much like the way I treat others. Distraction was frustrating, my frustration with distraction was frustration with myself, if I was angry at the distraction I was angry with myself, and the anger never helped. Calmness and rationality prevailed every time. Gentleness. I had to be gentle with myself or I did more harm than good. I'm not certain, but I suspect it's true of my interactions with the world I live in as well.

And with that, my failure to explain my experience is almost complete. There's much I've missed. The hours of the course I spent doubting the motives of the instructors, the meditation itself, and my own sanity in signing up for such a thing -- all these doubts were quenched. My unexpected reaction to intoxicants when I returned home -- I still enjoyed them. My seeming inability to lie to myself by the end of the course -- I ask myself hard questions all the time but I apparently don't always answer from the heart. My frustration with the inclusion of Buddhist beliefs such as reincarnation, kalapas, and omniscience -- we were told to ignore these beliefs if we so chose; I ignored them. And still more remains.

Rather than exhaustively discussing every aspect of the experience, I'll leave you with what attracts me most to this bizarre practice: It is ordinary. There are no tools: Just sit down. There is nothing to see: Just close your eyes. There is nothing to believe in, nothing to talk about, nothing to do... yet it was more informative than any conversation I've had or book I've read. There is no literature to read, no philosophy to ponder, no behaviour expected of you. There are no gods, there are no drugs, there is no magic... yet it was more intense and revelatory than any acid trip.

As the Zen kids say: "Just sit."


defining the interface for rubymonk

Discussing an interview I had yesterday --quite interesting when delivered with Aninda-- with a non-technical friend, we stumbled on the fact that everything in Computer Science is an interface. From the moment you differentiate data from code, which wasn't immediately obvious to even the first computer programmers twiddling individual bits....

Everything you build in software is defined by an interface. These are the boundaries, but they're also where the magic happens.

Here are some interfaces:

http://www.c42.in/a_url_is_an_interface/
(We'll come back to this.)



$ ps aux | grep clojure




At this point, I had to stop to explain how a function works. Does this help? (Hey Blogger or Google or whoever the heck is in charge: why can't that image be an SVG?)




Objects are the next interface to consider. They are a bundle of functions. Actually, they're more complex than that. They are a bunch of closures... actually, dispatching closures. (Okay, I've lost my non-technical friend at this point. Oh well.) There are other ways of looking at them, but we'll take the perspective of the function, which we already agree is quite simple. To the function, the object looks like a set of rules about how one defines interfaces with functions. Objects can be made of functions but it's not quite so the other way around (though the object may consider this point contentious or even academic). The function doesn't care. To him, an object is just a cluster -- however small -- of functions who have been told in advance that part of how they behave must change, because of the way they were set up... this time, at least. And what's worse, just because an object has been set up -- it won't necessarily stay that way! Yikes. Looking at it from the outside, the function pities the object. The function can choose to behave this way but the default position of the function is, "I never change!" The object changes himself (or worse, allows other, unknown objects to change him). It takes some work for the function to behave so sloppily; you need multiple functions -- and functions returning functions, no less (as a type's constructor returns a function whose sole purpose is dispatch based on the type of the first parameter and the name of the second -- usually with these parameters taking special positions, like first_is_an_object.second_is_a_method. I digress.). Such effort forces a conscious choice on the part of the person writing that function. "This risk is worth it!" you say, and an interface of your choice, with complexity of your choice, emerges.




Finally, at the top of this scale are languages. They themselves are composed of functions and objects. In fact, most compilers and interpreters for languages can be thought of as pure functions: I give you the language, you give me the binary, assembly, bytecode, or runtime language (JS, these days). This is the most complex interface. Usually, a human still speaks to this interface. In 2012, this interface is fully-manual. These humans are called programmers. And the best of them will make it their task to automate away their own job. But, as of 2012, programs that write programs are risky and difficult. Automation can be seen on any of these other scales (functions and data) without writing your own macro or yet another compiler or parser. Choose a language which gives you this option when you have no other choice, but be careful to wield such a weapon when you see no other way out. Otherwise, it is a simple interface you want.



Kitty pointed out to me that I haven't called out a very important point: All these interfaces are fundamentally the same. They accept some input and produce some output (even if that output is a side-effect). Objects are built of functions, and they're both built of languages. And the languages are built of objects and functions. What differentiates each one is the mental energy required to contend with the interface's complexity. Stateless interfaces -- such as immutable objects, pure functions, and HTTP -- are always easier to understand because there are fewer balls in the air. The "given" of given-when-then doesn't apply if there's nothing to set up. There's only when and then.



This makes the interface for RubyMonk interesting. There is of course a very cute visual style to rubymonk.com (yeah, we love it too), but the real interface is the user's interaction with the mentor -- how we evaluate their progress and the programs they write. How we assert that something they've done is correct -- because the programs they write are data to us. As we teach more complex concepts, this interface itself will become increasingly complex by its very nature. Or, perhaps, we will realize the beautiful intrinsic quality of data that is code and code that is data, leading us to discover an elegant solution to the automation of the Hacker Mentor.


zero to emacs in under 5 minutes

You want to write Clojure. You want to write it in Emacs. Here's how.

1. Grab Leiningen.

mkdir -p ~/bin
cd ~/bin
wget https://raw.github.com/technomancy/leiningen/stable/bin/lein
chmod +x lein
echo 'PATH=$PATH:~/bin' >> ~/.profile
lein self-install

This will get you leiningen, Clojure's build tool.


2. Grab Clojure.


cd ~/code
lein new my-first-clojure-project
cd my-first-clojure-project
lein deps
`lein deps` will bring down a local copy of Clojure. Look in ~/code/my-first-clojure-project/lib !


3. Grab swank-clojure.


lein plugin install swank-clojure 1.4.0
This gives you the `clojure-jack-in` command in emacs. It's your samurai sword.


4. Grab a healthy .emacs config.

mv ~/.emacs ~/.emacs.bak
mv ~/.emacs.d ~/.emacs.d.bak
git clone git@github.com:c42/dotfiles.git
ln -s dotfiles/emacs.d ~/.emacs.d


5. Grab an emacs.

Ubuntu: https://launchpad.net/~cassou/+archive/emacs
OS X: http://emacsformacosx.com/emacs-builds/Emacs-pretest-24.0.94-universal-10.6.8.dmg

Running emacs for the first time will automatically install all the packages you need. Now run your first emacs repl!
M-x clojure-jack-in

TADA!