Friday, April 10, 2020

Read it or Throw it #216

  1. Vim and Emacs can be BFF
    My blog’s post trying to settle the “vim vs emacs” never-ending dispute.
  2. How Amazon Web Services Uses Formal Methods
    A very impressive article (from 2015) that reviews how Amazon used TLA+ on various complicated infrastructure projects. The nature of the described cases is high-scale complex distributed-systems. Such projects are notoriously known to be difficult to get right.
    Often they introduce evasive, intractable bugs. TLA+ assisted with avoiding many issues from the first place.

    Highly recommended reading!
  3. Why Don’t People Use Formal Methods?
    If you’ve found the previous article interesting, you’re encouraged to read this article too. I’ve added “Learning TLA+” to my TODO list :)
  4. Expertise is ‘Just’ Pattern Matching
    An awesome text giving a different angle about what expertise is. It argues that a core part of developing expertise on something is having a lot of patterns and being able to classify inputs into known patterns. The article fortified my own personal experience, especially over the last year.
    A very good read!
  5. Designing the Perfect Practice Loop
    In continuation of the preceding item is another eye-opening article by Scott H. Young about the importance of feedback loops. It’s not enough to feed yourself with patterns/data/exercises but being able to learn from mistakes by having good feedback is paramount. Otherwise, we may not make the desired progress we’d like to.
  6. I’m not feeling the async pressure
    A nice piece on how to make concurrent code more resilient by designing it with back-pressure in mind. If you liked the article, you should definitely consider reading the classic Release It! book.
  7. Math is your insurance policy
    The article argues that menial programming tasks will be replaced by AI and that future programming-languages will drift toward a more declarative-style paradigm. It’s a nice read and a wake-up call for any developer that does mostly a commodity job.
    However, I don’t see any radical changes in the foreseeable future. I think that that big changes eventually take more time than anticipated.
  8. The most important skill a programmer can learn
    How often do you clean up your code? This piece covers the importance of deleting redundant code or avoid writing unnecessary ones from the first place. See further The art of destroying software talk.
  9. System76
    I wasn’t familiar with the System76 brand until recently. The company manufactures its own laptops (more about that here) The machines Operating-System is Ubuntu, or Pop!_OS which is a Linux distribution developed by System76 itself.
  10. Recommended Book: Get Programming with Haskell
    Working on Rust made me “love the Type”. I wanted to dig more into the essence of Type-driven development and I figured that I must know the basics of Haskell. I doubt that I’ll ever write Haskell code for production, but learning a Haskell will expand everyone’s mental model for sure. There are many concepts that exist in Rust (that’s not a coincidence since Rust has been heavily influenced by Haskell), but seeing them in another language helps to strengthen understanding. You can skip the parts that cover libraries and tools and focus only on the abstract/mathematical content.
If something is worth doing, it is worth doing poorly until you can learn to do it well“ - Zig Ziglar