Scott Myers' More Effective C++
From his book, ISBN#0-201-63371-X

    1. Distinguish between pointers and references.
    2. Prefer C++ style casts.
    3. Never treat arrays polymorphically.
    4. Avoid gratuitous default constructors.
    5. Be wary of user-defined conversion functions.
    6. Distinguish between prefix and postfix forms of increment and decrement operators.
    7. Never overload &&, || or ,
    8. Understand the different meanings of new and delete.
    9. Use destructors to prevent resource leaks.
    10. Prevent resource leaks in constructors.
    11. Prevent exceptions from leaving destructors.
    12. Understand how throwing an exception differs from passing a parameter or calling a virtual function.
    13. Catch exceptions by reference
    14. Use exception specifications judiciously.
    15. Understand the costs of exception handling.
    16. Remember the 80-20 rule.
    17. Consider using lazy evaluation.
    18. Amortize the cost of expected computations.
    19. Understand the origin of temporary objects.
    20. Facilitate the return value optimization.
    21. Overload to avoid implicit type conversions.
    22. Consider using op= instead of stand-alone op.
    23. Consider alternative libraries.
    24. Understand the costs of virtual functions, multiple inheritance, virtual base classes and RTTI.
    25. Virtualize constructors and non-member functions.
    26. Limit the number of objects of a class.
    27. Require or prohibit heap-based objects.
    28. Use smart pointers.
    29. Use reference counting.
    30. Use proxy classes.
    31. Make functions virtual with respect to more than one object.
    32. Program in the future tense.
    33. Make non-leaf classes abstract.
    34. Understand how to combine C++ and C in the same program.
    35. Familiarize yourself with the language standards, ARM and the ANSI/ISO

we specialize in Intelligent Business Rule Management Systems (iBRMS) - the same thing that used to be called rulebased systems by the AI companies.