TPP Topic 6: Your Knowledge Portfolio

steadbytes profile image Ben Steadman ・2 min read

This post originally appeared on steadbytes.com

See the first post in The Pragmatic Programmer 20th Anniversary Edition series for an introduction.

Challenge 1

Start learning a new language this week. Always programmed in the same old language? Try Clojure, Elixir, Elm, F#, Go, Haskell, Python, R, ReasonML, Ruby, Rust, Scala, Swift, TypeScript, or anything else that appeals and/or looks as if you might like it.

Not long after reading this chapter for the first time, I started learning Clojure using Daniel Higginbothams excellent book Clojure for the Brave and True. I have some past experience with functional Lisps (Scheme and Racket) and have dabbled with Haskell however Clojure caught my attention due to bringing the power of the JVM to a well designed, functional Lisp as well as its first class support for Concurrency. Feel free to take a look at my progress through Clojure for the Brave and True on GitHub!

Challenge 2

Start reading a new book (but finish this one first!). If you are doing very detailed implementation and coding, read a book on design and architecture. If you are doing high-level design, read a book on coding techniques.

Recently at work I have been part of several new projects, all of which have been complex, distributed systems which must fit in to (or at least communicate with) an existing system. In an attempt to keep complexity of these systems to a minimum, I read through A Philosophy of Software Design by John Ousterhout. A short, but excellent and well written book that addresses:

The fundamental problem in software design, which is managing complexity.

I may do a more detailed book review, but I was able to utilise much of the learning in these new systems. To highlight a few:

  • Modules should be deep
  • Define errors out of existence
  • Design it twice
    • Emphasis due to how useful this is
  • Consistency

Challenge 3

Get out and talk technology with people who aren’t involved in your current project, or who don’t work for the same company. Network in your company cafeteria, or maybe seek out fellow enthusiasts at a local meetup.

Tying in nicely with Challenge 1, I recently attended London Clojurians Clojure Dojo meetup in London. The meetup is extremely welcoming to anyone of any ability (I had done all of about two hours of Clojure) and was a great way to get stuck in and learn from others.


markdown guide

Eh, better yet just find an environment that is specifically built on and geared towards overcoming (and thus first: acknowledging and accepting) your own limitations regardless of how "painful" that might be to you. You know, like TMSR.

In my past 2 years of working on Eulora I learnt more than 3 years of PhD studies and all of it simply because "I need this" rather than because of making lists or setting up challenges or whatever. For that matter just following the daily log of TMSR (which is quite public for all that does) is a "challenge" for most from outside and the contents comprise anything from history to cryptography to politics and physics and anything in between. It's intense though and not fashionable, granted.