The developer job titles are essentially: Junior, Developer, Senior, Principal, then I guess you have Architect which could be seen as a rank above that. Colin is a Principal. In this blog, I document his struggles with simple Junior-level concepts. Using simple AND and OR logic is a prerequisite to being a developer in the first place.
Let’s say you have 4 possibilities which we will label with the letters A, B, C, D and we have some code that checks a variable is one of these types (or not).
He wanted to write some logic that says “Not A or B”. In the programming language C#, “||” is the logical OR, and “!” is NOT which inverts it (so “true” goes to “false”, “false” goes to “true”). So we can denote “Not A or B” as !(A||B). Here it is as a “Truth Table” of how it should work.
| Item is | (A||B) “A Or B” | !(A||B) “Not A or B” |
| A | true | false |
| B | true | false |
| C | false | true |
| D | false | true |
but instead, Colin wrote !A || !B (“Not A Or Not B”).
| Item is | !A “Not A” | !B “Not B” | !A || !B “Not A Or Not B” |
| A | false | true | true |
| B | true | false | true |
| C | true | true | true |
| D | true | true | true |
So A returns true because it is not B. B returns true because it’s not A. C returns true because it is not A. D returns true because it is not A. So the statement is always true.
A developer points out that it’s nonsense so he has another go. His new method was
A || !B || C || !D
“A Or Not B Or C or Not D”. It’s getting really confusing now, but also returns true for everything.
| Item is | A | !B | C | !D | A || !B || C || !D |
| A | true | true | false | true | true |
| B | false | false | false | true | true |
| C | false | true | true | true | true |
| D | false | true | false | false | true |
I couldn’t believe he has come up with more nonsense and still not tested it. I didn’t want to tell him exactly because he should be able to tell that he has done it wrong if he glances at that logic, so I left a simple comment along the lines of “this won’t work”.
Later, after I got back from lunch, I saw that I had a missed call. So I send him a message “If you are calling about my comment, just test your method”.
He calls me back and starts explaining the requirement. I said that I don’t really need to know, I just know the method wasn’t what he wanted. I ask him to look at the method again. It took him 30 seconds or so before he spotted it.
Colin: “Why did I type the exclamation mark? I must have copied and pasted it. I’ll correct this line and you can review it”.
Me: “Aren’t you going to test it?”
Colin: “No, this will work this time”
Me: “Well, you thought the last two times would work. I recommend you look at the logic a bit longer if you’re not going to test it”.
He looks at it for 10 seconds.
Colin: “Oh there’s another exclamation mark. I’ll change that too”.
He got it right with a bit of supervision, but I don’t think he had much intention of testing it.