logo

drewdevault.com

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

Use-the-right-tool.md (3064B)


  1. ---
  2. date: 2016-09-17
  3. # vim: set tw=80
  4. layout: post
  5. title: Using the right tool for the job
  6. tags: [philosophy]
  7. ---
  8. One of the most important choices you'll make for the software you write is what
  9. you write it in, what frameworks you use, the design methodologies to subscribe
  10. to, and so on. This choice doesn't seem to get the respect it's due. These are
  11. some of the only choices you'll make that *you cannot change*. Or, at least,
  12. these choices are among the most difficult ones to change.
  13. People often question why TrueCraft is written in C# next to projects like Sway
  14. in C, alongside KnightOS in Assembly or sr.ht in Python. It would certainly be
  15. easier from the outset if I made every project in a language I'm comfortable
  16. with, using tools and libraries I'm comfortable with, and there's certainly
  17. something to be had for that. That's far from being the only concern, though.
  18. A new project is a *great* means of learning a new language or framework - the
  19. only effective means, in fact. However, the inspiration and drive for new
  20. projects doesn't come often. I think that the opportunity for learning is more
  21. important than the short term results of producing working code more quickly.
  22. Making a choice that's more well suited to the problem at the expense of comfort
  23. will also help your codebase in the long run. Why squander the opportunity to
  24. choose something unfamiliar when you have the rare opportunity to start working
  25. on a new project?
  26. I'm not advocating for you to use something new for every project, though. I'm
  27. suggesting that you detatch your familiarity with your tools from the
  28. decision-making process. I often reach for old tools when starting a new
  29. project, but I have learned enough about new tools that I can judge what
  30. projects are a good use-case for them. Sometimes this doesn't work out, too - I
  31. just threw away and rewrote a prototype in C after deciding that it wasn't a
  32. good candidate for Rust.
  33. Often it does work out, though. I'm glad I chose to learn Python for MediaCrush
  34. despite having no experience with it (thanks again for the help with that,
  35. Jose!). Today I still know it was the correct choice and knowing it has hugely
  36. expanded my programming skills, and without that choice there probably wouldn't
  37. have been a Kerbal Stuff or a sr.ht or likely even the new API we're working on
  38. at Linode. I'm glad I chose to learn C for z80e, though I had previously written
  39. emulators in C#. Without it there wouldn't be many other great tools in the
  40. KnightOS ecosystem written in C, and there wouldn't be a Sway or an aerc. I'm
  41. glad I learned ES6 and React instead of falling back on the familiar Knockout.js
  42. when building prototypes for the new Linode manager as well.
  43. Today, I have a mental model of the benefits and drawbacks of a lot of
  44. languages, frameworks, libraries, and platforms I don't know how to use. I'm
  45. sort of waiting for projects that would be well suited to things like Rust or
  46. Django or Lisp or even Plan 9. Remember, the skills you already know make for a
  47. great hammer, but you shouldn't nail screws to the wall.