upvote
> 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?

reply
> 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.

reply
[dead]
reply
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.

reply
[dead]
reply
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
reply
Thanks. The code (here: https://fmjlang.co.uk/fmj/tutorials/TOC.html) isn't text, it's directed graphs.
reply
I gave it a try, does it look like it got it right?

https://files.catbox.moe/nbcyg7.png

It's a program that draws the Claude logo.

reply
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.

reply
Out of curiosity I saved one of the images to my disk (the first image on this page: 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.

reply
It isn't Prograph, but there are some similarities.
reply
If you've "avoided using LLMs", how do you know "you'll gradually lose the ability to think in a programming language"?
reply