logo

drewdevault.com

[mirror] blog and personal website of Drew DeVault git clone https://hacktivis.me/git/mirror/drewdevault.com.git

Complicated.md (3472B)


  1. ---
  2. date: 2017-09-08
  3. layout: post
  4. title: Killing ants with nuclear weapons
  5. tags: [philosophy]
  6. ---
  7. Complexity is quickly becoming an epidemic. In this developer's opinion,
  8. complexity is the ultimate enemy - the final boss - of good software design.
  9. Complicated software generally has complicated bugs. Simple software generally
  10. has simple bugs. It's as easy as that.
  11. It's for this reason that I strongly dislike many of the tools and architectures
  12. that have been proliferating over the past few years, particularly in web
  13. development. When I look at a tool like Gulp, I wonder if its success is largely
  14. attributable to people not bothering to learn how Makefiles work. Tools like
  15. Docker make me wonder if they're an excuse to avoid learning how to do ops or
  16. how to use your distribution's package manager. Chef makes me wonder if its
  17. users forgot that shell scripts can use SSH, too.
  18. These tools offer a value add. But how does it compare to the cost of the
  19. additional complexity? In my opinion, in *every case*[^1] the value add is far
  20. outweighed by the massive complexity cost. This complexity cost shows itself
  21. when the system breaks (and it will - all systems break) and you have to dive
  22. into these overengineered tools. Don't forget that dependencies are fallible,
  23. and never add a dependency you wouldn't feel comfortable debugging. The time
  24. spent learning these complicated systems to fix the inevitable bugs is surely
  25. much less than the time spent learning the venerable tools that fill the same
  26. niche (or, in many cases, accepting that you don't even need this particular
  27. shiny thing).
  28. Reinventing the wheel is a favorite pastime of mine. There are many such wheels
  29. that I have reinvented or am currently reinventing. The problem isn't in
  30. reinventing the wheel - it's in doing so before you actually understand the
  31. wheel[^2]. I wonder if many of these complicated tools are written by people who
  32. set out before they fully understood what they were replacing, and I'm *certain*
  33. that they're mostly used by such people. I understand it may seem intimidating
  34. to learn venerable tools like make(1) or chroot(1), but they're just a short man
  35. page away[^3].
  36. It's not just tools, though. I couldn't explain the features of C++ in fewer than
  37. several thousand words (same goes for Rust). GNU continues to add proprietary
  38. extensions and unnecessary features to everything they work on. Every update
  39. shipped to your phone is making it slower to ensure you'll buy the new one.
  40. Desktop applications are shipping entire web browsers into your disk and your
  41. RAM; server applications ship entire operating systems in glorified chroots; and
  42. hundreds of megabytes of JavaScript, ads, and spyware are shoved down the pipe
  43. on every web page you visit.
  44. This is an epidemic. It's time we cut this shit out. Please, design your systems
  45. with simplicity in mind. Moore's law is running out[^4], the free lunch is
  46. coming to an end. We have heaps and heaps of complicated, fragile abstractions
  47. to dismantle.
  48. [^1]: That I've seen (or heard of)
  49. [^2]: "Those who don't understand UNIX are doomed to reinvent it, poorly."
  50. [^3]: Of course, [*"...full documentation for make is maintained as a GNU info page..."*](https://xkcd.com/912/)
  51. [^4]: Transistors are approaching a scale where quantum problems come into play, and we are limited by the speed of light without getting any smaller. The RAM bottleneck is another serious issue, for which innovation has been stagnant for some time now.