Skip to content(if available)orjump to list(if available)

Writing software is an act of learning. Don’t automate it.

aeturnum

The way I talk about is is that the value you deliver as a software "engineer" is: taste and good guesses. Anyone can bang out code given enough time. Anyone can read docs on how to implement an algorithm and implement it eventually. The way you deliver value is by having a feel for the service and good instincts about where to look first and how to approach problems. The only way to develop that taste and familiarity is to work on stuff yourself.

Once you can show, without doubt, what you should do software engineers have very little value. The reason they are still essential is that product choices are generally made under very ambiguous conditions. John Carmack said "If you aren't sure which way to do something, do it both ways and see which works better."[1] This might seem like it goes against what I am saying but actually narrowing "everything possible" to two options is huge value! That is a lot of what you provide as an engineer and the only way you are going to hone that sense is by working on your company's' product in production.

[1] https://aeflash.com/2013-01/john-carmack.html

onion2k

Learning what though? When I wrote software I learn the domain, the problem space, the architecture, the requirements, etc, as well as how to turn those things into code. I don't actually care about the code though - as soon as something changes I'll throw the code out or change it. It's an artefact of the process of solving a problem, which isn't the important bit. The abstract solution is what I care about.

LLMs only really help to automate the production of the least important bit. That's fine.

Calavar

> Learning what though? When I wrote software I learn the domain, the problem space, the architecture, the requirements, etc

You don't learn these things by writing code? This is genuinely interesting to me because it seems that different groups of people have dramatically different ways of approaching software development

For me, the act of writing code reveals places where the problem statement was underspecifed or places where the architecture runs into a serious snag, or corner cases in the requirements. I can understand a problem space at a high level based on problem statements and UML diagrams, but I can only truly grok it by writing code.

orev

Writing the code is like writing an essay—maybe you have some ideas in your head, but the act of writing them down forces you to interrogate and organize them into something cohesive. Without that process, those ideas remain an amorphous cloud, that as far as you’re concerned, are perfect. The process of forcing those thoughts into a linear stream is what exposes the missing pieces and errors in the logic.

dionian

I use llm to generate a lot of code but a large part of what i use it for is orchestration, testing, validation. that's not always 'learning', and by the way, i learn by watching the llm decide and execute, as it draws from knowledge pools faster than me.

LtWorf

You're not learning

Jtsummers

The actual title is: The Learning Loop and LLMs

For some reason johnwheeler editorialized it, and most of the comments are responding to the title and not the contents of the article (though that's normal regardless of whether the correct title or a different one is used, it's HN tradition).

sedatk

Does the editorialized title contradict with the article?

xnx

I'm happy to learn the essential complexity (e.g. business logic) but see low/no value in learning incidental complexity (code implementation details).

ares623

Spoken like a true CEO. LLMs makes everyone feel like CEOs. Imagine a world where everyone thinks they're CEOs.

crabmusket

"Programming as theory building" still undefeated.

Also, fun to see the literal section separator glyphs from "A Pattern Language" turn up.

johannes1234321

There are parts of software development, which requires understanding purpose and code and making good decisions or having in depth understanding to ootikize. And there are parts where it's just boring ceremony for using a library or doing some refactorings.

The first one is mostly requiring experienced humans, the alter one is boring and good to automate.

The problem is with all the in between. And in getting people to be able to do the first. There AI can be a tool and a distraction.

MarsIronPI

> There are parts of software development, which requires understanding purpose and code and making good decisions or having in depth understanding to ootikize. And there are parts where it's just boring ceremony for using a library or doing some refactorings.

I feel like maybe I'm preaching to the choir by saying this on HN, but this is what Paul Graham means when he says that languages should be as concise as possible, in terms of number of elements required. He means that the only thing the language should require you to write is what's strictly necessary to describe what you want.

AnIrishDuck

The most critical skill in the coming era, assuming that AI follows its current trajectory and there are no research breakthroughs for e.g. continual learning is going to be delegation.

The art of knowing what work to keep, what work to toss to the bot, and how to verify it has actually completed the task to a satisfactory level.

It'll be different than delegating to a human; as the technology currently sits, there is no point giving out "learning tasks". I also imagine it'll be a good idea to keep enough tasks to keep your own skills sharp, so if anything kinda the reverse.

RobRivera

I thoroughly love the meta programming features of cpp to generate code for me.

Animats

Front end design should have been all drag and drop years ago. LLMs should be doing it now. If it were not for the fact that HTML is a terrible way to encode a 2D layout, it would have been.

Gigachad

It was drag and drop before we decided websites should work on different screen sizes. And that it should adapt to every size more elegantly than a word document randomly changing layout when things move.

recursive

HTML is a good enough way of representing a superset of different layout types. It seems display: grid does most of the 2d constraint things that people always used to talk about. I don't know the state of the art for drag-drop grid layout builders, but it seems possible that one could be built.

IshKebab

I mostly agree. I think it isn't drag and drop because it's surprisingly hard to make a GUI builder interface that doesn't suck balls. Some manage it though, like QtCreator.

I guess there is stuff like SquareSpace. No idea how good it is though. And FrontPage back in the day but that sucked.

genghisjahn

VB6. yeah it was battleship gray, but you could amazing things.

LtWorf

Amazing, unless you wanted to resize the window that is.

shadowgovt

VB6 UIs are the color of getting work done. ;)

nawgz

I often hear this, and to an extent I don't disagree. There is an absurd amount of complexity that goes behind CSS/JS/HTML to make it function how it does. Browsers are true monstrosities.

But what alternatives are really left behind here that you view as superior?

To me, it is obvious the entire world sees a very high value in how much power can be delivered in a tiny payload via networked JS powering an HTML/CSS app. Are there really other things that can be viewed as equally powerful to HTML which are also able to pack such an information dense punch?

mkoubaa

The problem with drag drop frontend is the code generators that support that end up tightly coupling the document with the code, which doesn't lead to good testability and scalability. I'm optimistic that LLMs could accomplish a visual design paradigm while still designing the code in good taste, but so far I'm not holding my breath.

fsndz

we can't automate it anyway and vibe coding is overrated: https://medium.com/thoughts-on-machine-learning/vibe-coding-...

shadowgovt

Hm... I think I get what Mr. Joshi is saying, but the headline clashes with the notion that the essence of what we do is automation, and that includes automating the automation.

This at first blush smells like "Don't write code that writes code," which... Some of the most useful tools I've ever written are macros to automate patterns in code, and I know that's not what he means.

Perhaps a better way to say it is "Automating writing software doesn't remove the need to understand it?"

Jtsummers

> I think I get what Mr. Fowler is saying

Martin Fowler isn't the author, though. The author is Unmesh Joshi.

shadowgovt

[delayed]

bossyTeacher

So is drawing and painting. Didn't stop many techies in here from using it. Many techies believe their tech is improving the world even when their tech is stealing people's copyrighted art or making people depressed.

Gigachad

Tech bros here could see that their tech is being used to round up people for camps or blow up children and somehow tell themselves they are doing the right thing.

dionian

> I recently developed a framework for building distributed systems—based on the patterns I describe in my book. I experimented heavily with LLMs. They helped in brainstorming, naming, and generating boilerplate. But just as often, they produced code that was subtly wrong or misaligned with the deeper intent. I had to throw away large sections and start from scratch.

Well i do this but i force it to make my code modular and i replace whole parts quite often, but it's tactical moves in an overall strategy. The LLM generates crap, however, it can replace crap quite efficiently with the right guidance.