Comment by lazyjones

8 years ago

Nice story (the first one) about the "top-down" approach, where you discover new complexity and choices at every level. Note how the discovery of new detail ends when you choose to use existing building blocks with known properties, based on experience (e.g. screws instead of examining which of the many possible ways of attaching parts would be most suitable). How simple this would be if you could buy pre-cut boards suitable for stairs at just the right angles and with holes drilled at optimal positions!

Standardising and having a limited set of (appropriate, well-understood) choices at every level is key to building complex projects. Which is probably one of the reasons why software quality isn't really improving...

When it comes to my day job building software I choose opinionated languages and libraries because they limit the choices I have to make which makes me more productive.

But when I'm playing around in my off time I employee alternative ways of doing things with unusual or niche languages so I can explore details in more depth.

  • Same here. But I find code reuse problematic: people tend to build large libraries with complex APIs and too many options (typically also lacking sane defaults) instead of small, focused code "blocks" that can be well understood and tested and do one single thing very well. It's like having to fasten a nut and being offered 3 types of swiss army knives as your available tools. Same with operating systems, web development frameworks etc. ... Too many options, too little thorough understanding, stable interfaces.