I have an idea kicking around I'd like to subject to your collective scrutiny:<p>1. source code has competing audiences with conflicting goals
-a) the machine, with the goal of accurately performing its function
-b) subsequent devs, with the goal of communicating organization, workflow, pitfalls, limitations, context, etc.<p>2. high level languages, type systems, code comments, design patterns, etc. all aim (in part) to alleviate the problem but leave ample room for human error<p>3. communication with a fellow human developer by means of a programming language is not a fundamentally different activity than any other form of written communication, and is made more difficult by its dual-audience<p>4. (most) software development still requires strong written communication skills<p>=> (most) devs who struggle to communicate with other humans will (more frequently) implement behaviors that other humans struggle to fully appreciate/grok and therefore struggle to maintain/modify.