As we have reached 2017, I think it is time to remember some things I've learned on 2016. All links and information on this blog post are my sincere opining here does not generate any form of revenue nor any other advantage to me.
Getting deeper in Clojure
One of the things I noted last year was that I lacked knowledge of some advanced concepts in Clojure. The JVM-powered LISP may be threatening to tackle, but once you get the basics, you find yourself productive. But after getting the basics, how do you organize your code ? How do you deal with mutable parts (like databases) on your code ? How to use Clojure async library ? When to use lists and when to use vectors ? And sometimes, you will need to write or debug macros, how to understand them better ? Even macros being sometimes described as dangerous, you'll need them at least to understand. So two books I've read about Clojure were "Mastering Clojure Macros" and "Clojure Applied" by Alex Miller (and I even wrote a blog post reviewing this last one), so if you think that you're ok with the basics (I have a blog post about dealing with the basics too) and want to dive deeper on building applications in Clojure, I think these two are great books for this purpose.
Developing some missing technical skills
Even after 6 years working as a Software Engineer/Developer, I think I miss some important skills like performance analysis. I had to do some kind of analysis on this area this area and found out that I've been using the Streetlight anti-method too much, and a colleague suggested me reading the book Systems Performance by Brendan Gregg. It teaches you some methodologies and some ideas on how to investigate different resources on a computer: application level, CPU, memory, disk and network. It shows how to not fall into pitfalls like only using top to check on a machine saturation.
It also tells about the USE Method, a technique to check for Utilization, Saturation and Errors for a resource to find performance problems.
I've took some time to
read listen to some books (I still find weird to say that I read I book that I actually listened).
One I really liked was Delivering Happiness, by Zappos former CEO Tony Hsieh . It shows how he build Zappos, how he got some suppliers to accept being sold online and how he build the company culture. One of the coolest things about Zappos is that they publish every year a culture book with quotes from their employee that aren't edited (except for grammatical correction). I strongly believe that a company culture isn't on a wall, an internal website or a leaflet that you deliver to new employees, but on actions and words that employees, managers and directors take everyday. I think this was a very bold move to ensure that you're keeping the culture.
Another book that I really liked was Creativity Inc. Written by Pixel executive Ed Catmull (which I had the pleasure to "meet" on Steve Jobs Biography book that I
read listened in 2016), it tells how the creative process works there, how they discuss ideas and how they take risks. I really liked how they tackle mistakes: they understand that they're part of doing something new, and they're also aware that ideas aren't good at first, but after an iterative process, candid feedback and rework a flawed story (or idea) finds its line.
The Minecraft book and Power of Habit were also two other books that I had the pleasure to read this year. The first one tells the story of Marcus "Notch" Persson, and how he build Minecraft. The second book tells why habits exist and how they can be changed: from Martin Luther King and the Civil Rights Movement, Target stores and how they predict purchasing habits, Alcoa CEO and Safety Concerns and how a NFL head coach made a unpromising franchise one of top teams in the league.
I think this book made me more curious to learn more about Psychology and how the brain works, but this is a subject for the next topic.
- Delivering Happiness
- Creativity Inc.
- Minecraft: The Unlikely Tale of Markus "Notch" Persson and the Game that Changed Everything
- The Power of Habit: Why We Do What We Do in Life and Business
Personal Development books
I didn't write a post like this last year, but one of the books that I've
read listened last year that I most enjoyed was Soft Skills by John Sonmez and one of the tips he gave is on how to improve yourself not just as a programmer/engineer/developer but as a person. And after reading that I discovered that I had too much to learn indeed.
One of the books recommended was a really classical one: "How to win friends and influence people" by Dale Carnegie. The book starts telling you how to read it. It tells you to read every chapter twice and for you to explain what you have learned to someone else and ask them to monitor how you are practicing what you've learned. One of the great teaching I got from the book was "Be hearty in your approbation and be lavish in your praise", it means that you should use your heart you complement something. But when you have to do some criticism, do it when necessary and be mindful to consider the other side reasons, plus make them see what is wrong instead of just enforcing it.
Another book I've read and liked was "Pragmatic Thinking and Learning": it shows you how your brain works, hence how to learn, how to tackle problems and a different way to study. I think skill acquisition is a important skill: by reading this book you discover that reading books cover-to-cover can be a naive approach on skill acquisition.
I also like to read fun books: I really liked Periodic Tales by, a book that tells you the history and how some elements were discovered and used througout the ages. I'm a great fan of science books and I like to learn about science trivia.
Learning new things
In 2015 I started learning how to use Emacs and in 2016 I kept learning more about it: I followed Mike Zamansky channel on youtube which tells you some good tips about packages and techniques on Emacs. I also chose org-mode as my main tool for taking notes while reading.
Another library that I've learned how to use and its powers was Finagle. Built by Twitter, it intends to be an extensible RPC system for the JVM. It implements several protocols like HTTP, Thrift, MySQL, Redis and has several modules that implement some resilience strategies like circuit breaking, client side load-balancing, budgeting and retrying, that you can use with any of the protocols. One of the great advantages of such approach is that it can give a small rest to a troubled part of your system (with exponential retrials) so it can recover. The retry may also help when only a node is down but others are up (and a load balancers on server side does the round robin) and the budgeting may avoid you retrying too much (and for the server side to recover. It is a must-have piece when you have some relevant load on your applications and you have a multi-service architecture.
2016 was a great year on many aspects: I was able to apply many of things that I've learned here on my daily routine, I've also deepened some concepts on Clojure and Emacs. Hope in 2017 that I blog more about the things I learned more consistently.
Feel free to recommend any book or article on this subject and a happy 2017!