Live data from Hacker News

Software Engineering fundamentals matter more

rhonabwy.com

231–240 of 266 posts

Re: Software Engineering fundamentals matter more

#231

With generated code, the directory structure, interface design and general state management is usually a haphazard mess. Even with the best frontier models. But what really gets me is the model often tries to make assumptions for me that I didn't specify in the prompt. Subtle things like which error states are "oh shit we need to bail" vs "this isn't a deal breaker." Sometimes it will ask, but more often than not it…

The generated code is fine at the functional level, the directory structure is usually the standard pattern for the given type of project. The error types and codes, it will produce to spec. If you type 'make me that thingy' - yes, it's probably not going to do what you want, but if you give it spec and guidance, it usually will. The 'interface design' ... not very good though.

At the point you fully define your spec and behavior, what you have is code.

Re: Software Engineering fundamentals matter more

#232
post #70

I have an open question for software engineers out there: As someone that has never studied CS but has written basic code most of my life (accelerated now with AI), where is the best place to learn software engineering fundamentals?

Hi, CS graduate here. during my post-graduation unemployed year I have been wrestling with this question a lot. The answer is that there is none - the research on the practice of translating requirements into code has stopped in the 1970s with Structured Programming (Dijkstra) and Problem Frames (Jackson). There is a certain inspiration people had with reusable patterns of problems a la Alexander, but after some time people got lost in the Java enterprise world and started making "design patterns" (which has very much dominated the online space and I cannot search properly for general software design anymore). The second problem is with Clean Code, which to me is a really bad set of "if you know you know" hand-wavy advice that is purposefully vague, because observable, actionable advice is actually very hard to come by.

I think when people say software engineering, they confuse the high level designs (server, caching, db, etc. generally interaction constraints) and the lower level designs (modules, abstractions, classes, data structure design). There is a lot of content on the former but really few on the latter - which is some people cannot write new code, but can work on existing systems fine. Two main problems is 1. How to break down the problem at hand and 2. Organizing data into abstractions, and often creating new ones.

For (1) the advice everyone resorts to is "just do more" and rely on pattern recognition, because you can't really break down a thing you haven't seen nor can relate to what you've seen before. But there is [A Framework for Decomposition in Computational Thinking](https://www.researchgate.net/publication/334579725_A_Framewo...) that's the best attempt at it so far in my opinion. Some other approaches involve observation from ideal user flow and software ideal behaviour, or UI wireframing to see what elements should be there.

For (2), this also has the problem of organizing (which code goes into which file, which function does this belong to) and naming. For organizing data, I will recommend [The Many Forms of a Single Fact](https://www.bkent.net/Doc/manyform.htm) and the first chapter of [Data and Reality](https://cmpct.info/~calvin/Papers/Data%20and%20Reality.pdf) to see how impossible it is to create exactly correct representations in code. In areas that's entirely inside the box (e.g graphics) people don't often deal with messy representations of real world domains, but in business software they will do much more.

On the naming side, the first chapter of [Elements of Clojure](https://elementsofclojure.com/) was a really good attempt, making me realize it is way deeper into philosophy than anyone would like to wander in.

That said, the way software engineering discussion has been so far is very much influenced by the programming languages of the time (see Java), and so my recommendation is to try to learn concepts of organization independently, and see what its workaround is in your active language (e.g algebraic data type is sometimes useful, and people try to do it with sealed classes in Kotlin or interfaces in TypeScript). Once you have a good grasp of one tool (with all their warts, they all have pains), you'll find the capability to experiment.

Re: Software Engineering fundamentals matter more

#233

Earlier quoted context omitted.

The generated code is fine at the functional level, the directory structure is usually the standard pattern for the given type of project. The error types and codes, it will produce to spec. If you type 'make me that thingy' - yes, it's probably not going to do what you want, but if you give it spec and guidance, it usually will. The 'interface design' ... not very good though.

At the point you fully define your spec and behavior, what you have is code.

Telling the app how to handle errors doesn't specify the code.

The AI will handle a lot of the common, in-between issues.

The more framework you can give it, the more it can fill in blanks.

Re: Software Engineering fundamentals matter more

#235

> It helps to know that LLMs don’t “reason”. They predict .. Semantics. Prediction is the training objective. The ability to reason can be, and very arguably is, an emergent property of that.

By that standard, human brains don't either. Our externalizations of concepts like language or symbolic structure allow us to do so. In the parlance of our times, we built our own reasoning harnesses because our intuition lead us to do so.

> By that standard, human brains don't either.

Exactly. If LLMs don’t reason, then neither do humans.

Functionally, we can analyze LLM output and point to examples of reasoning, and examples that imply understanding.

The problem is there’s a lot of superstition around words like reasoning and understanding. People imagine some ineffable quality that only humans possess that distinguish what they do from what models can do, but they can’t define it - most likely, because it doesn’t exist.

Re: Software Engineering fundamentals matter more

#237

The article says what many here like to hear, but in my opinion the core arguments are false. > Making software debuggable, maintainable, layered, and composable – that’s still quite a trick Not really. I have been working on a mobile app for months, and I stopped even glancing at the code about two months ago. 150k LOC, around half of that in tests, and the AI still has no problem maintaining the code on my behalf.…

> prompt injection appears to be largely solved already.

I trust Anthropic's research, and Opus-5 is definitely the most robust model against prompt injection. However, in my experiments - only one specific scenario - this was still possible [1][2].

[1] https://itmeetsot.eu/posts/2026-07-27-opus5/

[2] https://itmeetsot.eu/posts/2026-08-12-opus5_automode/

Re: Software Engineering fundamentals matter more

#239

Earlier quoted context omitted.

Don't you think I've fixed bugs and kept the app stable during the 300 hours I have been working on it? That's why I can say with full confidence that it works. I doubt it will magically all fall apart the moment an external user touches it, or that I will expand the scope dramatically in the near future. The agent harnesses are an interesting topic. I believe they have large teams shipping a ton of changes weekly. I…

> The agent harnesses are an interesting topic. I believe they have large teams shipping a ton of changes weekly. In that environment, is it realistic to expect rock solid software with such a feature set to be developed in a few months and shipped to 10M users? Yes, the whole argument is that LLMs make shipping quality software at scale in months possible. You're arguing out of two sides of your mouth now. On the on…

> the one hand, agents have enabled you to build a bullet-proof high quality app in a few months as a solo dev. On the other hand it's supposedly unreasonable to expect a team of engineers with lots of funding and lots of expertise to use those same LLMs to build high quality software in a few months

I think you understand well that there is a major difference between developing a mobile app solo and 10-20 people working on a coding agent harness of vastly larger scope.

I don't intent to prove anything to you. I am telling you that it works for my mobile app development. Your arguments to the contrary are rather weak.

Re: Software Engineering fundamentals matter more

#240
post #228

Earlier quoted context omitted.

I've been working on the app for four months, and I am clearly not talking about code quality. I am talking about product quality and maintainability. Both are more than adequate. I know this because I have worked on it for an estimated 300 hours. Has the author practiced a similar approach for even a week? I doubt it.

> worked on it for an estimated 300 hours If humans aren't needed why have you had to spend 300 hours? I upvoted your comment BTW because I think you might be right, but I'm not sure. I still see people doing a lot of work, despite LLMs.

It's still a lot of work.

I have to prompt for the features, test them, then iterate until the UX is acceptable before I merge.

Usually I would juggle 2-5 topics in parallel, unless one of them demands more of my attention.

While there is no more code review involved, it is a lot of QA work and testing on device.

The bottleneck is that the AI does not have taste, does not know what the product should be, and would happily ship horrible slop without my intervention.

Other than the implementation itself there are other things that need to be handled: researching competitors, keywords, pricing, AppStore preparation, TOS and privacy policy, when do you show the rating prompt, translations, etc.

AI still helps with a lot of it, but it takes time and effort.

Post reply on HN