“Coder” always reminded me of the term “CAD monkey” which is widespread in disciplines like Architecture. In school we were told we should aim to become an Architect, not a CAD monkey. The architect was the author, the folk with ideas, the monkey received the ideas and modelled them in AutoCAD.
Now here is the catch: in my (short) experience, you only realise issues with the design when the monkey starts to work. Turns out this and that structural elements don’t align, turns out that space is smaller than what it should be, specially if you want it to look like on the sketch. You could think about that process in terms of “waterfall”, which programmers know to be faulty because design and implementation are not a linear process, they are related in a feedback loop, and that loop gets shorter if the architect becomes part CAD monkey and vise versa. You want a short loop because you want to keep the creative flow going. You design something, you try to implement it, you realise it won’t work, you go back and improve the design or throw it away. All this happens in a very messy and lousy defined way, because, well, brains are fascinating
This may be an in college acquired deformation, but I see programming the same way. Sure, for simple stuff the LLM may throw at you the right code, and sure the CAD monkey won’t find any issue in your standard bathroom design.
The irony is that LLM enthusiasts seem to care a lot about “the interesting code”, the one the LLM won’t help with, and the one you get better at by writing a bunch of “boring” code in interesting ways
I now realise that when I said feedback loop above I wasn’t thinking on what most people considers as such. Sure, pressing tab on Zed or Cursor may be faster than you typing the actual code, so in that sense an LLM has a shorter feedback loop, and you may be trying the code faster than me. However what I meant was the feedback loop that goes on in our brains, otherwise the analogy with the CAD monkey wouldn’t work. When we type code, or when we model a wall in its actual dimensions, we don’t think just about performing those actions, they even feel automatic most of the time.
We think about other aspects of what we are working on, directly related or not. A bunch of times, while writing a function or data type, I’ve stopped myself because I suddenly became aware of some fundamentally wrong assumption, or remembered some extra requirement, or thought of a better way!
I’m pretty sure this is a familiar experience, I can’t be the only one thinking in this way. Well, that’s the feedback loop I was referring too! I suspect it may be related to motor function as, for example, we know that writing by hand helps to memorise and/or understand things. Citation needed https://www.npr.org/sections/health-shots/2024/05/11/1250529661/handwriting-cursive-typing-schools-learning-brain
I would bet typing code will have similar recognition in the future.
Actually, have you ever tried to learn a programming language that’s based on a paradigm you are not used to just by reading a book? I may be specially stupid here, but I’m skeptic that’s possible, even for a experienced folks.
So yeah, I’m daring to say that pressing tab and accepting code you understand and can improve is not the same as writing it yourself. This is of course based on my own experience and I may be projecting too much, but I can’t stop thinking there are good reasons to be a late adopter of LLMs
LLMs literally make you stupid. They do to your mind what wearing a powered exoskeleton would do to your muscles. This has been tested and proven. I read about it in Forbes magazine, fer chrissake. Forbes is /for/ your boss. If they're saying it, the problem is real. And serious.
Besides, LLMs are absurdly environmentally destructive.
Plus, they will always hallucinate wrong answers.
Really, I think it's best to not use them at all. I never outsourced my memory to silicon like so many people now trapped in the facebook gulag; no way am I outsourcing my cognition.
@RosaCtrl
I was also exposed to someone who was trying to learn a programming language, and the LLM had produced a rather hairy generic type signature. They asked for help understanding it, but the thing to understand was that the LLM was off its rocker.
They essentially have "yeah, that looks right" as their goal, and if the correct answer is surprising, as it often is to students, it's fundamentally the wrong tool for them.
@RosaCtrl
Yeah, I think bullshit, in the sense of statements that don't care whether they're correct or not, is pretty fitting for what an LLM produces.
Lots of people are trying to make it produce useful bullshit, as in statements that look right because they _are_ right. It doesn't change what the machine is fundamentally doing.
<"/>
have you ever tried to learn a programming language that’s based on a paradigm you are not used to just by reading a book? I may be specially stupid here, but I’m skeptic that’s possible, even for a experienced folks
Not only you are right, but even more so, just reading a book simply does _not_ work for that.
Just reading books does not work for learning mathematics, either.
A famous American physicist (I can't recall the name, this was about the 1960s) was asked why his school was so successful.
He answered,
"I think it's because I have never been afraid to admit to my students that I'm dumb."
🙂
@RosaCtrl I think I understand?
I learn programming languages faster if I type in all the damn examples by hand. It forces me to slow down and think it through.
If I don't think it through then I'm not going to know why it does something.
When I understand a language, sure i can have a robot write all the logging and CLI parsing for me.
@osunderdog well, my point here is not related to learning really, but to the practice itself (although yes, I agree with your statement about learning).
Programming means to design, and in my experience that process happens when you are writing code. Even if you represent the logic first in an abstract way with boxes, writing the actual code often leads to improvements that we didn’t consider before. We may know what we want at the beginning, but often that’s not the code we ship, so my claims here is that by outsourcing the code “we know” (or we believe to know) to an external tools, we lose the refinement opportunity that happens when you write it yourself.
Or I’m a weirdo and I’m the only one that has experienced that
When I learned architects just draw pretty pictures and don't need to worry about petty things like longevity, usefulness, efficiency, and other pointless "real world" concepts I stopped caring about architects
Gimme a CAD monkey and/or a tradesman over a box artist any day
Edit: addendum. Frank Lloyd Wright was a dingus. An absolute jagaloon. I will die on this hill, which will probably be fine by those who don't adhere to the idea of beauty being intrinsically linked to how well designed for use an object is
The model is a testing ground for ideas, and as you say, where you can visualise and catch stuff that won't work in real life.
"Code Monkey" is indeed a well established derogatory term too. Some people seem to have a life-long need to establish and maintain hierarcies and a sense of status to their chosen profession.
Jonathan Coulton, Patron Saint of the Nerds, wrote a song in honour of Code Monkies 19 years ago.
See also Fred Brooks, _The Design of Design_.