{"id":1695,"date":"2013-03-25T13:35:16","date_gmt":"2013-03-25T18:35:16","guid":{"rendered":"http:\/\/redmonk.com\/dberkholz\/?p=1695"},"modified":"2015-04-05T09:51:22","modified_gmt":"2015-04-05T14:51:22","slug":"programming-languages-ranked-by-expressiveness","status":"publish","type":"post","link":"https:\/\/redmonk.com\/dberkholz\/2013\/03\/25\/programming-languages-ranked-by-expressiveness\/","title":{"rendered":"Programming languages ranked by expressiveness"},"content":{"rendered":"<p><strong>Is it possible to rank programming languages by their efficiency, or expressiveness?<\/strong>\u00a0In other words, can you compare how simply you can express a concept in them? One proxy for this is <strong>how many lines of code change in each commit<\/strong>. <strong>This would provide a view into how expressive each language enables you to be in the same amount of space.\u00a0<\/strong>Because the number of bugs in code is proportional to the number of source lines, not the number of ideas expressed, a more expressive language is always worth considering for that reason alone (e.g., see\u00a0<a href=\"http:\/\/en.wikipedia.org\/wiki\/Halstead_complexity_measures\">Halstead&#8217;s complexity measures<\/a>).<\/p>\n<p>I recently got a hold of a great set of data from\u00a0<a href=\"http:\/\/ohloh.net\/\">Ohloh<\/a>, which tracks open-source code repositories, on the use of programming languages over time across all of the codebases they track. After validating the data against Ohloh&#8217;s own graphs, one of the first things I did was try out my idea on expressiveness of programming languages. Sure enough, it gave me results that made sense and were surprisingly reasonable.<\/p>\n<p>Some caveats to this approach :<\/p>\n<ul>\n<li><strong>This\u00a0assumes that commits are generally used to add a single conceptual piece regardless of which language it&#8217;s programmed in.<\/strong><\/li>\n<li>It won&#8217;t tell you how readable the resulting code is (Hello, lambda functions) or\u00a0how long it takes to write it (<a href=\"http:\/\/en.wikipedia.org\/wiki\/APL_(programming_language)\">APL<\/a>\u00a0anyone?), so <strong>it&#8217;s not a measure of maintainability or productivity.<\/strong><\/li>\n<li>Ohloh relies on opt-in subscription from open-source projects rather than crawling forges itself. That said, it&#8217;s a vast data set covering some 7.5 million project-months.<\/li>\n<\/ul>\n<p>Time to let the results speak for themselves. Enough words, here&#8217;s the data (enlarge by clicking):<\/p>\n<p><a href=\"http:\/\/dberkholz-media.redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_weighted2.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1712\" data-permalink=\"https:\/\/redmonk.com\/dberkholz\/2013\/03\/25\/programming-languages-ranked-by-expressiveness\/expressiveness_weighted-3\/\" data-orig-file=\"https:\/\/redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_weighted2.png\" data-orig-size=\"1533,520\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"expressiveness_weighted\" data-image-description=\"\" data-medium-file=\"https:\/\/redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_weighted2-300x101.png\" data-large-file=\"https:\/\/redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_weighted2-1024x347.png\" class=\"alignnone size-large wp-image-1712\" src=\"http:\/\/dberkholz-media.redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_weighted2-1024x347.png\" alt=\"expressiveness_weighted\" width=\"547\" height=\"185\" \/><\/a><\/p>\n<p>It&#8217;s visualized in the form of <a href=\"http:\/\/en.wikipedia.org\/wiki\/Box_plot\">box-and-whisker plots<\/a>, which are effective for showing a distribution of numbers relatively simply. <strong>What numbers are we showing? It&#8217;s a distribution of lines of code per commit every month for around 20 years, weighted by the number of commits in any given month.<\/strong> The black line in the middle of each box is the median (the 50th percentile) for that language, and languages are ranked by median. The bottom and top of the box are the 25th and 75th percentiles, while the &#8220;whiskers&#8221; extend to the 10th and 90th percentiles. The &#8220;Total&#8221; box indicates the median of each value across all languages (median of all 25th percentiles, median of all 75th percentiles, etc.) to show a &#8220;typical&#8221; language.<\/p>\n<p>I&#8217;ve also colored them according to our most recent <a href=\"http:\/\/redmonk.com\/sogrady\/2013\/02\/28\/language-rankings-1-13\/\">RedMonk programming language rankings<\/a>\u00a0(<strong><span style=\"color: #ff0000;\">red<\/span><\/strong> is the most popular cluster, and <strong><span style=\"color: #0000ff;\">blue<\/span><\/strong> is the second-tier cluster, while <strong>black<\/strong> is everything else), and <strong>restricted languages here to the ones popular enough to be included in that set of rankings<\/strong>.<\/p>\n<p>What conclusions can we draw from this?<\/p>\n<h2>Global effects<\/h2>\n<p><strong>The trends generally make sense.<\/strong> If we focus purely on the tier-one languages shown in red, high-level languages (Python [#27], Ruby [#34]) lean toward better expressiveness while lower-level languages (C [#50], C++ [#45], Java [#44]) tend toward wordiness. Similarly in tier two, Fortran [#39\/#52] and assembly [#49] are wordy, and &#8220;middle-aged&#8221; functional languages are intermediate while newer functional languages are best.<\/p>\n<p><strong>Expressiveness ranges broadly\u00a0across languages.\u00a0<\/strong>The medians go from lows of <strong>48<\/strong> for Augeas (#1) and <strong>52<\/strong>\u00a0for Puppet (#2) to a high of <strong>1629\u00a0<\/strong>for <a href=\"http:\/\/en.wikipedia.org\/wiki\/Fortran#Fixed_layout\">fixed-format Fortran<\/a>\u00a0(#52), which is a surprisingly large <strong>31x variation<\/strong>.<\/p>\n<p><strong>Less expressive languages tend to show a much wider variability.\u00a0<\/strong>There&#8217;s a clear, but not strong, correlation between the medians (black lines) and the IQRs (box heights). Languages with the largest IQRs also tend to have greater medians, and <strong>consistently<\/strong> expressive languages tend to also be <strong>more<\/strong> expressive.<\/p>\n<p><strong>First-tier languages are a mix of poor and moderate expressiveness. <\/strong>Of the 11 tier-one languages, 5 are moderately expressive and the remaining 6 are poor.\u00a0The tier-one languages range from LOC\/Commit ratios of 309\u20131485, which equates to 6x\u201330x lower expressiveness than the top languages. Perl (#26), the best tier-one language, <span style=\"color: #000000;\">is\u00a05x more expressive than the worst, JavaScript (#51), and 3.5x more expressive than the classic C. That&#8217;s certainly respectable but falls well short of the 20x\u00a0or greater improvement one could gain with one of the top languages.<\/span><\/p>\n<p><strong>Second-tier languages are well-distributed and reach into highly expressive languages.\u00a0<\/strong>With 52 total languages on this list, the top ~17 constitute the highly expressive languages. Although none of those are first-tier languages, 9 of those 17 are second-tier \u2014 mostly functional with the exceptions of Groovy (#16), Prolog (#13), Puppet (#2), and CoffeeScript (#6).<\/p>\n<p><strong>Third-tier languages are heavily biased toward high expressiveness.<\/strong> Of the 15 third-tier languages on this list, 8 are in the top 1\/3 of languages, leaving only 7 are in the remaining 2\/3. Although these data do not directly show any correlation between age and expressiveness, it seems reasonable that newer, more expressive languages would begin less popular and may grow later.<\/p>\n<h2>Effects of language class\/type<\/h2>\n<p><strong>Functional languages tend to be highly expressive.<\/strong>\u00a0On this list are Haskell (#10), Erlang (#22), F# (#21), Lisp variants (including Clojure [#7], Emacs Lisp [#14], Dylan [#12], Common Lisp [#23], Scheme [#31], and Racket [#11]), OCaml (#20), R (#17), and Scala (#18). Of those, only two fall below #30 out of the 52 languages included here.<\/p>\n<p><strong>Domain-specific languages are biased toward high expressiveness.<\/strong> Augeas (#1), Puppet (#2), R (#17), and Scilab (#19) are good examples of this, while VHDL (#38) serves as an outlier on the low end.<\/p>\n<p><strong>Compilation does not imply lower expressiveness.<\/strong>\u00a0I was halfway expecting highly expressive languages to exclude all compiled languages but was proven wrong. Compiled languages in the top 17 include CoffeeScript (#6), Vala (#9), Haskell (#10), and Dylan (#12).<\/p>\n<p><strong>Interactive modes correlate with intermediate expressiveness.<\/strong> Languages with an interactive shell tend to be mid-range in expressiveness, with a few outliers on either side. For example: Lisp (#23), Erlang (#22), F# (#21), OCaml (#20), Perl (#26), Python (#27), R (#17), Ruby (#34), Scala (#18), Scheme (#31).<\/p>\n<h2>Specific language effects<\/h2>\n<p><strong><span style=\"text-decoration: underline;\">CoffeeScript<\/span> (#6) appears dramatically more expressive than <span style=\"text-decoration: underline;\">JavaScript<\/span> (#51), in fact among the best of all languages.\u00a0<\/strong>Although the general trend is not particularly surprising because that&#8217;s the whole point of CoffeeScript, the magnitude of the difference seems unusual. I suspect JavaScript&#8217;s low placement could be at least partially due to wholesale copying of template JavaScript files rather than reflecting development in JavaScript itself.<\/p>\n<p><strong><span style=\"text-decoration: underline;\">Clojure<\/span> (#7) is\u00a0the most expressive of Lisp variants.<\/strong> There are a large number of Lisp variants that generally ranked quite well, described in more detail above in the functional-language section. In this context, it&#8217;s worth noting that the top one was the fairly popular Clojure, with a median LOC\/commit value of 101, followed by Racket (#11) at 136 and Dylan (#12) at 143.<\/p>\n<p><strong>Among data-analysis languages, <span style=\"text-decoration: underline;\">R<\/span>\u00a0(#17) and <span style=\"text-decoration: underline;\">Scilab<\/span> (#19) are most expressive. <\/strong>\u00a0With a median of 193 LOC\/commit for R, it&#8217;s a clear top performer. R is followed by Scilab and Matlab (#35) with medians of 225 and 445, respectively.<\/p>\n<p><strong>Although <span style=\"text-decoration: underline;\">Go<\/span> (#24) is getting increasingly hot, it&#8217;s not outstandingly expressive.<\/strong> We keep hearing about new use of Go across a variety of startups, but it&#8217;s little better than Perl (#26) or Python (#27) by this measure. Despite that, it does trump all the tier-one languages, so someone who only had experience with them could certainly see an improvement when trying Go.<\/p>\n<h2>What if we sort by <span style=\"text-decoration: underline;\">consistency<\/span> of expressiveness, instead of the median?<\/h2>\n<p>Ideally a language should be:<\/p>\n<ul>\n<li>Easy enough to learn that the vast majority of developers using it can be highly productive; and<\/li>\n<li>Equally expressive across nearly its entire domain of usefulness.<\/li>\n<\/ul>\n<p>To measure that,\u00a0let&#8217;s take a look at the interquartile range (IQR; the distance between the 25th and 75th percentiles) as a proxy for these two criteria, and rank languages by that instead\u00a0(enlarge by clicking):<\/p>\n<p><a href=\"http:\/\/dberkholz-media.redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_by_iqr_weighted2.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1713\" data-permalink=\"https:\/\/redmonk.com\/dberkholz\/2013\/03\/25\/programming-languages-ranked-by-expressiveness\/expressiveness_by_iqr_weighted-3\/\" data-orig-file=\"https:\/\/redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_by_iqr_weighted2.png\" data-orig-size=\"1533,520\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"expressiveness_by_iqr_weighted\" data-image-description=\"\" data-medium-file=\"https:\/\/redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_by_iqr_weighted2-300x101.png\" data-large-file=\"https:\/\/redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_by_iqr_weighted2-1024x347.png\" class=\"alignnone size-large wp-image-1713\" src=\"http:\/\/dberkholz-media.redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_by_iqr_weighted2-1024x347.png\" alt=\"expressiveness_by_iqr_weighted\" width=\"553\" height=\"187\" \/><\/a><\/p>\n<p>What you&#8217;re looking for here is the height of the boxes. It starts small on the left side, with CoffeeScript doing best at <strong>23<\/strong>\u00a0lines and increases to the right side, ending with fixed-format Fortran at <strong>1854<\/strong>\u00a0lines.<\/p>\n<p>A few new insights specific to this plot before we move on to considering them both together:<\/p>\n<ul>\n<li>As alluded to earlier but illustrated differently here, <strong>inconsistency and wordiness are correlated<\/strong>, as are consistency and expressiveness.<\/li>\n<li><strong>Tier-one languages put in a much stronger showing<\/strong> here, with four in the top 1\/3 of languages (Python at #11, Objective-C at #13, Perl at #15, and C# at #17). Shell nearly makes the cut at #19. Those IQRs vary from 90\u2013167 LOC\/commit, a fairly large difference even among the best performers.<\/li>\n<li>Consequently, <strong>tier-three languages make a poorer showing here<\/strong>, although they\u00a0performed unusually well at levels of expressiveness. They are nearly proportionate with their population with 5 of 15 showing up in the top third, and the remainder are evenly distributed across the moderate and low consistency groups as well.<\/li>\n<li><strong>Java turns in the strongest performance of &#8220;enterprisey&#8221; languages (C, C++, Java)<\/strong>\u00a0when considering both metrics. Java comes in with nearly identical expressiveness as C++ (both at 823 LOC\/commit) but a vastly greater consistency (IQR of 277 vs 476).<\/li>\n<li>CoffeeScript is #1 for consistency, with an IQR spread of only 23 LOC\/commit compared to even #4 Clojure at 51 LOC\/commit. By the time we&#8217;ve gotten to #8 Groovy, we&#8217;ve dropped to an IQR of 68 LOC\/commit. In other words, <strong>CoffeeScript is incredibly consistent across domains and developers in its expressiveness.<\/strong><\/li>\n<li><strong>The outliers are particularly interesting<\/strong> \u2014 the ones with unusually high or low medians compared to nearby languages. If the median is higher than neighbors, than it&#8217;s an unusually consistent yet less expressive language. Conversely if the median is lower than neighbors, then the language is unusually inconsistent (a.k.a. shifted to the right on this graph from the rough correlation between consistency and median expressiveness).\n<ul>\n<li><strong><strong><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1711\" data-permalink=\"https:\/\/redmonk.com\/dberkholz\/2013\/03\/25\/programming-languages-ranked-by-expressiveness\/expressiveness_by_iqr_weighted_tier_one\/\" data-orig-file=\"https:\/\/redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_by_iqr_weighted_tier_one.png\" data-orig-size=\"1533,520\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"expressiveness_by_iqr_weighted_tier_one\" data-image-description=\"\" data-medium-file=\"https:\/\/redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_by_iqr_weighted_tier_one-300x101.png\" data-large-file=\"https:\/\/redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_by_iqr_weighted_tier_one-1024x347.png\" class=\"size-medium wp-image-1711 alignright\" style=\"font-weight: normal;\" src=\"http:\/\/dberkholz-media.redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_by_iqr_weighted_tier_one-300x101.png\" alt=\"expressiveness_by_iqr_weighted_tier_one\" width=\"300\" height=\"101\" \/><\/strong>Tier-one languages tend to be remarkably consisten<\/strong><strong>t, regardless of their expressiveness.<\/strong>\u00a0In nearly all cases, their medians are higher than their neighbors, showing\u00a0a general shift to the left from the expected placement. <span style=\"text-decoration: underline;\"><strong>This suggests that a primary characteristic of a tier-one language is its predictability, even more so than its productivity.<\/strong><\/span><\/li>\n<li>Conversely, in most cases where languages appear shifted to the right, they&#8217;re third-tier languages. The lack of predictability has often held them back from even reaching the second tier.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>So, what are the best languages by these metrics?<\/h2>\n<p>If you pick the top 10 based on ranking by median and by IQR, then take the intersection of them, here&#8217;s what&#8217;s left. The median and IQR are listed immediately after the names:<\/p>\n<ul>\n<li><span style=\"line-height: 13px;\"><a href=\"http:\/\/en.wikipedia.org\/wiki\/Augeas_(software)\">Augeas<\/a>\u00a0(48, 28): A domain-specific languages for configuration files<\/span><\/li>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/Puppet_(software)#Puppet_language\">Puppet<\/a>\u00a0(52, 65): Another DSL for configuration<\/li>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/REBOL\">REBOL<\/a>\u00a0(57, 47): A language designed for distributed computing<\/li>\n<li><a href=\"http:\/\/www.ecere.com\/technologies.html#eC\">eC<\/a>\u00a0(75, 75): Ecere C, a C derivative with object orientation<\/li>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/CoffeeScript\">CoffeeScript<\/a> (100, 23): A higher-level language that transcompiles to JavaScript<\/li>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/Clojure\">Clojure<\/a> (101, 51): A Lisp dialect for functional, concurrent programming<\/li>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/Vala_(programming_language)\">Vala<\/a>\u00a0(123, 61): An object-oriented language used by GNOME<\/li>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/Haskell_(programming_language)\">Haskell<\/a> (127, 71): A purely functional, compiled language with strong static typing<\/li>\n<\/ul>\n<p>Looking at the box plots again, I would tend to <strong>rule out eC<\/strong> based on the poor performance of the upward-reaching whiskers at the 90th percentiles, indicating a real lack of consistency as often as a quarter of the time (since the 75th percentile is quite good). I would also rule out <strong>Puppet<\/strong> and <strong>Augeas<\/strong> because they are DSLs.<\/p>\n<p>Combining those with our RedMonk <a href=\"http:\/\/redmonk.com\/sogrady\/2013\/02\/28\/language-rankings-1-13\/\">programming language rankings on popularity<\/a>, <strong>the only highly expressive, general-purpose languages within the top two popularity tiers are<\/strong>:<\/p>\n<ul>\n<li><strong><span style=\"line-height: 13px;\">Clojure<\/span><\/strong><\/li>\n<li><strong>CoffeeScript<\/strong><\/li>\n<li><strong>Haskell<\/strong><\/li>\n<\/ul>\n<p>If you&#8217;re considering learning a new language, it would make a lot of sense to put\u00a0<strong>Clojure,\u00a0<\/strong><strong>CoffeeScript, <\/strong>and<strong> Haskell<\/strong> on your list, based on expressiveness and current use in communities we&#8217;ve found to be predictive.<\/p>\n<p><strong>No tier-one languages fall in the top 25 on both metrics, although 5 make the cut on consistency alone.<\/strong> \u00a0Of the tier-one languages, lower-level ones tend to be both inconsistent and overly wordy, while higher-level ones have intermediate wordiness and very strong consistency. The most consistent languages are Python, Objective-C, Perl, C#, and shell, with <strong>the presence of Perl and shell supporting the initial assertion that expressiveness has little to do with readability or maintainability.<\/strong> Ruby is an interesting language, in that it violates the &#8220;rules&#8221; of expressiveness and consistency seen in the other higher-level languages. This could be an instance of a framework (Rails) truly <a href=\"http:\/\/redmonk.com\/sogrady\/2011\/04\/27\/frameworks-lead-adoption\/\">popularizing a language<\/a> that otherwise would&#8217;ve never taken off.<\/p>\n<p><strong>For projects that require an expressive language where it&#8217;s relatively easy to hire developers, <span style=\"text-decoration: underline;\">Python<\/span> is worth serious consideration.<\/strong>\u00a0Of tier-one languages, Python, Perl, Shell, and Objective-C are the best overall performers, and I consider Python the strongest of those for general-purpose applications. In my opinion, it makes a lot of sense to take a <a href=\"http:\/\/redmonk.com\/jgovernor\/2011\/05\/12\/typesafe-the-polyglot-revolution-continues-apace\/\">polyglot<\/a> approach to projects, writing as high-level as performance requirements allow. Fortunately many high-level languages like Python allow for modules based in more performant languages such as C. That means it&#8217;s easily possible to write the vast majority of a project in a more productive, more expressive language while falling back to high-performance languages where needed.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>Update (3\/26\/13)<\/strong>: I somehow missed Haskell on the final recommendations for second-tier languages, although it was on the initial list. Thanks to Chad Scherrer for pointing it out in the comments.<\/span><\/p>\n<p><span style=\"color: #ff0000;\"><strong>Update (3\/26\/13):<\/strong> I just wrote a <a href=\"http:\/\/redmonk.com\/dberkholz\/2013\/03\/26\/what-does-expressiveness-via-loc-per-commit-measure-in-practice\/\"><span style=\"color: #ff0000;\">post<\/span><\/a> on the last day&#8217;s discussion and commentary about what this kind of metric means and what you can get out of it.<\/span><\/p>\n<p><span style=\"color: #ff0000;\"><strong>Update (3\/26\/13):<\/strong> I wrote a new post showing <a href=\"http:\/\/redmonk.com\/dberkholz\/2013\/03\/26\/some-external-validation-on-expressive-languages\/\"><span style=\"color: #ff0000;\">correlation<\/span><\/a> of my data with external survey data on what languages developers think are expressive.<\/span><\/p>\n<p><em style=\"color: #999999;\"><strong>Disclosure<\/strong>: Black Duck Software (which runs Ohloh) is a client.<\/em><\/p>\n<div class=\"acc_license\"><a href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/\"><img decoding=\"async\" src=\"http:\/\/i.creativecommons.org\/l\/by-sa\/3.0\/88x31.png\" alt=\"by-sa\" \/><\/a><\/div><!--<rdf:RDF xmlns=\"http:\/\/creativecommons.org\/ns#\" xmlns:dc=\"http:\/\/purl.org\/dc\/elements\/1.1\/\" xmlns:rdf=\"http:\/\/www.w3.org\/1999\/02\/22-rdf-syntax-ns#\"><Work rdf:about=\"\"><license rdf:resource=\"http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/\" \/><\/Work><License rdf:about=\"http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/\"><requires rdf:resource=\"http:\/\/creativecommons.org\/ns#Attribution\" \/><permits rdf:resource=\"http:\/\/creativecommons.org\/ns#Reproduction\" \/><permits rdf:resource=\"http:\/\/creativecommons.org\/ns#Distribution\" \/><permits rdf:resource=\"http:\/\/creativecommons.org\/ns#DerivativeWorks\" \/><requires rdf:resource=\"http:\/\/creativecommons.org\/ns#ShareAlike\" \/><requires rdf:resource=\"http:\/\/creativecommons.org\/ns#Notice\" \/><\/License><\/rdf:RDF>-->","protected":false},"excerpt":{"rendered":"<p>Is it possible to rank programming languages by their efficiency, or expressiveness?\u00a0In other words, can you compare how simply you can express a concept in them? One proxy for this is how many lines of code change in each commit. This would provide a view into how expressive each language enables you to be in<\/p>\n","protected":false},"author":6,"featured_media":1700,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[3,7,21],"tags":[],"class_list":["post-1695","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adoption","category-data-science","category-employment"],"jetpack_featured_media_url":"https:\/\/redmonk.com\/dberkholz\/files\/2013\/03\/expressiveness_custom2.png","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p23Tsn-rl","_links":{"self":[{"href":"https:\/\/redmonk.com\/dberkholz\/wp-json\/wp\/v2\/posts\/1695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/redmonk.com\/dberkholz\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redmonk.com\/dberkholz\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redmonk.com\/dberkholz\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/redmonk.com\/dberkholz\/wp-json\/wp\/v2\/comments?post=1695"}],"version-history":[{"count":0,"href":"https:\/\/redmonk.com\/dberkholz\/wp-json\/wp\/v2\/posts\/1695\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/redmonk.com\/dberkholz\/wp-json\/wp\/v2\/media\/1700"}],"wp:attachment":[{"href":"https:\/\/redmonk.com\/dberkholz\/wp-json\/wp\/v2\/media?parent=1695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redmonk.com\/dberkholz\/wp-json\/wp\/v2\/categories?post=1695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redmonk.com\/dberkholz\/wp-json\/wp\/v2\/tags?post=1695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}