What I'm Reading

I spend a lot of time reading (that's probably an understatement).   Right now my current interests in computing span a number of subjects: architecture, alternative languages on the JVM, Ruby, Node.js, CoffeeScript, the Apache Hadoop ecosystem, NoSQL, State Machines, Complex Event Processing, Rules Engines, and Event-Driven Architectures.

Reviews.

Getting Started with Google Guava - 4.0 out of 5.0

Summary:  great introduction to Google Guava, but certainly not a definitive guide.

I bought this because I've never had the time to really go through the Guava documentation, but was aware of how great the library was.  The book provides a great introduction to the library and is relatively concise (only 112 pages!).  Unfortunately, it doesn't really give you the complete breadth of the framework (to be fair, the title does say "Getting Started").  Anyways, it's not too expensive if you buy it as an eBook and may really get you started with Guava.


Specification by Example - 2.5 out of 5.0

Summary:  a lot of prose, not too much practical or insightful knowledge on ATDD.

I have to first say that the I was mislead by the title.  I was looking for a book that would provide a framework for writing effective technical specifications (something in between a whitepaper and a Cucumber spec).  What I found was a manifesto on why ATDD is important.  Roger, copy all.  Now show me how to do it!  The table of contents is deceptive; it looks like you are going to be given a framework for how to implement ATDD, lead your teams towards this philosophy, etc., etc.  The book simply fails to deliver that.  There is a lot of prose, but not a lot of content.

The Cucumber Book - 4.5 out of 5.0

Summary:  if you want to learn Cucumber, this is the book (regardless of language).

This book will teach you the core of cucumber, particularly the Gherkin language which is probably 70% of the complexity in the framework.  While all of the examples are in Ruby, it's pretty easy to go to the documentation pages specific to your language and look up how to write step definitions and glue code.  The book also spends a significant amount of time discussing best practices, but at times it gets a bit "preachy" which can turn off the reader.  Otherwise, the book accomplishes it's goals of educating the reader about the framework.


Cucumber Recipes - 2.8 out of 5.0

Summary:  this book is not going to provide much relevant content to the average Cucumber user.  The problem is that the book covers a number of platforms (Ruby, Java, iOS, Android, JavaScript/CoffeeScript, etc.) and only includes a couple of recipes per platform.  More importantly, some of the features are going to be cut out of future releases of the Cucumber platform.  You are better off going to the website and reading the documentation.  More importantly, just scan the table of content of the book, and if any topic piques your interest, Google it!

I know this is a harsh review of the book, which I would say is otherwise pretty concise and well written, but I think the authors targeted the wrong audience (or I just don't agree with their goals with the book).


Redis in Action - 3.7 out of 5.0

Summary:  covers core Redis topics, but leaves out the ecosystem; it could have been edited a little better.

After reading the manuscript for this book, and subsequently getting a copy of the print-book, I have to say I'm somewhat happy with the edits that were made.  The examples in the book are done primarily in Python, and I wasn't a huge fan of the sequence in which the book was laid out (that's the negative).  On the other hand, the book does offer non-trivial examples of using Redis in an application (some techniques I was unfamiliar with, so that was a surprise).  This is certainly not an "ecosystem book".  You are not going to see examples of using Redis in different languages, or higher-order frameworks and libraries built on top of Redis.  So as a technology reference, it's good; it's certainly not a "Definitive Guide".



Scala in Depth - 3.5 out of 5.0.

Summary:  too much prose, get to the meat!

Working with JavaScript, CoffeeScript, and Ruby makes the thought of going back to Java painful.  Unfortunately, the JVM has the best libraries and ecosystem.  Since most of my background is in Java, I need to maintain my skills.  What better way than to learn a new JVM language like Scala!  I know you're thinking, "why not JRuby?".  I guess that's a valid answer.  Something about the excitement of Scala makes me want to learn, so I'm taking the time to discover the fundamentals of the language before I decide to try JRuby more seriously, or learn something like Kotlin.  I should say that I have tried my hand a little at Clojure.  It too, intrigues me like Scala, but I'm afraid the learning process has been a little jarring given how different a Lisp is to Java.


Machine Learning in Action - 3.5 out of 5.0

Summary:  explains core machine learning concepts in an accessible manner (for those of us who love math, but weren't especially great at it!).

I originally rated this pretty highly until I started to replicate some of the example code.  All of the examples are written in Python, which generally isn't a problem, until the code starts relying on a lot of frameworks readers may be unfamiliar with to perform tasks.  I tried translating the examples into Java code and found myself essentially rewriting NumPy.  Other than that, the explanation of the machine learning algorithms presented in the text were accessible to readers and explained some of the core concepts of the topic.


The Process of Software Architecting - 4.5 out of 5.0

Initial Thoughts:  process is well described, perhaps a little much so (some sections get a little repetitive or verbose).  Would love to see some real world examples of the types of viewpoints described in the book.

I've been an architect for multiple projects, whether formally and informally, for the last couple of years.  I decided that I wanted to bolster my practical experience in architecting (gained from thousands of hours of designing, coding and about quality software practices) with something a little more academic on the subject.  Part of my desire in formalizing my skillset came after working a project using DODAF (DoD Architecture Framework).  In all my previous projects, I created the diagrams and documentation I felt necessary to accomplish functional tasks.  Unfortunately, I wasn't very consistent in representing architectures across projects.  After some discussion with a friend of mine, I decided to rectify that by picking up some literature on the subject.

UPDATE (on page 212):  I think you will find that this book really only reinforces the facts that you already know about architecture; you won't be having to many "ah ha!" moments.  In general, the key to being a great architect is to learn how to be a leader, code a lot (understand the technology you are using), and read a bunch of Bob Martin books (Clean Code; Principles, Patterns and Practices in C#; etc.).

Programming Pig - 4.8 out of 5.0

Summary:  excellent book on an awesome tool.  Some of the content wasn't immediately understandable the way it was written, but after a quick re-read and trying it at the terminal, I was able to figure out the intent.

I use Apache Pig all the time, in large part, thanks to this book.  Pig is an amazingly useful tool, especially when you are working with structured datasets and want to quickly transform it, or perform some analysis.
Activiti in Action - ? (so far a 4.5) out of 5.0

Summary:  the book is still incomplete, but I'm generally happy so far.  Activiti's documentation is pretty good and I come from a BPM background, so the concepts aren't foreign.  I see value in the deep explanations of BPM concepts found in this book, but I was look for more of a "recipes" book.


I've switched over to Activiti from Drools Flow and jBPM.  Activiti's model is much cleaner and the history functionality is definitely nicer. The only thing that bugs me about Activiti is it's deeply rooted dependency to JPA/JDBC.  In Drools Flow, I used to cache session using JBoss Infinispan so I didn't encounter a performance hit serializing and persisting workflows when using asynchronous continuations (we built a very dynamic ETL process on top of a workflow engine).  I have another project in which I was considering backing Activiti on HBase, but the amount of rework in Activiti to get this to happen would be too immense.

Beginning Cryptography with Java - 4.8 out of 5.0

Summary:  explains in depth both cryptography concepts and how to use the JVM's cryptography libraries.

The book will provide an in depth knowledge of the Java Security and Cryptography API's, a topic that I think sorely lacks quality documentation (unless you go spelunking through the depths of IBM blog articles).  It's also pretty light on prose, focusing on code examples (which I like).
HBase: The Definitive Guide - 4.9 out of 5.0

Summary:  this is not only an outstanding book on the technology it represents, but also a critical resource on the Hadoop platform.  There is a great section on Hadoop server and cluster requirements that I think is better than any of the other Hadoop books out there.

HBase is a phenomenal piece of technology.  There are so many things going on "under-the-hood" that I think many people simply don't understand how to use it.  I had the pleasure of attending Lars George's presentation at Hadoop World 2011 on HBase schema design and his discussion was equally as excellent.

RabbitMQ in Action - 4.8 out of 5.0

Summary:  if you want to do messaging, read this.  The text not only describes how to use RabbitMQ in both PHP and Python (don't worry, there's an enormous amount of documentation using Java and .NET on the website), but also how AMQP works.  The authors explain how to secure, scale, and manage the application.

I love RabbitMQ.  It's a breeze to manage, and programming against AMQP is far easier (and less time consuming) than using web services.  By the way, it's also more reliable!


Deserted Island Reading

If I had to pick 5 computer books to have with me on a deserted island...

Of course, I should mention that I probably wouldn't pick computer books.  I would probably, instead, read some important pieces of the English cannon that I would never touch unless I was forced onto a deserted island and had nothing else to read.

I actually put some thought into this and realized that most of my selections weren't really about technology, but process or theory.  I guess that makes sense, because who would really want to dive into Erlang on some deserted island?


Agile Principles, Patterns, and Practices in C#
"Uncle Bob" and Micah Martin

Young Software Developers read this, think on it for a couple of weeks, write some code, and then become men...er...Software Engineers.  This is truly a fantastic book, and if I could, I would give every new software developer in my company a copy.
Artificial Intelligence - A Modern Approach
Stuart Russel and Peter Norvig

Probably the only beacon of light in my enormously underwhelming Computer Science curriculum in college.  I found most of the content fascinating; quite literally 25 lb. of deep insight into algorithms, information theory, natural language processing, decision making, etc.  I never really have had a chance to delve as deep as I wanted, so I think I would take this to the island with me to catch up.

The Mythical Man-Month
Frederick P. Brooks

The funny thing about this book is that it has little to do with software development.  Sure, everything is told from a developer's perspective, but it's really an insightful book about managing knowledge workers and the process of building complex systems.  Some recent proposal work reminded me of this book, particular the notion of having small architectural teams (surgeon and co-surgeon) as a means of preserving the purity of a system (promoting opinionated implementations of systems).  There's a lot in this manual, and for those who didn't like it, I would argue that you need to look deeper.

Two more coming...I'm having an internal debate about what these last two would be.

My technical library...

I have collected a ton of books over the last couple of years.  These are the books that survived the great Stalinist purges of my wife.

Java

Effective Java
JBoss in Action
Java Concurrency in Practice
Drools - JBoss Rules 5.0 Developer's Guide
Processing
Maven: The Definitive Guide
JUnit in Action
Seam in Action
EJB 3 in Action
Hibernate in Action
JavaFX in Action
JavaServer Faces 2.0
Eclipse Building Commercial Quality Plugins
Eclipse Rich Client Platform
Eclipse Plugins
Practical RichFaces
The Definitive Guide to Grails
Beginning Cryptography in Java
Liferay in Action
OSGi in Depth

Spring

Spring Recipes
Spring in Action
Spring Batch in Action
Spring Integration in Action
Spring Dynamic Modules in Action
Spring Roo in Action

Hadoop Ecosystem


Hadoop:  The Definitive Guide
HBase:  The Definitive Guide

Mahout in Action
Hadoop in Action
Programming Pig

Text Processing

Lucene in Action
Natural Language Processing with Python
Tika in Action

Enterprise Technologies

Event Processing in Action
Open Source SOA
Camel in Action
Understanding SCA (Service Component Architecture)
RabbitMQ in Action
jBPM Developers Guide
JBoss Drools Business Rules
Activiti in Action
XSLT 2nd Edition

Ruby

Eloquent Ruby
The RSpec Book
Metaprogramming Ruby
Design Patterns in Ruby
Rails Antipatterns
Ruby on Rails 3 Tutorial

.NET

Pro C# 2008 and the .NET 3.5 Platform
Microsoft Visual C++ .NET
SitePoint:  Build your own ASP.NET 2.0 Website
Pro .NET 2.0 Graphics Programming
Learning XNA 3.0
Building Business Intelligence Applications with .NET
NHibernate in Action
GDI+ Programming in C# and VB .NET
Developing .NET Enterprise Applications
Data-Driven Services with Silverlight 2
Visual Basic .NET Windows Services
Professional ASP.NET XML with C#
Windows Workflow Foundation in 24 Hours

SharePoint

SharePoint 2007 Development Recipes
Building the SharePoint User Experience
SharePoint 2007 Workflow Programming

Programming Languages

Real World Haskell
Learning Objective-C for Java Developers
Programming Clojure
Clojure in Action
Erlang Programming
Python Pocket Reference
Python Phrasebook
Scala in Depth

Geospatial

MapServer - Open Source GIS Development
PostGIS in Action
ArcGIS Engine Developers Guide

Web-Related

PHP5 for Flash
PHP5 Objects, Patterns, and Practices
Practical Prototype and script.aculo.us
jQuery in Action
Flex in Action
SitePoint: Host Your Website in the Cloud

Data Analysis and Reporting

Visual Data Mining
Data Analysis Using SQL and Excel
Pro Crystal Enterprise/Business Objects XI Programming
Introduction to Neural Networks in C#
Networks
Machine Learning in Action

Databases

SQL Server 2008 Administration in Action
SQL Server MVP Deep Dives

Operating Systems

Modern Operating Systems
Linux Pocket Guide
Linux Administration: A Beginners Guide
A Practical Guide to Ubuntu Linux

Principles, Patterns, and Practices

Clean Code
Fit for Developing Software
Algorithms in a Nutshell
Artificial Intelligence
Refactoring Databases
Domain Driven Design
Domain-Specific Languages
ThoughtWorks Anthology
The Mythical Man-Month
The Design of Design
The Art of Unit Testing
Agile Principles, Patterns, and Practices in C#

Architecture

The Process of Software Architecting
Software Systems Architecting


1 comment:

  1. Hello , I have been training students on AngularJS for past 6 months, and at times, I have used your blog as reference for the class training and also for my personal project development. It has been so much useful. Thank you, keep writing more:)
    AngularJS training

    ReplyDelete

Note: Only a member of this blog may post a comment.