<?xml version="1.0"?>
<?xml-stylesheet href="/transform" type="text/xsl"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:bibo="http://purl.org/ontology/bibo/" xmlns:bs="http://purl.org/ontology/bibo/status/" xmlns:ci="https://vocab.methodandstructure.com/content-inventory#" xmlns:dct="http://purl.org/dc/terms/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" lang="en" prefix="bibo: http://purl.org/ontology/bibo/ bs: http://purl.org/ontology/bibo/status/ ci: https://vocab.methodandstructure.com/content-inventory# dct: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# xhv: http://www.w3.org/1999/xhtml/vocab# xsd: http://www.w3.org/2001/XMLSchema#" vocab="http://www.w3.org/1999/xhtml/vocab#" xml:lang="en">
  <head>
    <title property="dct:title">Programming Languages I Have Known and Loved/Loathed/Lulzed</title>
    <base href="https://doriantaylor.com/programming-languages-i-have-known-and-loved-loathed-lulzed"/>
    <link href="document-stats#EhGcy5ZCbdh4tsthef7znK" rev="ci:document"/>
    <link href="elsewhere" rel="alternate bookmark" title="Elsewhere"/>
    <link href="this-site" rel="alternate index" title="This Site"/>
    <link href="http://purl.org/ontology/bibo/status/published" rel="bibo:status"/>
    <link href="" rel="ci:canonical" title="Programming Languages I Have Known and Loved/Loathed/Lulzed"/>
    <link href="lexicon/#EzqXIsriaILFcWjXdS7FbI" rel="dct:audience" title="Software Developer"/>
    <link href="person/dorian-taylor#me" rel="dct:creator" title="Dorian Taylor"/>
    <link href="file/logowriter-verso" rel="foaf:depiction"/>
    <link href="person/dorian-taylor" rel="meta" title="Who I Am"/>
    <link about="./" href="3f36c30c-6096-454a-8a22-c062100ae41f" rel="alternate" type="application/atom+xml"/>
    <link about="./" href="f07f5044-01bc-472d-9079-9b07771b731c" rel="alternate" type="application/atom+xml"/>
    <link about="./" href="this-site" rel="alternate"/>
    <link about="./" href="elsewhere" rel="alternate"/>
    <link about="./" href="e341ca62-0387-4cea-b69a-cdabc7656871" rel="alternate" type="application/atom+xml"/>
    <link about="verso/" href="3f36c30c-6096-454a-8a22-c062100ae41f" rel="alternate" type="application/atom+xml"/>
    <link about="verso/" href="this-site" rel="alternate"/>
    <link about="verso/" href="elsewhere" rel="alternate"/>
    <meta content="programming-languages-i-have-known-and-loved-loathed-lulzed" datatype="xsd:token" property="ci:canonical-slug"/>
    <meta content="&#xC0; propos of nothing, I decided to do a roundup of all the programming languages I have used more than zero." name="description" property="dct:abstract"/>
    <meta content="2021-02-19T00:26:18+00:00" datatype="xsd:dateTime" property="dct:created"/>
    <meta content="2021-02-23T06:15:51+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2021-03-17T03:00:30+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2021-03-25T04:40:39+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2021-05-04T05:25:16+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2021-05-12T06:17:42+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2022-05-31T04:18:52+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2022-05-31T15:10:50+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta about="person/dorian-taylor#me" content="Dorian Taylor" name="author" property="foaf:name"/>
    <meta content="summary_large_image" name="twitter:card"/>
    <meta content="@doriantaylor" name="twitter:site"/>
    <meta content="Programming Languages I Have Known and Loved/Loathed/Lulzed" name="twitter:title"/>
    <meta content="&#xC0; propos of nothing, I decided to do a roundup of all the programming languages I have used more than zero." name="twitter:description"/>
    <meta content="https://doriantaylor.com/file/logowriter-verso" name="twitter:image"/>
    <object>
      <nav>
        <ul>
          <li>
            <a href="document-stats#EhGcy5ZCbdh4tsthef7znK" rev="ci:document" typeof="qb:Observation">
              <span>urn:uuid:846732e5-909b-4761-ae2d-b2d85e7fbce7</span>
            </a>
          </li>
        </ul>
      </nav>
    </object>
  </head>
  <body about="" id="E8h53MKIAtkgZN4C2hsZCJ" typeof="bibo:Article">
    <p>For the benefit of I don't know who, I have compiled a list of programming languages I have actually interacted with at some point in my career, no matter how little. If it's not on the list, then I haven't used it.</p>
    <p>What am I counting as a programming language? In one phrase, loops and conditionals, or their <span class="parenthesis before" title="literally">functional</span> equivalents. In a word, <em>generativity</em>: if you can generate a big <em>and varied</em> output per small unit of input, what you have is a programming language. Turing-completeness is <a href="https://en.wikipedia.org/wiki/Total_functional_programming" rel="dct:references">not strictly necessary</a>, but I'm pretty sure everything on the list is Turing-complete. This definition does, however, exclude fourth-generation languages like <abbr title="Structured Query Language">SQL</abbr> and <abbr title="SPARQL Protocol and RDF Query Language">SPARQL</abbr> and other deterministic languages like <abbr title="Cascading Style Sheets">CSS</abbr>, as well as straight data specs like <abbr title="Hypertext Markup Language">HTML</abbr>, or <a href="the-symbol-management-problem" rel="dct:references" title="The Symbol Management Problem">really meta stuff like <abbr title="RDF Schema">RDFS</abbr> or <abbr title="Web Ontology Language">OWL</abbr></a>, no matter how sophisticated or important they are.</p>
    <aside role="note" id="E39t7nF7u52Nlw359GGLYI">
      <p>I guess <a href="https://www.latex-project.org/" rel="dct:references">(La)TeX</a> counts as a programming language by this definition&#x2014;and on account of being Turing-complete&#x2014;but I'm not including it because even though I use it quite a bit, I've never taken direct advantage of this property.</p>
    </aside>
    <p>I'm also not considering toolchains, or database products, or packaging systems, or <a href="betamaxed" rel="dct:references" title="Betamaxed">version control systems</a>, or popular frameworks, or standard libraries, or even surrounding communities&#x2014;<em>just</em> the languages themselves. Anyway, the list:</p>
    <dl>
      <dt><a href="https://en.wikipedia.org/wiki/X86_assembly_language" rel="dct:references">Assembly (x86)</a></dt>
      <dd>Uh, I think I might have <span class="parenthesis" title="at least I think it was a device driver? It was definitely assembly">lightly hacked on a device driver once</span>, and that was a long time ago.</dd>
      <dt><a href="https://www.amazon.com/dp/0131103628?tag=doriantaylor-20" rel="dct:references">C</a>/<a href="https://isocpp.org/" rel="dct:references">C++</a>/<a href="https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html" rel="dct:references">Objective-C</a></dt>
      <dd>Necessary evil. My proficiency with these languages is pretty much <a href="https://github.com/doriantaylor/mod-transform-hacks/tree/initial-req" rel="dct:references">I can fix bugs</a> and <a href="https://github.com/doriantaylor/openldap-overlay-entryuuid4" rel="dct:references">add small features</a> to existing products, and I can debug memory&#x2014;hence why I grouped these three together&#x2014;but I would prefer not to. Never had to make anything from scratch in any of 'em though.</dd>
      <dt><a href="https://docs.microsoft.com/en-us/dotnet/csharp/" rel="dct:references">C#</a></dt>
      <dd>Java&#xAE; with Microsoft&#x2122; characteristics! I just remembered sometime in the summer of 2020 I fixed a crash bug in some academicware my girlfriend needed to use for work. Haven't touched it before or since.</dd>
      <dt><a href="https://clojure.org/" rel="dct:references">Clojure</a></dt>
      <dd>Love it. Wish I had more of an opportunity to use it. Perfect solution to accessing the Javasphere without having to touch Java. Would be my daily driver if not for the pesky <abbr>JVM</abbr> startup overhead.</dd>
      <dt><a href="https://lisp-lang.org/" rel="dct:references">Common Lisp</a></dt>
      <dd><a href="https://www.amazon.com/dp/0133708756?tag=doriantaylor-20" rel="dct:references">Darling of certain venture capitalists</a>. It's neat but it kinda lives in a bubble. There's this weird bifurcation between the standard and its implementations, so anything that interacts with the outside world is necessarily implementation-specific, meaning you're always writing adapters if you want portable code. If not for that, I probably would have done more with it.</dd>
      <dt><a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/" rel="dct:references">Emacs Lisp</a></dt>
      <dd>Similar deal to Common Lisp about the bubble thing, but that is probably for the best. Kinda wish it had namespaces too.</dd>
      <dt><a href="https://www.haskell.org/" rel="dct:references">Haskell</a></dt>
      <dd>Love it. Not very good at it. Only really spent serious time with it around about 2007 but occasionally go back and flirt with it. Put it away when I discovered a substring operation was <var>O(n)</var>, which I understand <a href="https://hackage.haskell.org/package/text" rel="dct:references">has since been fixed</a>. Literate programming support is probably best in show, but that kind of thing could always be better.</dd>
      <dt><a href="https://www.java.com/en/" rel="dct:references">Java</a></dt>
      <dd>Nowadays about the same situation as the Cs, minus the memory, of course. Tried to Teach Myself Java In 24 Hours as a teenager, but never figured out how to run the code. Turns out you type <code>java HelloWorld</code>, not <code>java HelloWorld.class</code>. It's weird to think how different things could have been if I had known that.</dd>
      <dt><a href="https://www.ecma-international.org/publications-and-standards/standards/ecma-262/" rel="dct:references">JavaScript</a></dt>
      <dd>Another necessary evil. Natural monopoly. This is a language that was made in ten days and it shows. Also, circa 1996, my first experience programming with the aim of doing something useful.</dd>
      <dt><a href="https://el.media.mit.edu/logo-foundation/what_is_logo/logo_programming.html" rel="dct:references">LOGO</a></dt>
      <dd>Because it was the 80s, this was in the atmosphere from kindergarten through elementary school, and of course it was in French. I made a game-like thing with it in grade 4 or 5, then didn't touch code again until <abbr>JS</abbr>.</dd>
      <dt><a href="https://www.perl.org/" rel="dct:references">Perl</a></dt>
      <dd>Daily driver from 1997 to 2018. Still gets a lot of things right despite being old, and oh right, completely insane. Finally traded it in because of <abbr>FOMO</abbr> over the fact that you can't put arbitrary objects in hash keys <span class="parenthesis" title="well, only sort of in Python">like you can in Python</span> or Ruby, I kid you not.</dd>
      <dt><a href="https://www.php.net/" rel="dct:references">PHP</a></dt>
      <dd><a href="the-only-argument-you-will-ever-need-against-php" rel="dct:references" title="The Only Argument You Will Ever Need Against PHP">Hard nope</a>. PHP's one unique feature, which is to plunk a file down in the document root of a Web server and have it give you back something serviceable, is also its single biggest liability. If you plug that hole, <em>which you should</em>, then it loses any advantage it might have been able to claim. You may as well be using <em>anything</em> else. <em>Literally</em> anything. Take your pick.</dd>
      <dt><a href="https://www.postgresql.org/docs/current/plpgsql.html" rel="dct:references">PL/SQL</a></dt>
      <dd>Another necessary evil. Mainly Postgres flavour these days, which is much, <em>much</em> more forgiving than Oracle's was.</dd>
      <dt><a href="https://www.python.org/" rel="dct:references">Python</a></dt>
      <dd>Stodgy. Lots of <code>__these_things__()</code>. Poops out <code>.pyc</code> files without asking (rude). Contains a surprising amount of magic for a language <span class="parenthesis" title="and now it's the functional opposite: a language for experts to get shit done">whose original purpose was teaching people how to program</span>. And that's not even bringing up the semantic whitespace thing, which is not as bad as most people who complain about it make it out to be. That said, the 2-to-3 thing was rough; I used it way less than I otherwise would have because of that. I don't hate it though! Python came very close to winning the title of daily driver in the 2017-2018 shift, but lost out to Ruby because the latter had <span class="parenthesis" title="RDF, SQL, etc, lol">better frameworks</span> for what I was trying to do at the time.</dd>
      <dt><a href="https://www.r-project.org/" rel="dct:references">R</a></dt>
      <dd>Vector-valued variables are neat, but they are not a matrix nor a list nor a <code>data.frame</code>, and you will be required to keep these straight. Also sometimes numbers are not actually numbers, but <q>factors</q>. I couldn't think of a better language for visualizing some data in thirty seconds, and then banging my head on my desk for two days subsequently trying to make said visualization presentable.</dd>
      <dt><a href="https://www.ruby-lang.org/en/" rel="dct:references">Ruby</a></dt>
      <dd>Daily driver from 2018 onward. Spiritual successor to Perl, arguably even more Perlish than <a href="https://raku.org/" rel="dct:references">whatever Perl 6 turned out to be</a>. Also somewhat like Python but a <em>lot</em> more chill. Was slow but now no slower than the other two. I actually genuinely enjoy writing in this language.</dd>
      <dt><a href="https://www.rust-lang.org/" rel="dct:references">Rust</a></dt>
      <dd>Only getting started here. Kinda excited about it.</dd>
      <dt><a href="https://sass-lang.com/" rel="dct:references">Sass</a></dt>
      <dd><span class="parenthesis" title="I would call it something like a data selection/description language">I do not count <abbr>CSS</abbr> as a programming language</span>, but Sass definitely is, and it is <em>life-changing</em>.</dd>
      <dt><a href="https://docs.microsoft.com/en-us/dotnet/visual-basic/" rel="dct:references">Visual Basic</a></dt>
      <dd>lol, don't <em>ever</em> make me do that again.</dd>
      <dt><a href="https://www.w3.org/TR/xslt/" rel="dct:references">XSLT</a></dt>
      <dd>I have been using this nutty old language nonstop for 20 years and you will have to pry it from my cold dead hands. It's still by far the best way to transform and compose markup. Just look at this website.</dd>
    </dl>
    <p>I should note that my mission here isn't to brag, rather I'm actually quite surprised it was this many. I had anticipated maybe a dozen, tops.</p>
    <p>I think if this article has a point, it's something on the order of: once you get past the third or fourth programming language, they start to kind of clump together. Individual distinctions in syntax, or primitive constructs and data types, matter less than the quality of the ecosystem surrounding the language: spec&#x2014;to the extent that there is one separate from the implementation&#x2014;standard library, third-party code archive, tooling, and of course, the community that makes it all happen.</p>
    
  </body>
</html>
