Goodreads summary: Richard Dawkins's essays are an enthusiastic testament to the power of rigorous, scientific examination, and they span many different corners of his personal and professional life. He revisits the meme, the unit of cultural information that he named and wrote about in his groundbreaking work The Selfish Gene. He makes moving tributes to friends and colleagues, including a eulogy for novelist Douglas Adams; he shares correspondence with the evolutionary biologist Stephen Jay Gould; and he visits with the famed paleoanthropologists Richard and Maeve Leakey at their African wildlife preserve. He concludes the essays with a vivid note to his ten-year-old daughter, reminding her to remain curious, to ask questions, and to live the examined life.
GoodReads summary: You should learn a programming language every year, as recommended by The Pragmatic Programmer. But if one per year is good, how about Seven Languages in Seven Weeks? In this book you'll get a hands-on tour of Clojure, Haskell, Io, Prolog, Scala, Erlang, and Ruby. Whether or not your favorite language is on that list, you'll broaden your perspective of programming by examining these languages side-by-side. You'll learn something new from each, and best of all, you'll learn how to learn a language quickly.
Application composition may lead to microservices -- which is good -- but microservices require some ideas about how applications "talk" between them over the wire (protocols and such) which you don't need to start with.
When we were discussing the magical number seven, I mentioned that it made more sense to actually call the functions in sequence instead of each calling the next. That's basically a "function composition", one thing you can also do with your applications.
In this day and age, when everything has a graphical interface, does it still makes sense to add command line options to your application? In fact, it does.
Do not ignore the power of configuration files.
One thing you must learn is how to break your project into smaller libraries, to avoid doing rounds to deal with "the same, but a bit different".
On a previous life, to understand how a system behaved, I added a ton of metrics: how fast things were going in, how fast things were going out, how many things were in the middle, how many the job processed... Not doing it so makes me feel... naked.
Let say you need more performance on your application. You may be tempted to look at your code and think "How can I keep this same logic and still remove a few cycles, so things seem to go faster?" Well, if you want performance, you need to change your logic.
A lot of projects assume that you'll put things with the same functionality in the same place, no matter what data they deal with. This makes things harder to break apart later.