I am on a personal and professional mission to write bug-free code.
Software with zero bugs may seem like an ambitious goal. Over time, defects in...
For further actions, you may consider blocking this person and/or reporting abuse
You made a logic error in your code:
I think you meant the opposite.
Also software that is decently complex will always have bugs. Don't get me wrong, you get better at identifying common causalities over time as you have shown here, but given sufficient complexity, you will eventually have bugs. It's just entropy at work.
Thanks for pointing out the error! I've fixed the bug.
Hewwo, pwease change
if
hidden
is the current state.OR, if
hidden
is desired state, changeYou didn't flip the cases when negating the predicate.
Stylistically I would ofc prefer one of:
or
for a better signal/noise ratio (which makes bugs more evident)
Apologies for the delay. I've fixed the logic error you rightly pointed out.
Nice post Jonathan!
Linting and static type checking definitely remove a chunk of these issues
I'm trying to remember for C#, there was a tool that would check for potential memory leaks that wasn't the memory profiler. The name is escaping me at the moment.
As well for C# async/await, setting
ConfigureAwait(false)
. Where I used to work we create a rule using the Roslyn compiler to check for this.Anyways, looking forward to your next post!
I have a problem with the way Subtle logic errors section is phrased.
is not a clearer way to write
It's different code. Did you mean that a bug was fixed, and not a refactor occured?
Same for the next one:
is not clearer than
It is different code.
could be the clearer rewrite of the same code. (Is it though? What's
11
?)The bigger issue there is probably the magic number
10
.Better than any comment you could leave would be extracting it to a named constant. A constant semantically named for the reason it's used there.
These are both good code:
Great post, Jonathan. Zero-defect software is a worthwhile goal (one that I've been pursuing for the last couple of years).
Here's my code review checklist.
We've been using this checklist at my work for a couple of years and it really works for us. We find a only a handful of minor errors in production each year (which is a fraction of what we found before we used this checklist).
Watts Humphrey published extensively zero-defect software. I wrote a summary here.
But, even if you don't want anything to do with PSP (and most people don't), chapter 8 of PSP: A Self-Improvement Process for Software Engineers lays out the economic case for producing high quality software. Spoiler: it's almost always worth the effort for software that's going to be around for a long time.
Thanks for sharing, Blaine! That writing by Humphrey looks very interesting. I'll certainly read up on it.
Imagine bug free code, how would we improve that? If I change your checklist to include screen readers in multiple languages, would I have just created more bugs? It's a moving target, great to aim for but imperfection is reality.
Yes! Someone referred to accessibility! It is certainly critical, as you mentioned, for those who rely on screen-readers and other assistive technology to be able to access and use applications.
I have added a short section on accessibility, but as a mere paragraph wouldn't do the topic justice, I will publish a separate blog post on the topic and/or reference the best sources I can find.
Agreed that imperfection is the default state, and we often can't cover all bases. I think that as we push forward and aiming higher, for more reliable and bug-free code, we will build up tools and expertise for dealing with a large number of concerns, including accessibility, efficiently and effectively.
Update: I have added a section on 'Accessibility'. Great idea – so thumbs up to you. 👍
Some stuff I'd like to add:
Wow, fabulous post.
Thanks mate! Will try to improve it also, over the next week.
Why on Earth
for (let 0; i < 10; i++) {...}
will iterate 9 times?Apologies, my bad. Thanks for identifying this. I have corrected the error.
Actually, all you wrote is more or less fair, but usually you finally learn how to deal with all of them. But bugs might float up when you implement some really complicated logic - there, where behavior and result are hard to predict or manage.
Good (thumb up)
A good list for any new or junior developer to review.
Great one I just want to emphasize that requirements are always non bug free so even if code is bug free it's non bug free by definition
Great point. Certainly, requirements cannot be taken as gospel. Rather, they must be understood and integrated. Where there are contradictions and ambiguities, those must be questioned and either settled or the requirements changed. Thanks for your comment.
Thanks for sharing! Will use your list next tine
Tldr: hire a qa, write tests and check your code.
Thanks for identifying the error in the ‘off by one’ code. I have corrected the error.