Hacker News new | ask | show | jobs
by mynameisvlad 1112 days ago
By your own admission you have never used the knowledge you learned.

Why exactly is it “good to know how it works” if you literally have never used that knowledge? Why is it “something you want to get a handle on pretty quickly” if you don’t touch binary?

Are there places where it would come up? Most certainly. Is it required learning for every single dev out there? Highly debatable.

2 comments

I've certainly benefited from knowing about floating point error. I likely would have spent a lot of time confused about why certain kinds of math kept coming out wrong without know about the underlying representation of floats, how it results in error, why this tradeoff is good for most scenarios, and other options.

The problem is that this is the sort of foundational knowledge that isn't easily gained through the learn-as-needed approach that applies to higher level things. Most people can notice when they don't know how to use a library. It's probably not obvious to most people who don't already know about it that their computer can handle numbers wrong.

> It's probably not obvious to most people who don't already know about it that their computer can handle numbers wrong.

0.1+0.2=0.30000000000004 is not obvious? When a floating point error happens, it’s quite plainly obvious. At that point, someone would look up a SO article like https://stackoverflow.com/questions/588004/is-floating-point... and learn about it. And from there, FPE mitigations.

Would you get to the mitigations faster if you knew binary? Sure, the first time you ever hit it. But that seems to be bottom of the barrel optimization, IMO.

Most manifestations will be in the middle of something more nuanced than a demo statement, the people in question will often lack the vocabulary to describe what they're seeing, and it's rarely anyone's first or even fifth thought that addition is going wonky. With that in mind, I think it's perhaps a stretch to call floating point error plainly obvious.

You're right, of course. This would be only marginally faster if the person knew binary. That said, there's a large swath of very similar things that crop up where the person benefits from a familiarity with the fundamentals of computing. There's enough of these things that a reasonable person might conclude that a software engineer benefits from such a knowledge base inside their head. That way a person can benefit from all those marginal gains at once.

The example is overly simplified, sure. But even if it’s in the middle of a swath of other operations, it will still result in very similar behavior. You’re likely never to get a clean number once a floating point error happens, and the result will be slightly off and seem to not be rounded.

Searching “why is my arithmetic operation not rounded”, I got https://docs.python.org/3/tutorial/floatingpoint.html as the third answer. I obviously can’t unlearn what floating point arithmetic is, but it feels like someone without any knowledge of it would likely be able to get a similar result relatively quickly as long as they are good at searching for answers (a much more important skill, IMO, which should be considered foundational)

> That said, there's a large swath of very similar things that crop up where the person benefits from a familiarity with the fundamentals of computing.

We’re talking specifically about binary, not fundamentals in general. Some fundamental knowledge is more important than others, and I posit that binary is on the lower end of that spectrum.

IMO, being good at searching is a skill that's only really useful when you have some idea what kind of question you're looking for an answer to.

I don't think we're actually talking specifically about binary. I am treating the reference to binary as a stand-in for the mathematical fundamentals of computing, rather than a narrow comment on understanding binary and bitwise operations.

> IMO, being good at searching is a skill that's only really useful when you have some idea what kind of question you're looking for an answer to.

"why is my arithmetic operation not rounded" seems like something anyone facing the problem would ask. That's pretty much the root issue in words.

> I don't think we're actually talking specifically about binary.

I mean, that is literally what the thread you replied to was discussing.

The comment I replied to explicitly talks about binary and their use of it, the comment they replied to originally also specifically calls out the OP’s quote which talks directly about binary. You can choose to deviate from that if you want to make a point, but the thread has always explicitly been about binary and that is what we should actually be discussing.

> Highly debatable.

For the sake of debate: call me old-fashioned, but I don't ever want to rely on code from a "developer" who isn't familiar with binary notation.

How does knowing binary produce meaningfully better code? Most of us aren't working at a low enough level for it to be substantial.

You should be judging the code, not the person who wrote it.

For nearly all of the software I rely on, I haven't examined the code. I'm not in a position to judge it.

For most of that software, of course, I'm not in a position to judge the developer either; but if all I know is that the developer isn't familiar with binary and hex, then I wouldn't expect her to be competent to write, for example, a brochure website, let alone a webserver. URL encoding depends on hex. Debugging often depends on hex. Arithmetic overflow and carry are binary. Twos-complement notation for signed integers is a binary convention.

I wouldn't hire a developer who couldn't explain binary notation. In fact I don't think I've ever met one like that.

As I suggested, perhaps I'm old-fashioned.