Language, Expression and Design



October 2017

On whose authority?

by Chris Zheng,

...Fuck Clojure.

There I've said it and God it feels good.

I say it with much admiration and respect to all the members of community. I've learnt so much from being in this microcosm of dynamism, ideas and learning over the past 8 years. Clojure has allowed me to get to know so many amazing people, to travel to a whole bunch of places and to do things that I had never thought possible.

Having said that, I've gone from a wide-eyed, idealistic fanboy to someone less idealistic, and almost cynical about the trajectory of the language. I have gained so much - but at the same time, I had expected more. Now I'm just tired.

Like the ending of a long love affair with a girl way out of my league, I loved and loathed every single minute of my time as a clojure developer. The experience, though unforgettable, has taken a toll on my mental and physical well-being. I feel that I have given my all. Now that the party is over and sunrise begins to reveal the plastic fairy lights and overdone makeup, I begin to question my life as well as the values that I am looking for within it.

I remember when I first got into Clojure. I had been struggling to build a concurrent system for years (and to this day, I'm still clueless about how to do it with locks and semaphores). I had been working with python back then and it was really hard work. Then I read Paul Graham's hacker's and painter's book in his article Revenge of the Nerds

"As one data point on the curve, at any rate, if you were to compete with ITA and chose to write your software in C, they would be able to develop software twenty times faster than you. If you spent a year on a new feature, they'd be able to duplicate it in less than three weeks. Whereas if they spent just three months developing something new, it would be five years before you had it too."

My thinking at the time was. Wow. I want to be elite and so after a brief spell with Common Lisp, decided on Clojure. The hook for me (like probably a lot of people) was watching Rich Hickey's epic refutation of OOP and his infamous Ants demo. I was flabbergasted at the fact that I spent 3 months trying to figure out how to get two processes to talk to each other and there was this guy running a graphical simulation of over 100 threads syncing flawlessly. It was a real wake up call to what was possible.

So I dove right in. At the time, no one was employing for Clojure and so I worked as an IT guy in a new age crystal store learning the craft. No one really knew what I was doing and as most of the staff had the innate ability to talk to crystals, they assumed I had the same type of talent except with electronic equiptment. I have very fond memories of the time there both working and learning. I remember that it was around 2010-2013 period where Clojure was really growing in terms of the community and all the interesting ideas that people were implementing. Because of my isolation, I had to resort to asking questions on stackoverflow. I stopped asking a while back but the count of my clojure related questions is currently at 205. Of course, there were a few assholes on SO that find enjoyment marking questions as 'closed' or 'irrelevent' because they didn't understand it correctly. If those questions had been allowed to stay, my SO clojure related count would have been about 230. But who's counting anyways.

There was also the Monthly Melbourne Clojure Meetup Group organised by James and Hank. It was a real treat to talk to those that solved problems through deduction, logic and language instead of massages, eagle feathers and putting crystal on each other.

In the period of 2010 to 2013, so much cool shit came out on a weekly basis. I don't know how it happened. It was a time where I was constantly challenged to improve my thought and design process. The highlights showcased in the 2011 and 2012 conj talks were phenomenal and the level of innovation and experimentation was beyond anything I had experienced. As someone still new to the scene, I was star stuck. 2013 marked the year where clojure 'jumped the shark' so to speak. This marked the path to 'enterprise clojure'. One of the real treats for 2013 was the talk by prismatic where the community was shown that it was not only conceivable, but also possible that an entire platform could be built on clojure. That talk set the bar and the trend of the enterprise platform has continued over the years. Now, it's a staple of a conference to have about half a dozen talks where a team lead (but not necessarily dev) of a well known organisation saying "look everyone, we've built this large data analytics platform using clojure". While it was cool about 5 years ago, I've lost the excitement that those talks once brought.

I've decided to break from actively contributing to the community. This is mainly from actions that I've seen from my perspective that have fragmented community. I'm putting the focus on Cognitect and the company's impact on developer culture.

One. The Establishment and the myth of the Rockstar Developer

I understand that there is great pressure for a company to increase it's product range, market its brand and make money. However, in the case of Cognitect, I feel that the company has had an unreasonable amount of influence of the language. Like a single mother with custody over her kids, Cognitect has definitely been the major force in shaping the direction of development. This is however a double-edged sword. I have had a couple of pull-requests rejected and then introduced a year after I released a library for the feature. I don't think I'm the only person with the experience.

The fact that Cognitect have hired so many high profile contributors to the Clojure ecosystem has resulted in a boost for both the company, as well as the people that work there. Who doesn't want to play guitar and talk immutability with Rich at the watercooler? Rich epitomizes this concept of a 'Rockstar Programmer' - a brilliant, all-round individual who could solve any problem known to man - all in his sleep. I know I believed in it - and the things that I would have given to be part of the 'establishment'

How this mythos influences the community however is subtle, but present. The mythos attracts the gunslingers and the lone rangers of tech. Those that know that anything is possible. For many in the community (including myself to some extent), it also brings out the darker attributes of genius such as narcissim and jealousy. In short, clojure amplifies the qualities inherent within an individual with a tool that is extremely powerful. The need for cooperating with others diminishes and this is not good for community.

Two. Standards and Ignoring the Defacto Community

With great power comes great responsibility. I feel that Cognitect could do a lot more to promote other projects with the clojure ecosystem that are not internal to the company. One example was some of a 'defacto standard' going away was Noir. At it's peak, Noir was a great library for building webapps due to it's emphasis on documentation and design. It had the potential to be something pretty cool if more people supported it. I don't know what happened but suddenly, it was not the flavor of the month anymore. If more collaboration had occured then maybe it would have been different. I don't know. Maybe using compojure was enough. I don't know. I just felt that Noir had the potential to be the 'django of clojure' and due to whatever reason, it never did. Noir was essentially dead in 2013 when Chris Granger started on Light Table and his attention moved else where.

In the last couple of years, two projects gave me doubts as to the intentions of the core. The first was the Arachne project and the second was clojure.spec. I believe that both projects undermined the spirit of generousity by putting the interests of the establishment over that of the whole. Whether deliberate or not, there was a certain set of blinkers put on that ignored alot of what was going on within the broader community.

Since the post was published, there was a a bit of confusion about my portrayal about the status of Arachne. I wanted to clarify that Arachne is not an 'official' Cognitect project. However, there is a certain prestige gained from working at Cognitect and this was what I wanted to express. I personally found the Arachne kickstarter campaign a little bit condescending and I was interested to read yogthos's comment on reddit. I didn't think we needed yet another web framework - we need more documentation, examples and sexy home pages for existing ones. However shallow that may be, it worked for Noir and countless frameworks in other languages. A sexy webpage for Ring would be amazing. I personally would contribute because the library has helped me immensely over the years. I thought that all the campaign was to confuse an already fragmented landscape of web frameworks.

When clojure.spec came out, I was quite sad because I had grown very attached to prismatic/schema. I felt that schema was on the verge of establishing itself as the 'defacto' standard and although spec offered 'additional' features, it meant that the community was forced to choose. The energy and momentum going into schema suddenly stopped and it's a real shame because once the 'official' version comes out, the alternatives tend to be overlooked.

Three. Datomic

Just please open source it already. GraphQL is here to stay and gaining ground. The breakthough technology is somewhat emulated with gundb and very soon the technology could be superceeded.

Quite a few things have happened that made me recently that made me reevaluate how long I should be a developer.

I think I'm still ahead of the curve but I've realised that I can't keep running anymore. Technology pushes forward in leaps and bounds and we the technologists end up getting in the way most of the time. The things we thought impossible has become the norm today. Money, fame, success - they are all so short lived. What's important is community, respect and understanding because it's through others that we grow.

Fuck. Clojure.

Update: I've taken note of some of the confusion with language around the timeline of Noir and the timeline of Arachne and updated the post. Also, the relationship of Arachne and Cognitect can be better explained by Tim Baldridge of Cognitect in the featured comments.

comments powered by Disqus