I are can read to.

So when ever I fly somewhere I try to read an entire book.
Additionally, most every night I try to do something productive, sometimes that thing is reading.
I figured I'd share some of the things I've been reading and some quick thoughts.

Dragon Teeth: A Novel

- Michael Crichton - Harper; First Edition - November 28, 2017

Reading: April 3, 2021 - April 29, 2021

Purchase on Amazon

So I've read most every Michael Crichton novel written, and what I really wanted was a copy of Jurassic Park to re-read. However, the used book store I came across did not have any copies. What they did have was Dragon Teeth.

Dragon Teeth feels like classic Crichton. Without revealing anything - it follows the same pattern most of his books follow. He does a lot of research about something cool and writes a book about it.

This one follows William Johnson follows a paleontologist west in 1867. Its a ride through the American west full of dangers and rewards. Its like a mix between a western and Jurassic Park.

The novel itself includes some historical figures, though the accounts are all fictitious. That said it is still a fun journey and a pretty quick read.

If you're a fan of Crichton - I recommend this - but then again if you're a fan you've probably already read this!

Bread Baking for Beginners: The Essential Guide to Baking Kneaded Breads, No-Knead Breads, and Enriched Breads

- Bonnie Ohara - Rockridge Press – October 23, 2018

Reading: March 15, 2021 - April 1, 2021

Purchase on Amazon

I received this book as a birthday gift and part of my foray into bread baking. Basically, I think I read my bread baking books in reverse order!

While The Bread Baker's Apprentice, went into all the scientific detail to why and how bread is made, which was AWESOME, this basically covered making some bread.

Bread Baking for Beginners essentially has 4 recipes in it, for no-knead bread, kneaded bread, enriched bread, and sourdough bread. These four base recipes are then elaborated on in following recipes. Eg. Add some raisins. Just kidding not that simple, but close. I've yet to try the recipes as I've not yet had an afternoon to do so, but plan on at least doing the no-knead bread, kneaded bread, and the enriched bread recipes to see how they turn out.

I plan on following the recipes as provided and see what the difference is between these and the recipes and techniques from The Bread Baker's Apprentice.

If you're just starting out and want to put something in the oven that turns into bread. This is a really easy place to start. Also it made me realize if I want to write another book quickly, I can just find something that follows the same recipe nearly every time and copy / paste.

Think Again: The Power of Knowing What You Don't Know

- Adam Grant - Viking – February 2, 2021

Reading: March 4, 2021 - March 15, 2021

Purchase on Amazon

I picked this up on a whim - a new book - in a used book store. My interest was piqued by the hook on the title - "The Power Of Knowing What You Don't Know". Which is something that I always wonder about. 'What in this situation am I unaware of?' This can be anywhere from when I'm playing games to at work and it makes me wary of what is going on.

So because of my continual questioning I picked this up. I would say that the first chapter was fantastic! It outlines why rethinking your opinions and what you think you know is good to do. Even if something you know you know is correct, over time circumstances can change and what is known can change. Being upto date does not mean you're changing your mind, or flip flopping on issues. Rather it shows you're open to change, that you want to be correct rather than needing to be right, and that your opinions, rather than your values do not define you.

Also great was the examples around the Dunning-Kruger effect. That is essentially being so bad, or new at something, you assume you're good at it because you simply lack the skills to notice how inadequate your skills are. It points out that just being aware of this can keep you off 'mount stupid' where you're at the pinnacle of confidence before you start to realize what you don't know.

Second to this is essentially embracing imposter syndrome. Where you don't think you're good enough at something or that you've essentially tricked other people into giving you your role - what ever that may be. That if you can recognize this feeling, you can dig into why you feel that way, and start to ask questions that reveal unknown unknowns in order to learn about them. This helps you grow in your knowledge as well as give you confidence.

I would say this rings true to me. When I changed from hardcore mechanical engineering and data analysis into computer science I kept thinking to myself "do I know what I'm doing? I don't have a degree in this..." So I researched what should I know? And where there were holes I tried to fill them with courses through MIT open courseware, Coursera, Udemy and tons of reading... see below!

Overall, I would 100% encourage reading this and embrace being wrong at times in order to grow in your knowledge.

The Handmade's Tale

- Margaret Atwood - Knopf Doubleday Publishing Group; 1st Anchor Books edition (March 16, 1998)

March 4, 2021

Purchase on Amazon

This was basically a book I picked up to pass some time on the plane. I'd seen the trailers and commercials for the TV show and people seem to like it. I've been reading a ton of technical books and non-fiction so this sounded like a fun change of pace.

I was not disappointed. Atwood paints a very grim picture of a dystopian United States Of America and uses it to highlight unchecked sexism. I'll leave my review of it there and say that if you've been thinking about reading this - enjoy dystopian novels (1984, fahrenheit 415, etc.) - I'm sure you'll enjoy it.

To Sleep in a Sea of Stars

- Christopher Paolini - Tor Books; Illustrated edition (September 15, 2020)

February 8, 2021 - March 3, 2021

Purchase on Amazon

I read about this as one of the best Science Fiction books of 2020 and then actually received it for Christmas! Yay and thank you!

So the first little bit of this book pays a LOT of homage to Aliens and for a bit I thought it could be in the same universe. Sadly though it was not. All the same it was still pretty good, though a swarm of xenomorphs vs the soft blade would have been quite a thing.

This follows the premise that the protagonist, Kira, finds an alien life form that performs quite like the symbiote from the Spiderman Universe except that it can keep her alive in space. Most of the story line revolves around learning how to use the suit. Slowly as Kira gains skill with the suit the opposition grows in strength to the same measure. It has a cliff hanger ending and has obvious follow up novels in the queue.

At the onset of the book I would have 100% encouraged anyone who is a fan of science fiction to pick this up! However, the story dragged on a little bit and felt a little cliche at times. Despite that it was still quite a fun read and kept me turning the pages ... like 800 or something of them. If you're a huge fan of science fiction and some cool imaginative weapons and ships - you'll probably enjoy To Sleep In A Sea Of Stars.

The Bread Baker's Apprentice, 15th Anniversary Edition: Mastering the Art of Extraordinary Bread [A Baking Book]

- Peter Reinhart - Hardcover – Illustrated, September 6, 2016

Reading: January 1, 2021 - Feb 7, 2021

Purchase on Amazon

On the heels of our Great British Baking Binge I thought that it would be fun to try to bake some bread. But, I was also very curious about why bread is made the way it is, why things go in it that go into it, why you have to let it ferment and proof and what is going on during these times. Basically I wanted to know the nerdy things about baking bread.

And boy oh boy did The Bread Bakers Apprentice deliver. It did not go into the chemistry on a very micro level but kept things simple enough for the layman - me. And that was awesome. I now know about the 12 steps of baking bread and what is going on during each of these different steps and why you can do each of them.

The more interesting aspect is that Reinhart does not want to just give you recipes but rather a feel for making bread so you can experiment and play. I would say in this regard he has succeeded! I'm confident given ingredients I could whip up a bread that is pretty tasty off the top of my head.

That said - there are quite a few fantastic recipes - I never thought I'd actively read through recipes like I would a novel - but here we are. Each recipe is preempted by an explanation and they go a long way towards understanding.

Since reading this book I'd say I've made 4 or so breads, each one getting better and better - with only 1 bread disaster - other people said it was fine - but we're not going for fine :P. So will I continue to bake away? Yes. Would I suggest this book? Also yes!

The Plague

- Albert Camus - Vintage – May 7, 1991

Reading: December 24, 2020 - December 31, 2020

Purchase on Amazon

I got this for our Jolabokaflod celebration and it was pretty great! I would say right now it is a bit on point with the whole Covid-19 epidemic raging.

Basically this follows the town of Oran in Algeria under a fictional outbreak of the plague. It starts of simple enough and then just devolves into a full blown epidemic. Should you read this - sure - it does hit a bit close to home right now...

Basically a TON of the same things we see happening right now with Covid occur in the book. People doubting the disease exists, people willingly not taking precautions, doctors not knowing what to do, and hospitals overflowing. Really close to home, and a great read and view into the human condition around epidemics physically, emotionally and mentally.

Agile Software Development, Principles, Patterns, and Practices 1st Edition

- Robert Martin - Hardcover – October 15, 2002

Reading: November 4, 2020 - December 30, 2020

Purchase on Amazon

So I purchased Clean Architecture explicitly because I wanted to learn about A. System Architecture, and B. Solid Principles. So when I looked at the index and it had the SOLID principles in there I was like "good."

But when I got to the SOLID chapters it basically said "this is an overview - go learn about the SOLID principles somewhere else - for example - 'Agile Software Development, Principles, Patterns and Practices." So I asked our super nice HR lady to use some of my professional development and education budget for exactly that!

First of all - If I was going to read this again I'd get the more or less updated version - Agile Principles, Patterns, and Practices in C# but as it stands instead of reading about SOLID principles I read about SOLDI principles as no one had yet pointed out to Martin that he had an acronym on his hands.

So how was it? Pretty good but a little bit dated perhaps. The core theme of this book revolves around the Agile process and Extreme Programming! It is laden with examples of how paired programming helps, being open to changes in requirements, and building out a process to build software by. And that is great - everyone should know about these things and this is a pretty good introduction to these things.

But my main reason for reading this was the canonical SOLID definitions - and in that regard it did not disappoint at all! Additionally there are quite a few Software Development Patterns outlined (Template vs Strategy, Factory Patterns, Singleton Objects, etc. - Good info / review!)

So here we go - SOLID (SOLDI) principles! Enjoy my notes!

Single Responsibility Principle (SRP) - Originally I thought that this simply meant that things do one thing. That is methods, functions, classes, etc. should only serve one purpose and do one thing. While this holds true it is a bit more nuanced than I realized. In that each component should only be beholden to one owner. That owner can be another function, a class, something within the program or something external to the program such as a stakeholder, or a team of people, or some wayward product manager. This means that there is only one reason for the thing to ever to change. What you don't want is to have two owners that you're serving as their needs could diverge and a change for one owner could negatively affect the other.

Open / Closed Principle (OCP) - Going into Clean Architecture and ASDPPP I could not have adequately defined this for you at all! Go books! What we have here is that you want to have your program closed for modification but open for extension. Way to define the thing by what the thing is! Okay - so what does closed for modification mean? It basically means that in theory you don't get to modify your code after you're done with its functionality. It is finalized. But this whole thing is about being agile! What happens when requirements change? Well that's where the open for extension comes into play. Instead of modifying the original code you extend it through new subclasses (Template method) or service objects (Strategy) and polymorphic relations. For example you could have a program that sends a person a message. Lets say so far you have text messages and emails but you're definitely missing carrier pigeons. So instead of writing in all sorts of if statements and all that fun stuff to get your particular logic to work, you could have the persons messaging strategy be carrier_pigeon and when you invoke send_message on the person it looks at its messaging strategy and sends off our avian messenger. When you need to add literal snail mail, you make a new service object to handle the snails and utilize that as the person's messaging strategy... extend at will.

Liskov Substitution Principle (LSP) - Honestly the name should be enough for you / me. No? Okay. This is quite a bit more straightforward than some of the other principles. Basically this states that any subclass should be able to be substituted for its parent. So if you have some function that takes a Person, and Man and Womanare both subclasses of Person then you should be able to send Person, Man> and Woman to the function. If you send a Man to do a Person's job and everything explodes - that is bad.

Interface segregation principle (ISP) - *joke* This is saying that interfaces should only have enough functionality to serve the function they need to serve. The same can be said for modules or plugins or libraries. Basically if you have a class using some sort of interface or module and that module has a bunch of un-used features - only the features you're using should be in that interface / module. Why? Well lets say there is a bunch of functionality in there that is not used and then needs to change for some reason. There is a chance that the changes are going to affect what you're working on in a bad way. We don't want those side effects. Additionally it simplifies the interface/module in that it does one thing which harks back to the SRP. On a library / component level this is even more obvious - lets say you're using like 2% of a library, but then someone goes and changes some weird auxillary part of the library - now you need to recompile for reasons completely non-related to what you're doing. This can be bad. If it deprecates the functionality you liked - all the more worse. The solution to this is wrapping all the necessary functionality in the interface/module/package/library and nothing more.

Dependency Inversion Principle (DIP) - Honestly before I read the Clean Architecture and this book I gave probably 0 thought to this principle. But basically you want to have you details and implementation depend on your business rules. Your business rules - things that are essential to the essence of the program - to be stable. Things depend on your business rules and then your use cases. The details such as your database, UI, 3rd Party API integrations are not depended on! They're free to change - because they're going to change. If your business rules depend on your UI - every time your UI changes your business rules are going to change and you're in turn going to lose your mind in a nightmare of maintenance. Okay, so sometimes there are instances where the business rules or use cases NEED to know about the implementation you say. No. You can separate these things using factory patterns, facades, integration layers and interfaces belonging to what should be depended on... And thankfully this book does a great job at teaching some patterns to do just that.

Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series) 1st Edition

- Robert Martin - Paperback – September 10, 2017

Reading: October 18, 2020 - November 4, 2020

Purchase on Amazon

So what the hell is software architecture anyways? That was the question I asked myself and then went out and found this book. Apparently it is a thing - and a lot of thought can go into it - or not - depends on how much work you want to do now vs how doomed you want to be in the future.

Next to Clean Code this is the book I would want everyone I work with in software to have read. It is A+ knowledge that everyone should have that is designing software, especially in a professional or team environment. At the risk of sounding cliche this book is all about keeping software soft - making sure that it can be changed, edited and maintained in the easiest ways possible.

To that extent it starts with a very brief overview of SOLID principles and then gets into the nitty gritty of keeping things clean.

The biggest take-aways I got from this read have to do with making sure that your dependencies go in the direction of your business logic. Make sure that details and implementations depend on the business logic and not the other way around. Why? Basically the business logic should be set in stone (or near to it) and is not going to change much - however the closer things get to the user or implementations of that business logic the more apt they are to change for myriad reasons.

What does this look like in practice? I really think this takes 2 different directions. The first is adhering to and keeping the SOLID principles in your mind and abiding by them as you code. Don't paint yourself into a corner that you then have to claw your way out of - keep things clean and malleable. The second direction is much more up-front. Taking the time to actually design the system to some extent. Even if it at a high level modeling your system after the concentric circles of design. Basically having the inner most circle be your business logic - things that even if the software did not exist - would have to exist for your business. Eg. Do you have users? They're probably involved in the business logic. The next ring is the use cases - how things operate in relation to the business logic. If your users are adding things to a shopping cart - that is a use case, checking out, returning items - all use cases. And keeping these separate from the outer layer of implementation details and UI. The UI is going to change - a lot! Why have your use cases or business logic depend on this? Every time the UI changes you'd have to change the business logic and use cases. Instead have the UI implement the use cases and depend on nothing.

I also thought that it was interesting that there are techniques for quantifying the dependence, independence, instability, and abstractness of a system. Keeping these in reasonable bounds is a good way to make your life easier, and being able to measure these things in existing systems can give you a measure of how 'good' the design has been.

But that said - planning takes time, design takes time and engineering takes time. Making something that is going to remain flexible is going to be harder than sitting down and making something work. So being able to articulate that to the business that "this will take time, cost money, and is worth it" is hard but very necessary - unless you like rigid code, debugging in hell and rewriting systems.

Again let me re-iterate - if you're developing professionally - you really really really should read this book. Get it here.

The Lost Art of Listening, Second Edition: How Learning to Listen Can Improve Relationships

- Michael P. Nichols - Paperback – February 16, 2009

Reading: August 11, 2020 - October 16, 2020

Purchase on Amazon

Basically - who does not want to be a better listener? That's right you can tell I'm married.

This was actually a really good read. It goes over ... the lost... art ... of ... ugh, um... communication. Just kidding - it looks at listening from both a speaker and a listener's point of view - both require work.

The main take away I got from this is listening is hard - like really hard - and most people think they are good listeners and they are not. However, listening is a skill and this book gives a lot of practical ways to improve this skill. Regardless of your aptitude at listening, people need to be listened to. And if you can apply yourself to listening - you can give something to someone they really need.

It goes over reactive listening - listening and then making sure that you know what the other person said - by asking them, trying to eliminate distractions, trying not to think about your response, realizing there is a time and place for communication, realizig what state the other person is in, that miscommunications are a two way street, how to get out of circular arguments, and prioritizing who you listen to and talk to... the list goes on.

I would suggest giving this a read for sure, hopefully it helps me listen better to my wife, my friends, my family, and my coworkers.

Cadillac Desert: The American West and Its Disappearing Water

- Mark Reisner - Paperback – Illustrated, Paperback – January 1, 1993

Reading: September 17, 2020 - October 4, 2020

Purchase on Amazon

When one of my engineer friends told me that this was a fascinating book - I took it at face value that he was a hydroengineer and almost dismissed the book. But he seemed ardent and really stoked about it... so with out further ado - Cadillac Desert by Mark Reisner

Read this book! It was fantastic. Basically it looks back to the mid 1800's and the earliest people to explore the American West and the great desert they found out here. One of the coolest people had to be J. W. Powell - who wanted to break up the west into states that were based on river basins. So you'd have the Colorado River Basin... state. It would have been in my opinion a wonderful idea. Instead they broke the states up into weird squares and voila! Water issues and lawsuits out the wazoo until who-knows-when.

It continues on to discuss the build out of the irrigation of the west in order to A. build bigger cities which was abused by big companies, and to B. irrigate more land which was... abused by big companies. How, the US tax payer paid BILLIONS if not TRILLIONS of dollars for these water works to make sure we can reclaim a small bit of dester to grow nearly worthless crops (Alfalfa I'm looking at you) and cattle which are both better suited to other locales.

The whole book has a bit of a sardonic tone and is incredibly witty and well written. It is a fantastic read if you find yourself on a flight.

Elon Musk: Tesla, SpaceX, and the Quest for a Fantastic Future

-Ashlee Vance - Paperback – Illustrated, (January 24, 2017)

Reading: July 5, 2020 - August 10, 2020

Purchase on Amazon

I found this biography both really informative and also quite inspiring. Ashlee Vance basically trails Musk's life from early childhood, through his time with Zip2 and Paypal/X.com through today.

It is really incredible what he is doing and the amount of drive he has to get there. I think that some of his methodology may be too burn-out prone. Working your engineers until they quit is a good way to lose your engineers.

But, it is admirable to see that he genuinely wants to make the world a better place, either through solar, electric cars or just straight up giving us a foot hold on another planet.

Super interesting read and quite inspiring - I'd suggest it!

Don't Be Evil: How Big Tech Betrayed Its Founding Principles -- and All of Us

- Rana Forooharn - Currency; Hardcover Edition (November 5, 2019)

Reading: June 28 - July 16, 2020

Purchase on Amazon

Going into this book I assumed it would just be about how big tech sells everyone's data - duh. That "if it is 'free' then you're probably the product" - everyone.

However, it was not just that! The book started slow - coming off of reading The Lost City of the Monkey God - it felt really slow! However, around chapter 4 things started to pick up.

Looking at how some of the online platforms have gamified their systems to keep people hooked to them was crazy. Apparently they have all sorts of psychology utilized to keep people absorbed - which on its face - keeping someone reading your content, sticking around, just scrolling through - is pretty bad. Then I got to thinking - I guess thats what books should do? - What if you gamified something healthy?

For a long while I've been mulling over "The Rand Adventure" - basically - if you're bored it sends you on a random adventure within x miles of your location. Once it is up and running it would be fun to gamify that! Like, while you're on the adventure, reward people for having their phone on airplane mode (so you can still take pictures) or something. Something is in there that could be cool.

The rest of the book went over myriad sins of big tech while showing a genuine 'apple fanboy' point of view. The whole data discussion Rana brings up though - I think should be discussed at somepoint in the near future - and I'd be suprised if it does not wind up at the forefront of politics in the near future.

The Lost City of the Monkey God: A True Story

- Douglas Preston - Grand Central Publishing; Reprint edition (September 5, 2017)

Reading: June 10 - June 14, 2020

Purchase on Amazon

I read a chapter on Wednesday, then a chapter Thursday night, skipped Friday, and then saturday while hanging around in a hammock this got it hooks in me. By Sunday I was done.

This was honestly fantastic! The Lost City of the Monkey God is a true story following the discovery of some lost cities in eastern Honduras. The story tracks, from Douglas Preston's point of view, the whole story of discovery - from initial research, to lidar imaging, to boots in the mud, and then the fallout and follow up of the discovery in Honduras.

The story is incredibly engaging and draws you in, the curiosity of what comes next is always seeded and satisfied. If you're looking for a fun adventurous read - this is a great story.

Franklin Pierce in Death of a Vice President (Presidents of the Uncanny States of America)

- Eric M. Hamilton - 1st Edition, Paperback Amazon (June 10, 2015)

Reading: April 27 - May 1, 2020

Purchase on Amazon

So my review may be biased as I was a suitemate and I am a friend of the Author - Eric M. Hamilton. And though he forces us to refer to him as "Eric M. Hamilton" I feel I can give a great review of this book - It was horrible. Man I hate that guy.

Just kidding! This is the second of his "Presidents of the Uncanny States of America" series that I've read and it was pretty good. I appreciated the historical references in this one - the horrible life of Pierce - as opposed to the story.

The mystery around what is happening seemed a little thin and could have been cloaked a little bit better, but the story was fun all the same. It was not as riviting as the Al Gore book which had me thinking about it for days afterwards. This one felt more like a 1 and done story that didn't keep pressing my buttons afterwards.

An Inconvenient Presidency: The Time-Traveling Misadventures of President Al Gore

- Eric M. Hamilton - 1st Edition, Paperback Amazon (August 4, 2016)

Reading: April 6 - April 7, 2020

Purchase on Amazon

You read that right - I read this in 2 days! Its actually a novella - so its pretty short, but it kept me hooked!

I loved the premise here - Al Gore - traveling through space / time and coming up short every - single - time. It was fun to see his plight and how everything wrapped up was really fun! This kept me thinking for days afterwards - not 'what is the meaning of it all' but rather pleasantly amused.

Would really suggest reading this one for fun!

Effective Ruby: 48 Specific Ways to Write Better Ruby

- Peter J. Jones - 1st Edition, Pearson Education 2015

Reading: Feb 20, 2020 - June 9, 2020 - the longest 200 page book ever.

Purchase on Amazon

Decided to go about this book review a bit differently. More of as a as-I-go reference for myself so I can remember more. So far I'm like 10 pages in and everything has been pretty stellar! So I figured I'd keep notes here for reference. Once I'm done reading it I'll have more of a review posted as well.

  • Deal with false as an object. `false.class` shows that `false` in indeed a singleton of the False Class. Which means it has methods! The best way to check if something is false is to do `false == `. Why? Because it uses the `==` method on the false object.
  • Treat everything as though it could be nil. Basically this means type casting your variables to what they should be incase something is nil for some reason. Eg. `supposed_to_be_a_string.to_s.capitalize` This would fail if the `supposed_to_be_a_string` were nil and we called `.capitalize` on it.
  • Avoid Perlisms. Basically Ruby stole some ideas from Perl and back in the day did horrible things with global variables. Don't do this. To have access to the Ruby-isms `require 'English'` may be needed so that things like `$RUBY_INFO` works.
  • Freeze constants! If you have a collection of constants - freeze all the elements from the collection. You can also add all your constants to a module and freeze that. `.freeze`!
  • Enable compile and runtime warnings. `ruby -w yourprogram.rb` will enable the compile warnings. Changing the environment variable RUBYOPT to '-w' will do the same. And for more indepth runtime warnings set $VERBOSE to true. $VERBOSE gets less verbose from true, to false, to nil.
  • The Standard Library has a lot of fun things in it! Take a look!
  • Don't inherit from base classes for collections. Instead, define one as an instance variable and delegate functions to do it.
  • Instead of tracking uniqueness of a collection with a hash - track it with a set. Instead of something like `hash = {blue: true, red: true}` the Set can have `set = {:blue, :red}`. Behind the scenes it still uses a hash but this is much cleaner.
  • Rescue specific errors. Its really easy to `rescue => e` which will catch all the StandardErrors but if you're commonly catching one error and handling it - catch that one, so that you can later address unexpected things.
  • This is the second book that emphasises the output of GC::stat. However, it also points out there are a lot of environment variables that can be changed to up the memory allocation and default page count which (if your system can handle it) can greatly improve the speed of your app. Going to try this on a rails program that takes like 10 seconds to bring up the console.

Overall I think this was a pretty sound book. There were definitely some tips and tricks that I was unaware of. I think the second pass this book afforded me for the garbage collector may yield some crazy time savings. So if time is money - this book was worth it!

Also this book is deceptively short. In that I mean if you work through the examples and try the tips and trick out in IRB you're going to read for 5 - 10 minutes then spend as much if not more time playing around. Which was an awesome way to learn - but also made this book incredibly time consuming!

Ruby Under a Microscope: An Illustrated Guide to Ruby Internals

- Pat Shaughnessy - 1st Edition, Kindle Edition (November 13, 2013)

Reading: November 27, 2019 - January 26, 2020 - Rating: 8

Purchase on Amazon

Well I can say this was better than the empathy book I read... thats for sure.

So this was a bit of a deep dive into the internals of Ruby. I decided instead of just being decent at this language I may as well get really good with it if I'm going to be dealing with it on a daily basis.

While the illustrations were definitely illustrations by an engineer for engineers I can appreciate that! Each chapter went a few steps deeper into the internals of Ruby in a very clear way. It really helped me to understand how classes, methods, objects, etc. are all stored in Ruby, what they're built out of regarding C structures and how everything references both itself and other things. Additionally knowing how methods are found, referenced, and the order they are looked up (and where) has helped me with a better feeling of where things go and why in my code. Additionally it went over treating method definitions as closures so that they have an environment and instruction sequence gave me a much greater insight into lambdas and procs.

Basically this is not the book to read in order to learn Ruby and get something to show up on a screen somewhere. This is the book to read if you want to Learn HOW Ruby works, why it does what it does, and how to use that knowledge as leverage in building better code.

Good Omens: The Nice and Accurate Prophecies of Agnes Nutter, Witch

- Neil Gaiman, Terry Pratchett - Mass Market Paperback – (November 28, 2006)

Reading: December 24, 2019 - January 9, 2020 - Rating: 9

Purchase on Amazon

Amazing

I'd never read Terry Pratchett before. That will change! For the longest time I've been looking for comedy novels. They've been so hard to find! My favorite is still "The Sheriff of Yrnameer" (Amazon), this was a delightfully hilarious read.

In a desire to not give too much away, it follows an angel and demon who've been on Earth since the dawn of man, and have come to like the place. In the face of Armageddon everything goes sideways.

While I picked up on a plethora of allusions, at times I felt there were some going over my head due to the fact I'm not up on my British slang and cliches. All the same the large majority that I did pick up on still make me laugh.

Read this book if you like funny.

Empathy: Why It Matters, and How to Get It

- Roman Krznaric - TarcherPerigee; Reprint edition (November 3, 2015)

Reading: November 9 - November 23, 2019 - Rating: 4

Purchase on Amazon

So I went into this book trusting that its sub-title "Why it matters, and how to get it" would be accurate. The goal was to walk away with some good tools for being more empathic. And while the book does outline 6 habbits of empathic people it does not really do much in the way of instruction

Rather instead it provides a couple ways of thinking more empathically, eg. try putting yourself in someone else's shoes, and encourages you to interact more with the people you come in contact with. I agree, these are good things.

However that is where my limited praise for this book ends. Rather it feels like this is an attempt of Roman Krznaric to try to position himself as an authoritative figure on empathy. He tries to delve into the history of empathy, skipps over the broad pool of research and how it has affected society in the past like a rock over a pond. It never goes deep. He then outlines a 'third phase of empathy' in history - our current time and near future - where he purposes all sorts of grandiose ideas. It feels like by the end of the book like he is trying to build a monument to a catch phrase.

I would have enjoyed this much more if it were to have been more in the vein of practical ways to improving empathy, instead of the incredible over emphasis on why it matters, and how Krznaric would like to entomb himself in his empathy movement.

Though icing on the cake - I read the Kindle version, and when I found myself struggling through the section on the "Empathy Museum" at 68% through the book and lightly cursing myself for needing to finish what I've started... It ended! The last 32% of the book are acknowledgements, index and bibliography.

Head First Design Patterns - A Brain-Friendly Guide

- Eric Freeman & Elisabeth Robson - 2004 O'Reilly Media

Reading: August - October 2019. Rating - A solid 7.5

Purchase on Amazon

Head First Design Patterns outlines some of the most common and widely used design patterns. Most of them seem to be adopted from the Gang of Four's Design Patterns: Elements of Reusable Object-Oriented Software (Amazon - https://amzn.to/2WsqYmN). Having not been exposed to them by name before it was great to be able to put a name to the patterns.

As the book emphasises there will be times when these patterns are necessary and helpful, but trying to force software to fit into them adds a bit of unnecessary complexity.

The Head First way of writing was pretty awesome. It uses illustrations, common language, repetition, quizzes and thinking problems to emphasize what you're learning.

The book does a really gerat job with covering:

  • Strategy Pattern
  • Decorator Pattern
  • Simple Factories
  • Factory Method Pattern
  • Dependency Inversion
  • Singleton Objects
  • Command Pattern
  • Adapter Patterns
  • Template Method
  • Iterator Pattern
  • Composite Pattern
  • State Pattern
  • Proxy Pattern

It then goes on to look at patterns of patterns (Model View Controller in essence) and then brushes over some other patterns from the GoF that were not included in depth in this book.

Over all I really liked this book. It gave me some fun new tools, and some common vocabulary, and did so in a fairly intuitive and fun way.

C.O.D.E: The Hidden Language of Computer Hardware and Software

- Charles Petzold - 1999 Microsoft Press

Reading: May 2019 - June 1, 2019. Rating: I'd give it an 8.

Purchase on Amazon

Code breaks down how a computer works into its most basic components. Petzold starts with an explanation of how codes work, how information can be encoded, and then describes the transmission of that information. He then describes how technology we've had for over a hundred years could be used to build a functional computer. Starting with the construction of a Morse code relay he progresses to how microprocessors, memory, storage, and software all work.

Looking at this in terms of 'data paths' and 'control' inside of a microprocessor is quite revealing. Previously I knew of both and what they do, but this solidified them in my mind.

Clean Code: A Handbook of Agile Software Craftsmanship

- Robert C. Martin - 2008 Prentice Hall

Reading: Sometime early/mid 2018. Rating: 9.5

Purchase on Amazon

Though I'm going to try to keep this reading list up to date starting June 2019, I would be remised if I did not reach into the archives to talk about Clean Code by Robert C. Martin. As I read through this book the necessity of clean code burned its way into my core. I now suggest this book to every person that I program with. The book's examples are in Java, and while I program primarily in Ruby, the concepts translated smoothly. As I read through the book, many aspects of my code started to stick out like neon signs pointing to messy code. I cleaned up what I could and going forward continually have an eye towards clean code.

So many things I previously thought nothing of now drive me mad. The order of functions. The naming of functions. What a function is... a class, a method, how to order things... on and on. And I think it's the cumulation of these little things that have made me a better programmer. One of the people I suggested this to gives credit to his new and much more awesome job to this book. If you're a programmer, read it. You and everyone you work with will thank you!