Holding a Program in One's Head (2007)
He&#x27;s close to how I think about it, but not quite there.<p>On regularity:<p>Take the handling of what is false-y. In Ruby only nil and false are false-y. If you use an &amp;&amp; the only way it can come out false is if one of the two sides is nil or false. Python, on the other hand, tries to treat emptiness as false-y. It leads to irregularities because assumptions are broken. The clearest example was that the exact second of midnight was considered false-y. Fixed in 3.5 if memory serves.<p>On restrictiveness:<p>I agree with PG that a pro working on a project with a small set of other pros prizes unrestrictive languages. On large projects it is usually the opposite. This is why Go is great for Google, but Ruby is great for startups.<p>On conciseness vs readability:<p>Regex is concise, but it is shit at readability. The reason conciseness is less important than readability is that conciseness is about the <i>character count</i> while readability is about <i>the time it takes to understand</i>. They&#x27;re related, but only to a point. Ruby is much more concise than assembly, and that helps its readability, but further gains in conciseness don&#x27;t really impact speed to understanding.<p>Regex is fine for a grep of your own filesystem because you&#x27;re the one writing it so you know you understand it. But for complex form validation it&#x27;s usually not the first tool I reach for because I tend to assume that the person that comes in behind me might not know more than the basics. Even when I do use them, I break them up as strings into variables that name what they do before concatenating them.