this post was submitted on 02 Nov 2023
1141 points (98.0% liked)
Programmer Humor
32555 readers
622 users here now
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
- Posts must be relevant to programming, programmers, or computer science.
- No NSFW content.
- Jokes must be in good taste. No hate speech, bigotry, etc.
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
It happened because the programmer changed the API from a call that accepted integer values between 0 and 32767 (minimum and maximum wheel speeds) to one that accepted float values between 0.0 and 1.0. A very reasonable change to make, but he quick-fixed all the compiler errors that this produced by casting the passed integer parameters all through his code to float and then clamping the values between 0.0 and 1.0. The result was that formerly low-speed parameters (like 5000 and 6000, for example, which should have produced something like a 20 mph ball with topspin) were instead cast and clamped to 1.0 - maximum speed on both throwing wheels and the aforesaid 125 mph knuckleball. He rewrote his tests to check that passed params were indeed between 0.0 and 1.0, which was pointless since all input was clamped to that range anyway. And there was no way to really test for a "dangerous" throw anyway since the machine was required to be capable of this sort of thing if that's what the coach using it wanted.
Yikes! That's also a great cautionary tale for Primitive Obsession/Whole Value as well as a bunch of other design principles.
I'm thinking about how I'd have done that refactoring and now I wish I had the code base to try it on. It sounds like it would make a really good real-life exercise in a workshop. "Remember folks, you have to get this right. There's not really a way to check this with the real hardware, and if you get it wrong, someone's going to get hurt."
Thanks again.
Well, I have a rule now which is "never test your shit on Little Leaguers" and nobody I've worked with has any idea what that means.
I don't think I'll forget.
This is true Customer empathy.