‹ BackHN Continuity

Thread

How to keep enjoying programming in a world of LLMs

352 points · 350 comments · signa11

  1. DonaldFisk · · focus · HN ↗
    I've avoided using LLMs. You might not have the option of doing this in paid employment, but you certainly can in your spare time, and if you don't you'll gradually lose the ability to think in a programming language. This applies similarly to any other cognitive skill too: writing music or playing a musical instrument, speaking and reading a foreign language, doing cryptic crosswords, playing chess or go, etc. You wouldn't stop playing chess just because computers are now much better at it. The point is learn, understand, and do those things yourself.

    Here's my advice, based on what I have done: implement a programming language yourself, from scratch, without using an LLM, and then program in that. Don't release your implementation, or any code you've written in it.

    Most (almost all) of my programming at home has been done in a Lisp dialect I designed and wrote myself, which is superficially similar to Common Lisp, but with subtle differences, including some deficiencies that I have to work around. And in my Lisp dialect, I implemented a visual dataflow language. Code samples are on my web site, but they're PNG images, so are safe from LLMs (I think). The language was designed to run on MIMD hardware, which doesn't exist in the real world. I've also implemented a Prolog which doesn't use Edinburgh syntax, which I use for type checking, and for parsing a controlled English implementation. So the temptation, and also the option, of using an LLM was never there.

    In the course of doing all this, I've learned a lot along the way, which I wouldn't have if I'd used an LLM.

    1. derpyzza · · focus · HN ↗
      this is awesome, but also code samples being in PNG images does not make them safe from LLMs anymore unfortunately, LLMs are really good at reading text from images now
      1. DonaldFisk · · focus · HN ↗
        Thanks. The code (here: <a href="https:&#x2F;&#x2F;fmjlang.co.uk&#x2F;fmj&#x2F;tutorials&#x2F;TOC.html" rel="nofollow">https:&#x2F;&#x2F;fmjlang.co.uk&#x2F;fmj&#x2F;tutorials&#x2F;TOC.html) isn&#x27;t text, it&#x27;s directed graphs.
        1. bel8 · · focus · HN ↗
          Out of curiosity I saved one of the images to my disk (the first image on this page: <a href="https:&#x2F;&#x2F;fmjlang.co.uk&#x2F;fmj&#x2F;tutorials&#x2F;IterationAgain.html" rel="nofollow">https:&#x2F;&#x2F;fmjlang.co.uk&#x2F;fmj&#x2F;tutorials&#x2F;IterationAgain.html), then asked LLM about it, without any context:

          &gt; prompt: &#x2F;tmp&#x2F;iterReverse.png what could this image be?

          Thinking:

          &gt; Identifying the visual dataflow language from the node layout and iterReverse label, likely Prograph.

          &gt; Confirming Prograph identification and mapping node roles to list deconstruction and reconstruction.

          Answer:

          &gt; This is a Prograph method window, for a method called iterReverse.

          &gt; Prograph is a visual dataflow programming language - you program by wiring boxes together instead of writing text. What you&#x27;re looking at is the implementation of iterative list-reverse:

              - big box = method editor, top pins = inputs, bottom pins = outputs                                                                                                                                                                        
              - black circle top-left = method icon                                                                                                                                                                                                      
              - yellow boxes = controls: start*+, when*+, unless*+, repeat*+                                                                                                                                                                             
              - blue boxes = list primitives: null test, decons split list into head&#x2F;tail, cons prepend                                                                                                                                                  
              - red lines = data links, green = the small control &#x2F; boolean wiring
          
          &gt; In other words: if input is null, when succeeds, else unless loops with decons &#x2F; cons + repeat to build the reversed list.

          &gt; The window chrome with Save &#x2F; Close and that style of drawing is the Marten clone of Prograph running on Linux.

          1. DonaldFisk · · focus · HN ↗
            It isn&#x27;t Prograph, but there are some similarities.
        2. user43928 · · focus · HN ↗
          I gave it a try, does it look like it got it right?

          <a href="https:&#x2F;&#x2F;files.catbox.moe&#x2F;nbcyg7.png" rel="nofollow">https:&#x2F;&#x2F;files.catbox.moe&#x2F;nbcyg7.png

          It&#x27;s a program that draws the Claude logo.

          1. DonaldFisk · · focus · HN ↗
            I don&#x27;t think it&#x27;s right but if it got as far as it did it could be corrected after several rewrites, so not a complete failure and not bad for a first attempt given the limited documentation I put on my web pages.

            If I&#x27;m reading it correctly, polar is a function which is supposed to convert from polar to Cartesian coordinates, and rayPolygon seems to convert a list of polars to a list of Cartesians. But it&#x27;s unclear exactly what it&#x27;s doing. Also, there is no fillPolygon or fillEllipse.

Open on Hacker News to reply ↗

Unofficial Hacker News client; not affiliated with Y Combinator.