Year summary - books I recommend
Tags: learning, programming
Published: 2024-01-06 17:07:09

## Year summary
It is good time these days for year summary. I would like to recommend books which I read in 2023 and which I believe
made me better engineer. I had more books in my hands but these one I find to be most valuable from my point of view.

## "Five lines of code" by Christian Clausen
[Book link](https://www.manning.com/books/five-lines-of-code)
This is great book about refactoring. Very clear tips on how to start and where to go with the refactoring process. I think the most
valuable for me are simple tips like: "do not use switch statement", "do not use abstract classes" and my favourite "avoid inheritance".
All this tips are coming with TypeScript code showing the practical appliance of the refactoring rules. Actually, as a side effect, I got interested in TypeScript after reading this book. I very much like cognitive constraints described which are related to every human and the way they affect our code understanding.
In the past I often had troubles with understanding the code which spread across many classes like with 4-level of inheritance. Now I know this is not my low level of expertise but badly written code.

## "Effective software testing" by Mauricio Aniche
[Book link](https://www.manning.com/books/effective-software-testing)
Systematic testing approach here. One can use this book as checklist of which test design techniques to use and in which order. This dismisses the uncertainity we often have when dealing with new testing problem. Requirement based testing, structural testing, contract based testing explained.
New thing for me was properties based testing which is part of this book as well. I was somehow not aware about this kind of approach before.
I very much like and agree with author encouraging to be systematic in this area.

## "Functional thinking" by Neal Ford
[Book link](https://www.oreilly.com/library/view/functional-thinking/9781449365509/)
Functional programming doesn't seem to be common these days. At least not for everyone just as it was not familiar to myself. I found out about about the set of basic functions which are there in all languages which support functional programming: filter, map and reduce. Currying and memoization as well as optimization which 
is there behind built-in functions is explained. Author is supporter of applying specific programming paradigm in certain areas which I find very useful and which I often see in other books: write functional code in the core of your application and be more imperative (oo) when going to the edge of the system (controllers, UI).
This turned out to be very important book for me: I started to think about functions as something aside of object oriented programming and I use them conciously since then.
Finally, I know what I exactly have in my functional toolbox and when to lean towards functional paradigm.

## "Code that fits in your head" by Mark Seemann
[Book link](https://www.pearson.com/en-us/subject-catalog/p/code-that-fits-in-your-head-heuristics-for-software-engineering/P200000009593/9780137464357)
This book is the most recent one on my virtual bookshelf. It turned out to be kind of summary of all 3 previous ones.
It talks about cognitive constraints, proper testing approach and it also mentions functional paradigm when coding the core of the application.
However, it has additional advantage, at least for me. Author has the ability of expressing his thoughts in very clear way and so it is like listening to the expert in the office at his desk, getting answers on how to deal with specific problems properly.
The are numerous of them addressed there: how to start application from the scratch, when to send feature branch to review, what to write in commit message, how to write the class, method so that it is clear. I very much like fractal architecture proposed by the author.
Also, teamwork aspects like code reviews are mentioned. There is great piece of information about human short term and long term memory and how does it affect our code understanding. All of these aspects are explained basing on the code of restaurant application. 
This is most important book I read last year and so I very much recommend it.

## What next?
I am now looking more towards devops related stuff, I plan to take a look at very much recommended ["The DevOps Handbook" by Gene Kim and others](https://www.barnesandnoble.com/w/the-devops-handbook-gene-kim/1138718562). However, maybe some of you also have recommendations of important sources of information from IT area?