| ▲ | bbayles 4 hours ago |
| I'm sympathetic to this view, but I also wonder if this is the same thing that assembly language programmers said about compilers. What do you mean that you never look at the machine code? What if the compiler does something inefficient? |
|
| ▲ | gtowey 4 hours ago | parent | next [-] |
| Not even remotely close. Compilers are deterministic. People who write them test that they will produce correct results. You can expect the same code to compile to the same assembly. With LLMs two people giving the exact same prompts can get wildly different results. That is not a tool you can use to blindly ship production code. Imagine if your compiler randomly threw in a syscall to delete your hard drive, or decide to pass credentials in plain text. LLMs can and will do those things. |
| |
| ▲ | alecbz 4 hours ago | parent | next [-] | | Even ignoring determinism, with traditional source code you have a durable, human-readable blueprint of what the software is meant to do that other humans can understand and tweak. There's no analogy in the case of "don't read the code" LLM usage. No artifacts exist that humans can read or verify to understand what the software is supposed to be doing. | | |
| ▲ | luckydata 2 hours ago | parent [-] | | yeah there is. it's called "documentation" and "requirements". And it's not like you can't go read the code if you want to understand how it works, it's just not necessary to do so while in the process of getting to working software. I truly do not understand why so many people are hung up on this "I need to understand every single line of code in my program" bs I keep reading here, do you also disassemble every library you use and understand it? no, you just use it because it's faster that way. | | |
| ▲ | alecbz an hour ago | parent | next [-] | | > it's called "documentation" and "requirements" What I mean is an artifact that is the starting point for generating the software. Compiled binaries can be completely thrown away whenever because you know you have a blueprint (the source code) that can reliably reproduce it. Documentation & requirements _could_ work this way if they served as input to the LLMs that would then go and create the source code from scratch. I don't think many people are using LLMs this way, but I think this is an interesting idea. Maybe soon we'll have a new generation of "LLM-facing programming languages" that are even higher level software blueprints that will be fed to LLMs to generate code. TDD is also a potential answer here? You can imagine a world where humans just write test suites and LLMs fill out the code to get it to pass. I'm curious if people are using LLMs this way, but from what I can tell a lot of people use them for writing their tests as well. > And it's not like you can't go read the code if you want to understand how it works In-theory sure, but this is true of assembly in-theory as well. But the assembly of most modern software is de-facto unreadable, and LLM-generated source code will start going that way too the more people become okay with not reading it. (But again, the difference is that we're not necessarily replacing it with some higher-level blueprint that humans manage, we're just relying on the LLMs to be able to manage it completely) > I truly do not understand why so many people are hung up on this "I need to understand every single line of code in my program" bs I keep reading here, do you also disassemble every library you use and understand it? no, you just use it because it's faster that way. I think at the end of the day this is just an empirical question: are LLMs good enough to manage complex software "on their own", without a human necessarily being able to inspect, validate, or help debug it? If the answer is yes, maybe this is fine, but based on my experiences with LLMs so far I am not convinced that this is going to be true any time soon. | |
| ▲ | notpachet an hour ago | parent | prev [-] | | > do you also disassemble every library you use and understand it? Sometimes. |
|
| |
| ▲ | knowknow 4 hours ago | parent | prev [-] | | Not only that but compiler optimizations are generally based on rigorous mathematical proofs, so that even without testing them you can be pretty sure it will generate equivalent assembly. From the little I know of LLM's, I'm pretty sure no one has figured out what mathematical principles LLM's are generating code from so you cant be sure its going to right aside from testing it. |
|
|
| ▲ | conartist6 4 hours ago | parent | prev | next [-] |
| I write JS, and I have never directly observed the IRs or assembly code that my code becomes. Yet I certainly assume that the compiler author has looked at the compiled output in the process of writing a compiler! For me the difference is prognosis. Gas Town has no ratchet of quality: its fate was written on the wall since the day Steve decided he didn't want to know what the code says: it will grow to a moderate but unimpressive size before it collapses under its own weight. Even if someone tried to prop it up with stable infra, Steve would surely vibe the stable infra out of existence since he does not care about that |
| |
| ▲ | luckydata 2 hours ago | parent [-] | | or he will find a way to get the AI to create harnesses so it becomes stable. The lack of imagination and willingness to experiment in the HN crowd is AMAZING me and worrying me at the same time. Never thought a group of engineers would be the most conservative and close minded people I could discuss with. | | |
| ▲ | conartist6 an hour ago | parent | next [-] | | It's a paradox, huh. If the AI harness became so stable it wrote good code he wouldn't be afraid to look at the code he would be eager to look at it, right? But then if it mattered if AI wrote good code or not he couldn't defend his position that the way to create value with code is quantity over quality. He needs to sell the idea of something only AI can do, which means he needs the system to be made up of a lot of bad or low quality code which no person would ever want to be forced to look at. | |
| ▲ | vardalab an hour ago | parent | prev [-] | | Wait till you meet engineers other than sw engineers. Not even sure most sw people should be called engineers since there are no real accredited standards.
I specifically trained as EE in physical electronics because other disciplines at the time seemed really rigid. There's a saying that you don't want optimists building bridges. |
|
|
|
| ▲ | anonymous908213 4 hours ago | parent | prev | next [-] |
| No, it is not what assembly programmers said about compilers, because you can still look at the compiled assembly, and if the compiler makes a mistake, you can observe it and work around it with inline assembly or, if the source is available, improve the compiler. That is not the same as saying "never look at the code". |
|
| ▲ | 7777332215 4 hours ago | parent | prev | next [-] |
| The compiler is deterministic and the translation does not lose semantics. The meaning of your code is an exact reflection of what is produced. |
| |
| ▲ | fragmede 4 hours ago | parent [-] | | We can tell you weren't around for the advent of compilers. To be fair, neither was I since the UNIX c compiler came out in '68 and was by far not the first compiler. Modern comilers you can make that claim about, but early compilers weren't. | | |
| ▲ | recursive 4 hours ago | parent | next [-] | | All compilers have bugs. Any loss of semantics during compilation would be considered a bug. In order to do that, the source and target language need to be structured and specified. I wasn't around in the 60s either, but I think that hasn't changed. | |
| ▲ | georgemcbay 26 minutes ago | parent | prev | next [-] | | I've been programming since 6502/6510 assembly language and all compilers I've used were deterministic (which isn't the same thing as being bug free or producing the correct output for a given input). | |
| ▲ | tjr 4 hours ago | parent | prev [-] | | Which early compilers were nondeterministic? |
|
|
|
| ▲ | hilbertseries 4 hours ago | parent | prev | next [-] |
| I feel like this argument would make a lot more sense if LLMs had anywhere near the same level of determinism as a compiler. |
|
| ▲ | jplusequalt 4 hours ago | parent | prev | next [-] |
| >but I also wonder if this is the same thing that assembly language programmers said about compilers But as a programmer writing C code, you're still building out the software by hand. You're having to read and write a slightly higher level encoding of the software. With vibe coding, you don't even deal with encodings. You just prompt and move on. |
| |
| ▲ | zerkten an hour ago | parent [-] | | I've wondered if people who write detailed specs, are overly detailed, are in a regulated industry, or even work with offshore teams have success more quickly simply they start with that behavior. Maybe they have a tendency to dwell before moving on which may be slightly more iterative than someone who vibecodes straight through. |
|
|
| ▲ | gegtik 4 hours ago | parent | prev | next [-] |
| I wonder if assembly programmers felt this way about the reliability of the electical components which their code relies upon... |
| |
| ▲ | beklein 4 hours ago | parent [-] | | I wonder if electrical engineers felt this way about the reliability of the silicon crystal lattice their circuits rely upon… |
|
|
| ▲ | crote 4 hours ago | parent | prev | next [-] |
| The big difference is that compilation is deterministic: compile the same program twice and it'll generate the same output twice. It also doesn't involve any "creativity": a compiler is mostly translating a high-level concept into its predefined lower-level components. I don't know exactly what my code compiles to, but I can be pretty certain what the general idea of the assembly is going to be. With LLMs all bets are off. Is your code going to import leftpad, call leftpad-as-a-service, write its own leftpad implementation, decide that padding isn't needed after all, use a close-enough rightpad instead? Who knows! It's just rolling dice, so have fun finding out! |
| |
| ▲ | fragmede 3 hours ago | parent [-] | | > The big difference is that compilation is deterministic: compile the same program twice and it'll generate the same output twice. That's barely true now. Nix comes close, but builds are only bit-for-bit identical if you set a bunch of extra flags that aren't set by default. The most obvious instability is CPU dispatch order (aka modern single computer systems are themselves distributed, racy systems) changes the generated code ever so slightly. We don't actually care, because if one compiled version of the code uses r8 for a variable but a different compilation uses r9 for that variable, it doesn't matter because we just assume the resulting binary works the same either way. R8 vs r9 are implementation details that don't matter to humans. See where I'm going with this? If the LLM non-deterministically calls the variable fileName one day, and file_name the next time it's given the same prompt, yeah language syntax purists are going to suffer an aneurysm because one of those is clearly "wrong" for the language in use, but it's really more of an implementation detail at this point. Obviously you can't mix them, the generated code has to be consistent in which one it's using, but if compilers get to chose r8 one day and r9 the next, and we're fine with it, why is having the exact variable name that important, as long as it's being used correctly? | | |
| ▲ | tjr 3 hours ago | parent | next [-] | | I’ve done builds for aerospace products where the only binary difference between two builds of the same source code is the embedded timestamp. And per FAA review guidelines, this deterministic attribute is required, or else something is wrong in the source code or build process. I certainly don’t use all compilers everywhere, but I don’t think determinism in compilation is especially rare. | |
| ▲ | m4rtink an hour ago | parent | prev [-] | | If your builds are not deterministic for the same set of inputs, you are doing something wrong - or victim of supply chain attack. https://reproducible-builds.org/ |
|
|
|
| ▲ | 4 hours ago | parent | prev [-] |
| [deleted] |