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.
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
Out of curiosity I saved one of the images to my disk (the first image on this page: <a href="https://fmjlang.co.uk/fmj/tutorials/IterationAgain.html" rel="nofollow">https://fmjlang.co.uk/fmj/tutorials/IterationAgain.html), then asked LLM about it, without any context:
> prompt: /tmp/iterReverse.png what could this image be?
Thinking:
> Identifying the visual dataflow language from the node layout and iterReverse label, likely Prograph.
> Confirming Prograph identification and mapping node roles to list deconstruction and reconstruction.
Answer:
> This is a Prograph method window, for a method called iterReverse.
> Prograph is a visual dataflow programming language - you program by wiring boxes together instead of writing text. What you'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/tail, cons prepend
- red lines = data links, green = the small control / boolean wiring
> In other words: if input is null, when succeeds, else unless loops with decons / cons + repeat to build the reversed list.
> The window chrome with Save / Close and that style of drawing is the Marten clone of Prograph running on Linux.
I don't think it'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'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's unclear exactly what it's doing. Also, there is no fillPolygon or fillEllipse.
> you'll gradually lose the ability to think in a programming language
So be it. It's fine. It will be fine. At some point I knew assembly well enough; I read hex fluently and confidently changed things directly in some random-looking files. This skill sometimes comes in handy (even today) when reading network packets. How many people today need to really understand offsets, field sizes and padding, so shit like: "bytes 12-13 are the EtherType" feels natural? What percentage of programmers actively creating software need to know how to read, say, exploit and malware traffic?
Some may say: "well, this is enormously important", but the reality is, "no, it's fucking not". For like 95% of programmers, it isn't.
And the number of programming languages I had to learn and then forget later... The point is - you don't need to be "thinking in a programming language". You just need to be thinking, period. Whatever language it will be tomorrow, it really doesn't matter. Cuneiform tablets with math still hold the math even though nobody in the world does any math in cuneiform anymore.
Technology has always been moving from lower abstractions to higher ones, and that's a normal cycle. Why is it so inconceivable to think that most of the software developers of tomorrow would have no idea how to "think" in Python, C++, Java, or Clojure? Does every car mechanic need to be able to explain the principles of a combustion engine?
> Does every car mechanic need to be able to explain the principles of a combustion engine?
Probably. I’d certainly not want to use a mechanic who doesn’t understand the combustion engine, or who is incapable of giving at least a high-level overview of it.
Not sure that's right in general. Steam trains -> electric trains, ICE cars -> electric cars, thermionic valves -> transistors, copper wire -> optical fibre, incandescent bulbs -> LEDs, CRT televisions -> digital televisions, film cameras -> digital cameras. Same sort of thing with more efficient technology.
For software, we've gone from machine code to high level languages, but were still writing algorithms, which is the important thing as you still use your brain for that. Until vibe coding came along.
DonaldFisk · · focus · HN ↗
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.
derpyzza · · focus · HN ↗
DonaldFisk · · focus · HN ↗
bel8 · · focus · HN ↗
> prompt: /tmp/iterReverse.png what could this image be?
Thinking:
> Identifying the visual dataflow language from the node layout and iterReverse label, likely Prograph.
> Confirming Prograph identification and mapping node roles to list deconstruction and reconstruction.
Answer:
> This is a Prograph method window, for a method called iterReverse.
> Prograph is a visual dataflow programming language - you program by wiring boxes together instead of writing text. What you're looking at is the implementation of iterative list-reverse:
> In other words: if input is null, when succeeds, else unless loops with decons / cons + repeat to build the reversed list.> The window chrome with Save / Close and that style of drawing is the Marten clone of Prograph running on Linux.
DonaldFisk · · focus · HN ↗
user43928 · · focus · HN ↗
<a href="https://files.catbox.moe/nbcyg7.png" rel="nofollow">https://files.catbox.moe/nbcyg7.png
It's a program that draws the Claude logo.
DonaldFisk · · focus · HN ↗
If I'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's unclear exactly what it's doing. Also, there is no fillPolygon or fillEllipse.
sneurlax · · focus · HN ↗
iLemming · · focus · HN ↗
So be it. It's fine. It will be fine. At some point I knew assembly well enough; I read hex fluently and confidently changed things directly in some random-looking files. This skill sometimes comes in handy (even today) when reading network packets. How many people today need to really understand offsets, field sizes and padding, so shit like: "bytes 12-13 are the EtherType" feels natural? What percentage of programmers actively creating software need to know how to read, say, exploit and malware traffic?
Some may say: "well, this is enormously important", but the reality is, "no, it's fucking not". For like 95% of programmers, it isn't.
And the number of programming languages I had to learn and then forget later... The point is - you don't need to be "thinking in a programming language". You just need to be thinking, period. Whatever language it will be tomorrow, it really doesn't matter. Cuneiform tablets with math still hold the math even though nobody in the world does any math in cuneiform anymore.
Technology has always been moving from lower abstractions to higher ones, and that's a normal cycle. Why is it so inconceivable to think that most of the software developers of tomorrow would have no idea how to "think" in Python, C++, Java, or Clojure? Does every car mechanic need to be able to explain the principles of a combustion engine?
christophilus · · focus · HN ↗
Probably. I’d certainly not want to use a mechanic who doesn’t understand the combustion engine, or who is incapable of giving at least a high-level overview of it.
iLemming · · focus · HN ↗
[dead]
DonaldFisk · · focus · HN ↗
For software, we've gone from machine code to high level languages, but were still writing algorithms, which is the important thing as you still use your brain for that. Until vibe coding came along.
iLemming · · focus · HN ↗
[dead]
lirolero · · focus · HN ↗
[dead]