The law that governs the speedup of using parallel computing resources on a given problem.
The law indicates that an algorithm that can be parallelized typically by splitting it up into two parts, a part that can be parallelized, and a part that cannot.
Details can be found:
Principles in Object Oriented Design (OO) of software:
- Single-responsibility principle: A class should have one and only one reason to change, meaning that a class should have only one job. The fewer number of interfaces implemented the better.
- Open-closed principle: Objects or entities should be open for extension but closed for modification. The class should be extensible without modifying the parent class.
- Liskov-substitution principle: Let q(x) be a property provable about objects of x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T. Each subclass or derived class should be substitutable for its base or parent class.
- Interface-segregation principle: A client should never be forced to implement an interface that it doesn’t use, or clients shouldn’t be forced to depend on methods they do not use.
- Dendency-inversion principle: Entities must depend on abstractions, not on concretions. It states that the high-level module must not depend on the low-level module, but they should depend on abstractions. You should inject interfaces/abstractions into objects and not concrete implementations.
Design Patterns: Elements of Reusable Object-Oriented Software
In the software engineering world this is one of the canonical books on OO design patterns. You should read it through at least once. I tend to go back to it from time-to-time when working on new projects as a reference to that design patterns that might be most applicable for what I am trying to build.
A favorite Joel on Software article about character encoding.