Book Review: Operational Decision Management for Dummies

ODM for Dummies BookBusiness rules and validations related to an automated Business Process are generally hidden deep within the application source code and configuration settings. They are not openly accessible, easily to change or review. They might be duplicated several times across the source code.

Operational Decision Management (ODM) systems try to remedy this situation by providing a central repository for business rules. This repository acts as a single source of truth for users as well as systems. Rules are generally specified in the form of Decision Tables or Trees.

ODM complements BPM (Business Process Management) systems well, as BPM is also metadata driven with a focus on business process workflows and SOA (Serice Oriented Architecture) for integration.

Operational Decision Management for Dummies is a free booklet sponsored by IBM which provides a nice and quick definition of ODM systems. It is recommended for anyone interested in understanding what ODM is, what are its use cases and potential pay offs.

You can also check out this article for some concrete examples on how operational decisions (business rules) are automated by any ODM system.

Book Review: Threading in C# by Joseph Albahari

Threading is a complex subject, it is easy to get yourself entangled in threads which don’t behave as you expect them to. There are many constructs and approaches to synchronize threads or achieve parallelism, each with its own quirks and advantages. There are good old threads, there are thread pools, task parallelism, Parallel class, Async methods and Timers. Then there are a myriad ways of synchronizing thread like locks, spin locks, mutex, semaphores, event wait handles, concurrent collections, Synchronization attribute, Memory Barriers, Interlocked class, Monitor’s Wait/Pulse and Reader Writer Lock . To make sense of it all,  Threading in C# by Joseph Albahari is thorough reference on the subject. It is available online, free of charge in hypertext format which makes it particularly useful as a reference.

csianThreading in C# is also there as a chapter in somewhat abridged form in author’s book ‘C# in a Nutshell‘.


Reading eBooks – Finding the right reader

Over the years, I have started doing more and more of my reading on electronic devices. In the PC era, Adobe PDF was the format of choice for delivering and reading e-books. But with the variety of devices and form factors in use now, there has been a shift towards ePub and mobi formats. These formats offer reflowable content, rather than fixed pages of PDF. PDF is more suited for printing while ePub and Mobi are focused on making documents readable on different screen sizes. I explored various options for consuming ePub files on PC, Mac and tablets including Apple’s iBooks, Adobe Digital Editions, Calibre, Readium and others.


I found Apple’s iBooks to be the most pleasing to use. It has the right options in just the right places. It is available on Mac OS and iOS. But the drawback is: there is no option to get your notes and highlights out of iBooks and take them with you to, let’s say, a Windows machine. There is a third party software that extracts notes and bookmarks out of iBooks but it only works on iPad and iPhone, not on Mac. Due to this limitation I dropped the idea of using iBooks.

Adobe Digital Editions

Digital Editions is available for both Mac and Windows. It stores the notes and highlights in a separate file at C:UsersDocumentsMy Digital EditionsAnnotations. DropBox can be used to sync these files across Mac and Windows. ADE was the first software I downloaded and might not have gone further to try any other reader but there is a bug in current version of ADE (v 2.0.1) which compelled me to look elsewhere. The text rendering is terrible if you keep your side bar open. It took me some time to figure this out that the side bar is causing the awful rendering of text. Side bar contains things like notes and bookmarks, if you keep it closed then the content is rendered properly.


I wanted to try Amazon Kindle also, it is available for all popular desktop and mobile platforms. But Amazon doesn’t allow Kindle downloads outside United States and few other countries.

I tried a few other readers available on internet but all of them suffer from one of the two shortcomings. Either they are buggy and have not been updated for a long time or they don’t provide the functionality to take notes and highlight content while reading.


After looking at these alternatives, I decided to continue with my current method:
– Use PDF files, this ensures that all my notes and highlights are within the book and can be easily moved around
– Sync PDF which I am reading currently through Google Drive or DropBox

Besides popular DropBox, Google Drive and SkyDrive, a nice cloud sync option is which offers about 10 GBs of free cloud storage. On the positive side, it is integrated with Adobe Acrobat Reader which is available for all desktop and mobile platforms. But the synchronisation is not as robust as DropBox and others.

In case, I just have the ePub file, Calibre is a good tool to convert to PDF and to many other formats for that matter. I found it to be better than other options like‎. Calibre is a ePub reader also but it doesn’t allow note taking.

Read ‘Physics of the Impossible’ by Michio Kaku


Physics of the Impossible: A Scientific Exploration into the World of Phasers, Force Fields, Teleportation, and Time Travel’ explores the popular science fiction concepts in the light of hard scientific facts. In doing so the author explains scientific theories in a way that is very engaging and comprehensible for a layman. Along the way author alludes to interesting details about how the modern scientific theories developed overtime and what are current areas of research which could make the impossible possible. All analyzed concepts are categorized based on how long it might take for human civilization to achieve them if ever.

In my opinion, this is a definite read for only one interested in science or science fiction.

Boomerang: Travels in the New Third World (book)


The book is about the travels of Micheal Lewis to western countries which are worst affected by the recent financial crisis. It explores how the crisis has devastated Iceland, Greece and Ireland; and its impact on Germany and US.

The author sketches quite a few stereotypical characters from the countries he visited, I not sure how much they correspond to reality.

Overall, It is an interesting read.

BPM Basics for Dummies (Book from Software AG)

Read ‘BPM Basics for Dummies (from Software AG)‘. It is a basic introductory book on Business Process Management, similar to the one by IBM.

The book talks about:

  • how BPM relates to other technologies like SOA and process improvement standards like Lean, Six Sigma, CPI, SCOR etc.
  • the  value proposition of BPM (Automation, Agility, Flexibility, Visibility, Collaboration, Governance).
  • the best practices and pitfalls of BPM implementation
  • BPM technology architecture

The book is available at Software AG site.

Book: Code Complete 2nd Edition

Code Complete, Book Cover

Just finished reading Code Complete 2nd edition by Steve McConnell. It is a reference book for programming best practices. Generally programming best practices books focus on requirement gathering, design, quality and management aspects of the software development process, in contract, “Code Complete” focuses on the coding or construction phase. It consists of practical insights and research data to support the practices presented in the book.  It is an excellent resource for coding standards, design guidelines and other aspects of writing code.

A big section of the books is about how to structure the code, how to indent it, how to comment it, how to name variables, how to use control structure etc. It contains code snippets in different programming languages to demonstrate the good and the bad practices. Other sections discuss the design, testing, integration, debugging and other areas.

I high recommend reading it and using it as guide for day-to-day programming activities.

Following are few important points from the book which I recollect now:

  • Code readability and maintainability are far more important then being efficient in terms of code performance or number of lines of code. The more readable the code is, the longer is the lifetime of the code. Readable code is easier to fix and enhance. It reduces the complexity of the software which is the single biggest challenge in programming.
  • Performance tuning and optimization should be performed after profiling and identification of bottlenecks, not as we write the code. Research has shown that 20% of the code runs 80% of the time. Significant performance gains can be achieved by targeting the right segment of code . Having performance tuning and optimization as one of the coding guidelines is counter productive as it affect readability and maintainability.
  • Information hiding is the key to good design. When breaking down the software into packages and classes, information hiding should be one of the guiding principles. It is important to design the packages before breaking the program down into classes. Some rules should be set to limit the inter-dependency of packages.
  • Code inspection is a very effective method of detecting bugs early. It could be even more effective than system testing. Research data shows that no single defect detection technique is able to find enough errors, more than one technique should be combined to achieve better quality. Some of the techniques are formal inspection, pair programming, unit testing, system testing, beta testing, prototyping etc.
  • Inheritance is one of the key concepts of object oriented programming, but if not used with care it also has a potential to introduce more complexity than it reduces. In the desire to model the real world, at times we introduce too many interfaces and deep inheritance hierarchies which complicate the code. When we are using inheritance, Liskov substitution principle (LSP) is a good thing to keep in mind.
  • Its good to program defensively, asserts should be used to check for pre-conditions and post-conditions of a function. Asserts are meant to check for errors which should not occur at all while exception handling should be used to handle errors which may occur at times like unavailability of network.
  • Before we start to code a function, it would help if we write the pseudo code first. Then we can put the pseudo code as comments inside function block and add actual code after each pseudo code line. This helps in coding and also saves the time required to comment the code.
  • Quality is free, it is basically a reallocation of resources. It’s free because if we don’t allocate proper resources to QA, later on we will have to incur more cost in fixing the quality issues.
  • Design is a wicked problem. Wicked problem is a problem which cannot be defined clearly until its partially or completely solved. Till the time we code the design we cannot be absolutely sure that design is correct. Moreover, coding is not just a mechanical exercise of converting design into a computer language program, instead it is a creative process. From this point of view, we should have more focus on construction phase of software project.