Live data from Hacker News

"Vibe code hell" has replaced "tutorial hell" in coding education

blog.boot.dev

151–160 of 169 posts

Re: "Vibe code hell" has replaced "tutorial hell" in coding education

#151

Earlier quoted context omitted.

I’ve been saying this for years now: you can’t avoid communicating what you want a computer to do. The specific requirements have to be made somewhere. Inferring intent from plain english prompts and context is a powerful way for computers to guess what you want from underspecified requirements, but the problem of defining what you want specifically always requires you to convey some irreducible amount of information…

> if you care about correctness they all basically converge to the same thing and the same amount of work. That's the part I'd push back on. They're not the same amount of work. When I'm writing the code myself, it's basically a ton of "plumbing" of loops and ifs and keeping track of counters and making sure I'm not making off-by-one errors and not making punctuation mistakes and all the rest. It actually takes quite…

> When I'm writing the code myself, it's basically a ton of "plumbing" of loops and ifs and keeping track of counters and making sure I'm not making off-by-one errors and not making punctuation mistakes and all the rest. It actually takes quite a lot of brain energy and time to get that all perfect.

All of that "plumbing" affects behavior. My argument is that all of the brain energy used when checking that behavior is necessary in order to check that behavior. Do you have a test for an off by one error? Do you have a test to make sure your counter behaves correctly when there are multiple components on the same page? Do you have a test to make sure errors don't cause the component to crash? Do you have a test to ensure non utf-8 text or binary data in a text input throws a validation error? Etc etc. If you're checking all the details for correct behavior, the effort involved converges to roughly the same thing.

If you're not checking all of that plumbing, you don't know whether or not the behavior is correct. And the level of abstraction used when working with agents and LLMs is not the same as when working with a higher level language, because LLMs make no guarantees about the correspondence between input and output. Compilers and programming languages are meticulously designed to ensure that output is exactly what is specified. There are bugs and edge cases in compilers and quirks based on different hardware, so it's not always 100% perfect, but it's 99.9999% perfect.

When you use an LLM, you have no guarantees about what it's doing, and in a way that's categorically different than not knowing what a compiler does. Very few people know all of the steps that break down `console.log("hello world")` into the electrical signals that get sent to the pixels on a screen on a modern OS using modern hardware given the complexity of the stack, but they do know with as close as is humanly possible to 100% certainty that a correctly configured environment will result in that statement outputting the text "hello world" to a console. They do not need to know the implementation because the contract is deterministic and well defined. Prompts are not deterministic nor well defined, so if you want to verify it's doing what you want it to do, you have to check what it's doing in detail.

Your basic argument here is that you can save a lot of time by trusting the LLM will faithfully wire the code as you want, and that you can write tests to sanity check behavior and verify that. That's a valid argument, if you're ok tolerating a certain level of uncertainty about behavior that you haven't meticulously checked or tested. The more you want to meticulously check behavior, the more effort it takes, and the more it converges to the effort involved in just writing the code normally.

Re: "Vibe code hell" has replaced "tutorial hell" in coding education

#152
post #75

Earlier quoted context omitted.

I'm self-taught and did pretty much all of those things. All it took was reading the docs.

I downvoted you because you are exceptional but the rest of the world is not. Most people benefit from traditional education, software engineering is not different.

it only becomes exceptional after you start and continue doing it. I was not capable of self-learn before I applied to it.

Re: "Vibe code hell" has replaced "tutorial hell" in coding education

#153

Earlier quoted context omitted.

> if you care about correctness they all basically converge to the same thing and the same amount of work. That's the part I'd push back on. They're not the same amount of work. When I'm writing the code myself, it's basically a ton of "plumbing" of loops and ifs and keeping track of counters and making sure I'm not making off-by-one errors and not making punctuation mistakes and all the rest. It actually takes quite…

> When I'm writing the code myself, it's basically a ton of "plumbing" of loops and ifs and keeping track of counters and making sure I'm not making off-by-one errors and not making punctuation mistakes and all the rest. It actually takes quite a lot of brain energy and time to get that all perfect. All of that "plumbing" affects behavior. My argument is that all of the brain energy used when checking that behavior i…

> If you're checking all the details for correct behavior, the effort involved converges to roughly the same thing.

Except it doesn't. It's much less to verify the tests.

> That's a valid argument, if you're ok tolerating a certain level of uncertainty about behavior that you haven't meticulously checked or tested.

I'm a realist, and know that I, like all other programmers, am fallible. Nobody writes perfect code. So yes, I'm ok tolerating a certain level of uncertainty about everybody's code, because there's no other choice.

I can get the same level of uncertainty in far less time with an LLM. That's what makes it great.

Re: "Vibe code hell" has replaced "tutorial hell" in coding education

#154
post #150
post #141

Earlier quoted context omitted.

What are you doing, where you're solely working on greenfield projects? I remember a professor of mine saying something specifically on never trusting a Software Engineer that has never had to work on legacy code.

I'm a full-stack consultant (the actual full stack, not whatever kids mean these days) and deliver "solutions" to clients. I've got my fair share of legacy code to maintain, don't worry. (I have this Django app I wrote 15 years ago that I should really port to Elixir which is my main thing these days - but there's no money in rewriting an entire application that's in production for that long) Here's my 2 cents: take…

(the actual full stack, not whatever kids mean these days)

Can you clarify what that means to you? The full stack of modern web solutions spans from datacenter hardware selection to client device PCB design, and I don't think any single person can realistically manage all of that by themselves.

Re: "Vibe code hell" has replaced "tutorial hell" in coding education

#155
post #142

Earlier quoted context omitted.

Reading and watching fills your brain with whats possible Doing and thinking solidifies it, teaches you to use the things you've read about You need both When I'm learning something new I like to skim a bunch of content upfront to get an idea of what's there

> Reading and watching fills your brain [with dopamine] with whats possible FTFY. Then you have to do it yourself, and none of that instant gratification comes. Tutorials are junk food that appear useful. Looking at one to solve a specific problem might help, trying to learn something by consuming an unspecified amount of hours watching randos with polished youtube videos is akin to scrolling TikTok and feeling you’r…

[deleted]

Re: "Vibe code hell" has replaced "tutorial hell" in coding education

#156

Earlier quoted context omitted.

> When I'm writing the code myself, it's basically a ton of "plumbing" of loops and ifs and keeping track of counters and making sure I'm not making off-by-one errors and not making punctuation mistakes and all the rest. It actually takes quite a lot of brain energy and time to get that all perfect. All of that "plumbing" affects behavior. My argument is that all of the brain energy used when checking that behavior i…

> If you're checking all the details for correct behavior, the effort involved converges to roughly the same thing. Except it doesn't. It's much less to verify the tests. > That's a valid argument, if you're ok tolerating a certain level of uncertainty about behavior that you haven't meticulously checked or tested. I'm a realist, and know that I , like all other programmers, am fallible. Nobody writes perfect code. S…

> Except it doesn't. It's much less to verify the tests.

This is only true when there is less information in those tests. You can argue that the extra information you see in the implementation doesn't matter as long as it does what the tests say, but the amount of uncertainty depends on the amount of information omitted in the tests. There's a threshold over which the effort of avoiding uncertainty becomes the same as the effort involved in just writing the code. Whether or not you think that's important depends on the problem you're working on and your tolerance for error and uncertainty, and there's no hard and fast rule for that. But if you want to approach 100% correctness, you need to attempt to specify your intentions 100% precisely. The fact that humans make mistakes and miscommunicate their intentions does not change the basic fact that a human needs to communicate their intention for a machine to fulfill that intention. The more precise the communication, the more work that's involved, regardless of whether you're verifying that precision after something generates it or generating it yourself.

> I can get the same level of uncertainty in far less time with an LLM. That's what makes it great.

I have a low tolerance for uncertainty in software, so I usually can't reach a level I find acceptable with an LLM. Fallible people who understand the intentions and current function of a codebase have a capacity that a statistical amalgamation of tokens trained on fallible people's output simply do not have. People may not use their capacity to verify alignment between intention and execution well, but they have it.

Again, I'm not denying that there's plenty of problems where the level of uncertainty involved in AI generated code is acceptable. I just think it's fundamentally true that extra precision requires extra work/there's simply no way to avoid that.

Re: "Vibe code hell" has replaced "tutorial hell" in coding education

#157

Earlier quoted context omitted.

> If you're checking all the details for correct behavior, the effort involved converges to roughly the same thing. Except it doesn't. It's much less to verify the tests. > That's a valid argument, if you're ok tolerating a certain level of uncertainty about behavior that you haven't meticulously checked or tested. I'm a realist, and know that I , like all other programmers, am fallible. Nobody writes perfect code. S…

> Except it doesn't. It's much less to verify the tests. This is only true when there is less information in those tests. You can argue that the extra information you see in the implementation doesn't matter as long as it does what the tests say, but the amount of uncertainty depends on the amount of information omitted in the tests. There's a threshold over which the effort of avoiding uncertainty becomes the same a…

> I have a low tolerance for uncertainty in software

I think that's what's leading you to the unusual position that "This is only true when there is less information in those tests."

I don't believe in perfection. It's rarely achieved despite one's best efforts -- it's a mirage. What we can realistically look for is a statistical level of reliability that tests help achieve.

At the end of the day, it's about delivering value. If you can on average deliver 5x value with an LLM because of the speed, or 1.05x value because you verified every line of code 3 times and avoided a rare bug that both the LLM and you didn't think about testing (compared to the 1x value of a non-perfectionist developer), then I know which one I'm choosing.

Re: "Vibe code hell" has replaced "tutorial hell" in coding education

#158
post #133

Earlier quoted context omitted.

How do you remember sin and cos in practice? Draw a unit circle, draw a radius at whatever angle with the x axis that you want. The point where the radius touches the perimeter has the coordinates cos(angle), sin(angle). How do you remember the order? Alphabetically, just like the Baltic states. Tan is the slope of the radius line: sin(angle)/cos(angle). How do you remember the fraction for the slope of a line? I use…

Since high school in the 80s I still remember the phonetic mnemonic "soh cah toa" one teacher mentioned off the cuff once. sine is opposite over hypotenuse cosine is adjacent over hypotenuse tangent is opposite over adjacent

The unit circle diagram is nicer because it naturally works with angles bigger than 180 and negative angles. If you look at the unit circle with a radius and the intersection point with the circle, you naturally get a right triangle of the kind your mnemonics apply to.

It also has the advantages of being language/culture blind.

Re: "Vibe code hell" has replaced "tutorial hell" in coding education

#159

Earlier quoted context omitted.

> What's a sine, cosine, and tangent? I honestly still don't know, because the words themselves are foreign to me. They are conversion functions between different fraction-based ways of measuring angles. You can draw a right triangle for the angle you want to build and you can measure it based on the ratio of any two sides of the triangle. You can also view the angle as a fraction of a circle. It's up to you decide w…

Thanks for attempting to explain it, but I still won't understand or retain any of this information, for the reasons I outlined.

Where in the explanation does your understanding stop?

Re: "Vibe code hell" has replaced "tutorial hell" in coding education

#160

Earlier quoted context omitted.

Thanks for attempting to explain it, but I still won't understand or retain any of this information, for the reasons I outlined.

Where in the explanation does your understanding stop?

My problem (in this example) isn't understanding, it's memorization. I can understand the concepts. But I have to not only understand the different concepts, I have to understand how they are used, I have to memorize a unique word for each of the three concepts, and I have to remember which word is which concept. It's actually four different mental activities, all of which need to be embedded in my long-term memory, and all for a thing I'll almost never use. Yes, people use mnemonics. But then I have to memorize the mnemonic and what it means, which adds a fifth activity to all this. To add more difficulty, each of these things needs a visual/spacial representation. So I need five different mental activities in five different spatial representations to remember and explain trig ratios.

And this is why it took 8 hours for me to do math homework every night.

Post reply on HN