Category: Book Review

10 Books that Shaped My 2012

I do my best to not judge a book by its cover, and to read a variety of genres: business, fiction, biographies, philosophy, etc. I’ve always enjoy reading, but lately I’ve found that reading is like eating, you need to find what is going to nourish your mind. In my case I need a book that is going to challenge me, teach me something new, or leave me entertained. Hence, I don’t bother finishing a book unless I get engrossed in it. I want the books I read to leave a lasting impression on me. If I find that its not going to then I just move on. While I do read books that are popular I also look for gems. This past year I read 10 books that I think are worthy of sharing.

1. Wanderlust by Elisabeth Eaves


I began 2012 living in Paris and London. It had always been a dream of mine to live and work abroad. While I enjoyed my stay, and got a sense of life abroad, I was really happy to be back home. This happiness led me to question whether I was actually cut out to be a wanderlust.

Before casting myself as a homebody, I decided I’d read about what life is like as a true wanderlust. I picked up Eaves’ book which recounts how she spent her youth traveling across 5 continents. Living vicariously through her adventures and explorations, I realized what it means to be a true wanderlust: the desire to constantly be on the move.

Faced with constant change, adapting became second nature, and visiting various cultures made her more worldly. Despite her many adventures and romances, she admits to the fact that spending more than 10 years roaming the Earth left her without a sense of a true home or identity.

2. Committed by Elizabeth Gilbert

I read Eat, Pray, Love a few years back, a veritable manifesto for the woman who wants it all in life: career, love, and adventure.  Due to her divorce, and depiction of matrimony as having held her back, I sensed her cynicism when it came to marriage.  I’ve always been a little confused by the institution, given my parents had an arranged marriage, and having grown up in a culture that scoffs at it.  I’ve never been satisfied by either the East or West’s attitude towards it.  The East limiting individual freedoms, especially of women, while those in the West are too susceptible to whimsical dissolutions that threaten the stability and security of family.

When a friend of mine suggested that I read Committed, I was mildly curious as to what led Gilbert to change her mind on the institution of marriage.

What I thoroughly enjoyed about the book was how Gilbert covers marriage not just in the Western world as we know and experience it, but across the globe, and throughout time.  This to me was the most fascinating.  Being able to understand how marriage has evolved and where it is headed is necessary.  She also deconstructs the elements that have led to those who have long and enduring partnerships.  The book gave me a better sense of how marriage has evolved from a purely contractual obligation to one of companionship.

3. True Love: A Practice for Awakening the Heart by Thich Nhat Thanh

Most people probably know that I’m pretty demanding of myself.  My younger self would have demanded perfection, but over the years I’ve realized that isn’t healthy or realistic.  What I do expect is a level of progress and self-improvement.  However, after a series of both professional and personal setbacks in 2012, due to what I perceived as forces beyond my control I decided it was time to learn how to give myself a break!

What I enjoyed most about the book was Thanh’s simple language, and poetic delivery.  Reading Thanh’s writing leaves you feeling like you’ve just talked to a best friend.  Thanh has a level of empathy that I suppose you can only get from a monk.  Every one of his words exudes compassion.  As silly as it sounds, at the end of each chapter I learned how to give myself a hug.

There are elements of religious edicts, because after all, Thanh is a Buddhist monk.  But there is also a level of consistency that comes from being a religion that cares about introspection.  Despite the religious overtones, the book is a worthwhile read, leaving the reader with a sense of what appropriate self-nurturing entails.

4. You Are Here: Discovering the Magic of the Present Moment by Thich Nhat Thanh

Its just damn hard to live in the present, but it is what is necessary to be happy and feel fulfilled.   Living in the present requires a level of focus, and detaching yourself from events of the past, and anxiety for the future.  I’ve always strived to live in the present.

This book not only reinforces the need to live in the present, but for those of us who need a how-to guide, Thanh covers simple and effective techniques to make this happen.

5. Why Girls Are Weird by Pamela Ribbon

Not a book I would have personally picked up to read, despite its catchy title.  I had been given this book by Lyndi Thompson, who got it from her best friend.  Hence, I felt like I was being presented with an heirloom, and I had to comply by reading it!  I read it while I was traveling though France in September.  The book was indeed entertaining.  It depicts the life a 20-something girl from Austin, TX, who begins writing a blog before blogging became the widespread phenomenon we know today.

What made the book hysterical was how much Anna K’s life (the protagonist) was shaped by the Internet and her blog.  As a fellow blogger I saw how elements of my own experiences were uncannily similar to her.

6. Emerald City by Jennifer Egan

My standard for good fiction writing has been if an author can write a short story that is worth reading.  Due to their obvious brief nature, an author is tested by having to set the stage for a reader.  I enjoyed Egan’s stories because you got a sense not only of the current predicaments that the characters were in, but their rich past and relationships to others.  Also like Wanderlust, Egan covers the globe, putting her characters in situations that span Manhattan to China.

7. The Vineyard at the End of the World by Ian Mount

This might be one of my favorite business books.  I know it seems silly to call it a business book given that it is a historical account of how wine has shaped and been shaped by Argentina, but I thought it was the perfect synergy of history, politics, and entrepreneurship.  Spanning 200+ years of wine and Argentina’s history, you get a sense of how wine itself has evolved, and how Argentine entrepreneurs challenged common wine-making practice.

What astounded me the most was the patience and perseverance of Argentine entrepreneurs.  Unlike technology products, that can be built and improved upon within months, wine needs time, in the form of years and sometimes even decades.  It is indeed a labor of love, and while it can be manipulated and improved upon by men, so much of its success depends on mother nature.  Combine the intricacies of vineyard developing and wine-making with an unstable political climate, and stiff competition from competitors who have hundreds of years of tradition and recognition from the world, namely the French, the book is indeed eye-opening and a worthwhile read, for wine-enthusiasts, history buffs, and entrepreneurs.

8. The Sandler Rules by David Mattson

I received this book after attending Sandler’s one day training in Oakland, CA.  I was originally interested in the training because as an engineer I have never gone through formal sales training.  The book does a good job of recounting the Sandler sales system, which is a refreshing approach to how people traditionally do sales and perceive it.  I really don’t want to give too much away but this is a gem for those who are interested in sales!

9. As Always Julia edited by Joan Reardon

Julia Child has always inspired me a lot.  Her lifestyle and career were unconventional given the era she lived in, and of course she shares my love of French cuisine.

However, French food and Julia take a backseat in this book.  Instead what is brought into the limelight is the rich friendship that develops between two women, Avis DeVoto and Julia Child through a series of letters, and how their friendship nurtured the popular classic Mastering the Art of French Cooking, now in its 50th edition!  As you read you witness how these two women grow together, and how their lives often get in the way of their creative pursuits.  But ultimately their love for each other, and their passion for the project enable them to endure the tests and trials they are put through while birthing the classic.

10. Dracula by Bram Stoker

Turned off by common vampire novels, I decided to go back to where it all began with this classic.  While Stoker starts this novel off slowly, towards the middle I became raptured with the plot much like Dracula’s victims are with him.  There are also elements of a simpler life and period of time, combined with a language structure from 100+ years ago that I found fascinating.  Having characters who tell the tale also gives a perspective on how humans think and in this case fear.

 

Enhanced by Zemanta

Post to Twitter Tweet This Post

Book Review: Clean Code

By Frances Advincula

As promised, I started reading the book Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin on my flight to Colorado,  which is hilarious because I read most of the book already before I read the introduction, and it said, “Be prepared to work hard while reading this book. This is not a ‘feel good’ book that you can read on an airplane and finish before you land.” Talk about timing, yeah?

(A disclaimer: It has been so long since I wrote a book report, so this will be a super informal review that pushes on the verge of being a mini-summary, but I hope you find it useful anyway, although I am certain I did not do justice to the book.)
For me, the book was divided into 4 parts. Chapter 1 gives us an introduction on what is bad code and its consequences, as well as experts’ definitions of what makes code clean.

From page 3, the author writes about a company that was at its height in the 80s, only to suffer from bad code which ultimately led to its demise:

“The answer confirmed my fears. They had rushed the product to market and had made a huge mess in the code. As they added more and more features, the code got worse and worse until they simply could not manage it any longer. It was the bad code that brought the company down.”

It’s no trivial matter, folks! But we are all guilty of writing bad code at one point or another. We do it because we justify it in our heads, that we have to meet that deadline, or that we have a bazillion other things to finish, or, gasp!, that it’s “good enough.” Well, no, it’s not… and the book does us good by reminding us of LeBlanc’s Law, “Later equals never.” Clean your code before you commit, and clean it now!

Anyway, the book goes on and quotes several experts on what they think makes clean code, but my favorite was Michael Feathers’s. He is the author of Working Effectively with Legacy Code.

“I could list all of the qualities that I notice in clean code, but there is one overarching quality that leads to all of them. Clean code always looks like it was written by someone who cares. There is nothing obvious that you can do to make it better. All of those things were thought about by the code’s author, and if you try to imagine improvements, you’re led back to where you are, sitting in appreciation of the code someone left for you – code left by someone who deeply cares about the craft.”

And I know you care! You are reading this blog, after all.  I also know that if you are a newbie engineer like me, you want to transition from being an apprentice to being a craftsman too, so let’s read on, shall we?

Chapter 2 talks about using meaningful words when naming your classes, methods, and variables. Don’t make others have a hard time figuring out what you mean, or have to scroll back up so many times to remember what “x” actually represents.  Name your stuff to be descriptive and pronounceable which will help when you are talking to other developers. It seems almost like a “duh” chapter, but it serves as a good reminder nonetheless. Again, I will quote that which I cannot state any better.  From page 25:

“In general programmers are pretty smart people. Smart people sometimes like to show off their smarts by demonstrating their mental judging abilities…After all, if you can reliably remember that r is the lower-cased version of the url with the host and scheme removed, then you must be clearly be very smart.
One difference between a smart programmer and a professional programmer is that the professional understands that clarity is king. Professionals use their powers for good and write code that others understand.”

Chapter 3 is about functions. Of course when we write them, they start out long and hairy, but we should refactor until they are short, only do one thing, is clearly named, have the least number of arguments as possible, have no side effects, and use error handling wisely.

Chapter  4 is about comments. Make sure your comment is necessary and not a restatement of the code. Be careful with commenting since it can be an excuse not to refine or refactor code that can be written better. Finally, if subversion can track down the changes for you, don’t even think about commenting about the change you made.

Chapter 5 is about formatting. Basically, use common sense, make your code easy to the eyes (like a good book), and your team should sit down and agree on your project’s formatting rules to keep everything consistent.

Chapter 6 details the difference between objects and data structures and urges us to think very carefully on which one would satisfy our needs for a given problem better.  Use objects when you need to hide data but expose behavior, since they allow you to add new objects with ease without modifying existing behavior. The reverse is true for data structures. They usually don’t have behavior and expose data, so use them to add new behaviors to already existing data structures, since it’s harder to add new data structures to behavior that already exists.

Chapter 7 deals with error handling and emphasizes that clean code is robust code. It walks through rules such as using exceptions versus return codes, not returning/passing null, using unchecked exceptions, providing specific expectations that the person debugging can easily start tracing in a call stack, and techniques on having a clear separation between the business logic and error handling.

Chapter 8 deals with boundaries and how to work with third-party code. It chides us to write tests as we learn how to use the third-party code. The book calls them “learning tests” and describes how useful they are in making sure that when the third-party vendor releases updates, your code will still be compatible, etc. It also tells us to manage and minimize the places where we use third-party code by using patterns such as the Adapter pattern.  From page 120:

“Either way, our code speaks to us better, promotes internally consistent usage across the boundary, and has fewer maintenance points when the third-party code changes.”

Chapter 9 talks about writing clean unit tests. (This is by far my most favorite chapter, as they really grill us in test driven development at work! A post on TDD is on it’s way!) The book says that test code is just as important, if not more important than, production code. Without tests, you will be scared to change and improve anything in your code base, and your code will start to rot. From page 124:

“Test code is just as important as production code. It is not a second-class citizen. It requires thought, design, and care. It must be kept as clean as production code.”

Why you may ask?  Again, from page 124:

“It is unit tests that keep our code flexible, maintainable, and reusable. The reason is simple. If you have tests, you do not fear making changes to the code! Without tests, every change is a possible bug. No matter how flexible your architecture is, no matter how nicely partitioned your design, without tests you will be reluctant to make changes because of the far that you will introduce undetected bugs.”

It then lists the rules of TDD.

  1. Write a failing test before you write production code.
  2. Write just enough for the unit test to fail.
  3. Write just enough production code to make the test pass.

And also five rules of what makes a test clean (FIRST): Fast, Independent (can be run in any order, etc.), Repeatable in any environment, and Self-Validating (they either just pass or fail).

Chapter 10 is all about classes. Basically, they should be small and follow the Single Responsibility Principle, or that a class should only have one reason to change.

Chapter 11 is about designing systems. The intent of the system, at all levels, should be clear. Only use standards if they add value, and always, always use the simplest thing that would work. My favorite from the chapter has to be the advice on making decisions.  From page 168:

“…it is also best to postpone decisions until the last possible moment… A premature decision is a decisions made with suboptimal knowledge. We will have that much less customer feedback, mental reflection on the project, and experience with our implementation choices if we decide too soon.”

Chapter 12 lists four simple rules that will lead you to a good, clean, simple design.

  1. Write good tests and run them all.
  2. Refactor. (Again we have tests so we can change code to be better and not have to worry about introducing bugs.)
  3. Avoid duplication of any kind.
  4. Write code that people understand, so that it can be maintained with ease (which are basically clear about the intent of your code, having good naming conventions, commenting correctly, and keeping classes and methods small).

Chapters 14 to 16 are case studies wherein the book walks you through applications or parts of applications that have bad code and refactor them as you watch – to make the code pristine, clean, and just plain ol’ awesome. You’ll be walked through detailed critique and refactoring of a command-line argument parser, JUnit, and the class SerialDate in the JCommon library.

Chapter 17 is a cross reference of all the “rules” and heuristics that were applied to what was refactored in the previous chapters. I love it in a sense that it provides a master list of things to remember and abide by.

In fact, I might print a page or two of it and tack it on my cubicle.

Happy Friday and happy coding, Everyone!

Frances just graduated with a degree in Computer Science with specialization in Software Engineering. She works as a Software Developer for Accenture Software. She also contributes toThe Levo LeagueWomen 2.0, and STEMinist.  A proud geek girl, she’s sure she is the only one who can’t play video games. Follow her random musings at @FranAdvincula.

Enhanced by Zemanta

Post to Twitter Tweet This Post

Book Review: BakedIn

Marketing is essentially telling a story and conveying a message to customers and users about a product or a company.  But how do you tell a compelling enough story when there are 50,000+ products out there each competing for a slice of the market?  Perhaps it would be easier to get a slice of the pie if you’re marketing strategy was baked into your product.  The strategies for doing so are highlighted in my latest read: BakedIn. The authors discuss 28 rules that infuse every aspect of your product and business with a story.

While I’ve been called a marketing genius on stage by Aaron Forth, VP of Product at Mint.com, I hardly warrant such a title.  It takes a lot more than just a simple name to create a successful product and brand like Mint.

Here’s are a few highlights of what it does take:

Cultural Trends – understand where the consumer culture that your product is using is headed.

Design – think about ways to design each element and use them as touch points to interact with your customer and evoke an emotional response.

Find out what business you’re in – list all the service and the emotional benefits you create for customers.

Know the entire business category – use a competitors products to see what advantages and disadvantages it possesses.

Get your hive on & Knock down the walls – siloed organizations do not lead to innovation (another reason why great firms fail).  You need to foster a collaborative culture within your organization across departments, and make sure that information is flowing between the departments, instead of it being hogged or withheld by a few.  If need be jump across silos, but be aware that it might cost you your job.

Absolute – strive to be the superlative in a field (fastest, smallest, quickest)

Design to your weakness – confront the big hairy monster that is standing in the way of your organization’s success and find ways to design around it.

Good short read for anyone who wants to infuse life into a flailing product, create a new product, and most importantly tell a compelling and gripping story to keep customers engaged.

Enhanced by Zemanta

Post to Twitter Tweet This Post

Book Review: The Innovator’s Dilemma: When New Technologies Cause Great Firms to Fail

As an entrepreneur one of the biggest challenges is competing against large established corporations, because they possess more resources, capital, and have an established market segment.  However, one way of entering into the marketplace is by identifying non-existing value networks by creating a disruptive technology.  A disruptive technology is a new method or process of handling an existing technology, its birth often creates a new market or value network.

In his book, The Innovator’s Dilemma: When New Technologies Cause Great Firms to Fail, Clayton M. Christensen illustrates how disruptive technologies have emerged primarily via startups, and how large firms despite having good leadership and capable individuals are unable to successfully compete.  He uses several industries as case studies to prove his theory: hard disks, personal computers, and mechanical excavators.

I thought this was a good read for those who are in large companies and trying to compete against start-ups or entrepreneurs who are trying to tackle a well-established product or market.  Here are some takeaways from the book:

Great Firms Fail – failure of great firms in emerging technologies isn’t due to mismanagement, it is because the customer base is very different from its existing one e.g. 3.5 and 2.5 Hard Disk Drives targeted the emerging personal computer market, whereas the existing hard disk market was focused on mainframes.

Value Networks – pursing a new value network requires time and resources to understand the new value network, which established firms cannot do because it takes away from resources of current value network.

Disruptive Technology – new firms enter into markets and understand the value network, position themselves to the usage of this new technology and make it hard for established firms to enter.

Match the size of the Organization to the size of the market – Large companies pursue large opportunities, if the payout isn’t as great, they will not pursue it.  Because emerging markets are small they aren’t as attractive to large firms that are looking for large revenue opportunities.  It is also easier for growing companies to justify investment in new products and technologies than established

First Mover vs. Second: in disruptive technologies first mover has better advantage.  Second mover trades market risk  involved in entering an emerging market because the disruptive techology might not take off, for a competitive risk the risk of entering against established competition.

How Large Companies try to Compete: Large companies could tackle disruptive technologies but not at the cost of taking away resources from existing revenue generating technologies.  Usually they set up independent teams to pursue the new disruptive technology, and keep the management scheme autonomous from the parent company.  Otherwise the thinking of the main company and product permeates and detracts from the innovation of the new technology, which requires a different approach.  Some organizations acquire smaller companies who have proven success in disruptive technologies, but often times the company that is bought doesn’t continue to succeed because of parent company’s influence and mindset.  Large companies should continue to improve upon conventional technologies and be followers in adopting new ones.  The dilemma is in the case of disruptive technologies being a follower is detrimental – but it is hard to allocate resources if the market size is small and returns don’t match organization size.  Being small and independent is more advantageous – market size is small and more capable of understanding needs of the customers.

“Projects make sense to people if they address the needs of important customers, if they positively impact the organization’s needs for profit and growth, and if participating in the project enhances the career opportunities of talented employees.”

“…start-ups which propose to commercialize a breakthrough technology that is essentially sustaining in character have a far lower likelihood of success than start-ups whose vision is to use proven technology to disrupt an established industry with something that is simpler, more reliable, and more convenient.  The established firms in an industry have every incentive to catch up with a supposed sustaining technological breaththrough while they have strong disincentives to pursue disruptive initiatives.”

Capabilities and Disabilities: each organization has processes and values that enable it to succeed.  However, these same processes or capabilities often stand in the way of its success against new markets resulting in disabilities.  It is hard to change these processes once they are established because they will start to hinder the organization’s progress in existing markets ultimately impacting is existing revenue base.  Hence it is often times easier for a start-up or independent entity to advance, because they can setup new processes and an organizational structure that can tackle the new technology.

Enhanced by Zemanta

Post to Twitter Tweet This Post

Book Review: Made to Stick


I think this is a must read for anyone who is passionate about having their ideas heard whether they are large or small. It is especially crucial for entrepreneurs who are trying to cultivate a product, motivate employees, and grow a company.

The premise of the book is how the “Curse of Knowledge” can impede a person who has ideas from effectively influencing others. Think back to college, the one class you almost-failed-out-of because you were either bored out of your mind or the professor was sitting so high in his ivory tower that you didn’t learn the essence of the subject. Made to Stick tries to tackle that problem by giving readers the following tips.

“Dont bury the lead”: if you’ve ever read a NYT article or anything sensationalistic you’ll see that the first thing the writer has done is presented the reader with a hook which is often times the headline or the opening sentence. Then they proceed to back it up with details and facts, but presenting this information first causes readers to loose interest or get lost in the myriad of minutiae.

“Follow Succes to test for stickiness”: The first “S” is for simple – the tagline for ideas should be simple and help people understand the direction of the idea. “U” is unexpected – creating curiosity gaps using mystery keeps people hooked, this is highly applicable to presentations and teaching. “C” concrete – people don’t respond well to abstractions, it helps to have a image for them to understand the gist of the idea. “Credible” – credibility is important, i.e. backing up ideas with authority figures and stats, but often time impossible if the person presenting the idea is a newbie to the field. In such cases, he will have to rely on “E’ and the final “S”. “E” emotional – does it touch people, or have a human interest component to it. And the final “S” storytelling – it is more compelling than stats or facts.

Some of the initial case studies used are long, but they help convey how to create a sticky idea. The author also does a good job of reviewing the concepts at the end, which helps them stick!

Enhanced by Zemanta

Post to Twitter Tweet This Post

Book Review: Secrets of the Rockstar Programmers

For my summer software reading I choose Secrets of the Rockstar Programmers by Ed Burns (yes I know the title is a bit cheesy…).  The book contains interviews with several male programmers, who have been in industry for at least 10 years, and have made significant contributions to in pure software such as creating a framework like Spring, or working on .NET architecture.

I thoroughly enjoyed the book, and the format makes it easy to digest.  However, it took me a while to get through, because I wanted to mentally process each programmer’s hard and soft skills, and lifestyle.  I thought it was an accurate depiction of what I believed the life of a programmer to be, and what it took to be stellar in the field of software.

There are a few common themes amongst these rock stars.  The vast majority of them have trouble with work life balance, the exception being British programmers, such as Adrian Colyer, CTO of SpringSource, who spends weekend with his family.  But for the rest, life is about solving problems and thinking about problems all the time.  The younger programmers, especially, have trouble balancing a family life, and attest to the fact the have to be told spend time with family or have learned to make time.  As far as hard skills go, Burns spent most of his time asking how these programmers keep up with technology trends, which blogs they read, and how to spot the latest language fads.  When it comes to soft skills, a few believe it is important to have a business sense if you want to advance, but there are a few in the minority, who would rather focus their efforts on development and technology.

I also enjoyed the historical perspective of the book.  Burns interviews programmers who pretty much started out with punch-cards, to those who have never had to manage memory.  Having been an electrical engineer, it is very interesting to see how hardware technology improved the overall productivity of programmers, and from the software side it peaked my curiosity of what’s to come in areas such as cloud computing and thinking about the computer as a network rather than an individual self-contained processing unit.

After finishing the book I started thinking of issues that I felt the book did not handle, the most obvious being there were no female programmers interviewed!  While I don’t believe it necessarily detracts from the essence of the book and what it takes to be a rockstar programmer, I think it highlights one of the fundamental problems that exists in the software industry: lack of female role models.  Those who did exist such as Grace Hopper, have yet to be  replaced by a new generation.  And I don’t think it is because software is particularly difficult, there are plenty of women surgeons and lawyers.

Leaving aside the gender bias, I also thought the book was too biased in interviewing programmers who worked for purely software based companies like Microsoft, SpringSource, and Sun.  While I think programmers at these companies are highly capable individuals, IMHO, they do not have the same resource constraints (both programmers and technology), and consumer driven issues such as security and high availability that programmers at places like Amazon.com, Facebook, and Mint.com face.  It has hardly, if any programmers like myself, who work for consumer web services, and are constantly fighting to solve scalability, security, and performance issues.  I would have liked to have learned about how people handle thinking about such issues given the fact that the age of the Internet is causing more software engineers to go into web services.

Overall, I would highly recommend reading Burns’ book, especially for those who are a few years out of college like myself, who are wondering what the next steps are in their career, and interested in learning from those who have paved the way.

Post to Twitter Tweet This Post