Signs that you're a bad programmer
The author lists the following as a symptom of being "unable to reason about code":"5. 'Bulldozer code' that gives the appearance of refactoring by breaking out chunks into subroutines, but that are impossible to reuse in another context (very high cohesion)"I disagree with this.  The purpose of breaking out code in to subroutines isn't only for code reuse.  If you don't break out code in to subroutines, at some point your code is going to become unwieldy and difficult to read.I try to stick to the rule of having each subroutine consist of no more than a page of code (so that each subroutine can be seen all at one time, without needing to scroll).  Often that leads me to break up the subroutine in to many other subroutines.  This improves readability greatly and makes it much easier to reason about the code.  If any of the subroutines I break my code out in to happen to be reusable, that's just icing on the cake, not a necessity.