<story><title>K Language (2011)</title><url>http://www.math.bas.bg/bantchev/place/k.html</url></story><parent_chain><item><author>invalidOrTaken</author><text>A story, since in retrospect I think it&amp;#x27;s worth telling.&lt;p&gt;Some years ago I was at the SF Clojure meetup.  Arthur Whitney&amp;#x27;s daughter worked at the sponsoring company, and he agreed to come tell us about K.&lt;p&gt;In retrospect, I don&amp;#x27;t think we gave him the welcome he deserved.  No one was rude or anything, but it seemed there was a disconnect:  Arthur was keen to show off how &lt;i&gt;fast&lt;/i&gt; K (and Kdb) was, over zillions and zillions of rows.&lt;p&gt;But the thing that the Clojurists were all searching for (that got them into Clojure in the first place) was &lt;i&gt;expressivity&lt;/i&gt;.  Is Clojure fast?  I don&amp;#x27;t know, generally the problems I face come down to avoiding balls of mud rather than performance bottlenecks.  And I think that was true of most there.&lt;p&gt;So Arthur got something of an underwhelming reception.  I remember someone asking &amp;quot;Does K have the ability to self-modify, a la Lisp macros?&amp;quot;  When Arthur said no, you could see most people in the room just sort of mentally shrug and move on.&lt;p&gt;And this was too bad.  Because recently I&amp;#x27;ve been playing around with J (another APL descendant) and been very impressed by some expressivity&amp;#x2F;readability benefits.  Some small things that have very big effects on the codebase you actually end up with.&lt;p&gt;The first thing is the avoidance of abstraction.  To use a Twitterism:&lt;p&gt;Broke:  Just write your code and don&amp;#x27;t divide it into functions, creating one long main method&lt;p&gt;Woke: Divide your code up, naming parts that get reused&lt;p&gt;Bespoke:  If your code is made up of &lt;i&gt;really really short&lt;/i&gt; things, it ends up being shorter than &lt;i&gt;the names you would use&lt;/i&gt;, so you can just &lt;i&gt;write the thing&lt;/i&gt; rather than your name for it. An analogy would be:  there is no human-comprehensible way to communicate the idea of &amp;quot;picosecond&amp;quot;  in less time than an actual picosecond.&lt;p&gt;The other thing I didn&amp;#x27;t expect was the benefit of multiple dispatch being baked into e v e r y t h i n g.  In Clojure I might write (map + a b) to add each index together; in J I could just write a+b.&lt;p&gt;This is neat stuff!  Best practices for keeping complexity down in APL&amp;#x27;s tend to be the &lt;i&gt;opposite&lt;/i&gt; of what they are in other languages.  Aaron Hsu gave a talk about this: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.youtube.com&amp;#x2F;watch?v=v7Mt0GYHU9A&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.youtube.com&amp;#x2F;watch?v=v7Mt0GYHU9A&lt;/a&gt;&lt;p&gt;It&amp;#x27;s too bad!  Arthur came to tell us about speed---there&amp;#x27;s a reason it&amp;#x27;s used on giant datasets in &lt;i&gt;finance&lt;/i&gt;, where performance translates directly into cash---but I wish we&amp;#x27;d had the presence of mind to ask more about &lt;i&gt;experience&lt;/i&gt; of writing K.&lt;p&gt;So, Arthur, if you&amp;#x27;re reading this:  Sorry everyone seemed kinda bored in SF a few years ago when you kindly came to present.  We missed out!</text></item></parent_chain><comment><author>nivertech</author><text>&lt;i&gt;really really short things, it ends up being shorter than the names you would use, so you can just write the thing rather than your name for it&lt;/i&gt;&lt;p&gt;I inherited a kdb&amp;#x2F;q codebase like this, the problem with it, is that when you making a change, you need to find all these little code snippets and change them.&lt;p&gt;You need to rely on TDD to make it work, and this doesn&amp;#x27;t really scale to large projects.&lt;p&gt;Much better strategy if you don&amp;#x27;t want to name functions, is to use their hash.&lt;p&gt;But still conventional approach of choosing meaningful (longer than 1-2 letter) identifiers and writing comments works much better.&lt;p&gt;Also the same expression in q can represent several different things, i.e. a symbol might be a name of the column in the table, a key in the dictionary, an enum, a string, a constant, a global variable, etc. Without naming it, after a week you will no longer remember the original meaning.&lt;p&gt;To add salt on injury - you are limited on the number of global constants (really variables) you can use, so it&amp;#x27;s not always possible to name everything.</text></comment>
<story><title>K Language (2011)</title><url>http://www.math.bas.bg/bantchev/place/k.html</url></story><parent_chain><item><author>invalidOrTaken</author><text>A story, since in retrospect I think it&amp;#x27;s worth telling.&lt;p&gt;Some years ago I was at the SF Clojure meetup.  Arthur Whitney&amp;#x27;s daughter worked at the sponsoring company, and he agreed to come tell us about K.&lt;p&gt;In retrospect, I don&amp;#x27;t think we gave him the welcome he deserved.  No one was rude or anything, but it seemed there was a disconnect:  Arthur was keen to show off how &lt;i&gt;fast&lt;/i&gt; K (and Kdb) was, over zillions and zillions of rows.&lt;p&gt;But the thing that the Clojurists were all searching for (that got them into Clojure in the first place) was &lt;i&gt;expressivity&lt;/i&gt;.  Is Clojure fast?  I don&amp;#x27;t know, generally the problems I face come down to avoiding balls of mud rather than performance bottlenecks.  And I think that was true of most there.&lt;p&gt;So Arthur got something of an underwhelming reception.  I remember someone asking &amp;quot;Does K have the ability to self-modify, a la Lisp macros?&amp;quot;  When Arthur said no, you could see most people in the room just sort of mentally shrug and move on.&lt;p&gt;And this was too bad.  Because recently I&amp;#x27;ve been playing around with J (another APL descendant) and been very impressed by some expressivity&amp;#x2F;readability benefits.  Some small things that have very big effects on the codebase you actually end up with.&lt;p&gt;The first thing is the avoidance of abstraction.  To use a Twitterism:&lt;p&gt;Broke:  Just write your code and don&amp;#x27;t divide it into functions, creating one long main method&lt;p&gt;Woke: Divide your code up, naming parts that get reused&lt;p&gt;Bespoke:  If your code is made up of &lt;i&gt;really really short&lt;/i&gt; things, it ends up being shorter than &lt;i&gt;the names you would use&lt;/i&gt;, so you can just &lt;i&gt;write the thing&lt;/i&gt; rather than your name for it. An analogy would be:  there is no human-comprehensible way to communicate the idea of &amp;quot;picosecond&amp;quot;  in less time than an actual picosecond.&lt;p&gt;The other thing I didn&amp;#x27;t expect was the benefit of multiple dispatch being baked into e v e r y t h i n g.  In Clojure I might write (map + a b) to add each index together; in J I could just write a+b.&lt;p&gt;This is neat stuff!  Best practices for keeping complexity down in APL&amp;#x27;s tend to be the &lt;i&gt;opposite&lt;/i&gt; of what they are in other languages.  Aaron Hsu gave a talk about this: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.youtube.com&amp;#x2F;watch?v=v7Mt0GYHU9A&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.youtube.com&amp;#x2F;watch?v=v7Mt0GYHU9A&lt;/a&gt;&lt;p&gt;It&amp;#x27;s too bad!  Arthur came to tell us about speed---there&amp;#x27;s a reason it&amp;#x27;s used on giant datasets in &lt;i&gt;finance&lt;/i&gt;, where performance translates directly into cash---but I wish we&amp;#x27;d had the presence of mind to ask more about &lt;i&gt;experience&lt;/i&gt; of writing K.&lt;p&gt;So, Arthur, if you&amp;#x27;re reading this:  Sorry everyone seemed kinda bored in SF a few years ago when you kindly came to present.  We missed out!</text></item></parent_chain><comment><author>idoh</author><text>I was at that meetup, and I do remember the Clojure crowd not being all that impressed. But it definitely came across that Arthur Whitney was a type of programming wizard. He had some offhand remark that he was running his laptop off of an OS he made with K, and was editing with an editor he made in K, but somehow what still working on getting a sound driver to work.</text></comment>