Martin Fowler

Let him introduce himself at his website . He is with the Uncle Bob crowd, and actually one of my favorites of that group. He has some worthwhile articles (usually the short ones) on his site; however as it goes for these Agile folk, most of it is far more complicated than they ever should be (example: nearly all these 'design patterns'). Some notable articles/advice Martin has: 'YAGNI', 'Fluent API'.

rvalues and lvalues

I'll get a link to this later, but it was defined as a standard ways to define certain values universally in programming languages. Rvalues being a pure literal value which can not be assigned to, or modified. A program which only has rvalues is pure math. Lvalues are anything that can be assigned to. You can get them by dereferencing, or indexing an array. You can modify the contents they hold. They are what make some programming languages not mathematical.