This question already has an answer here:
I have a colleague who has basic* programming skills and who wants to get a working knowledge of object-oriented programming concepts, with particular emphasis on C# (to 3.0 at least). He's generally computer-literate and has a science background (Masters in Engineering, IIRC).
What book would be most appropriate for him?
Or is there some other resource that would be better?
I'd expect that he'd need to get reasonable explanations of concepts such as encapsulation, inheritance/composition/interfaces, polymorphism/overriding/overloading and some idea of what makes a "good" (for some - hopefully objective - value of "good") design. SOLID?
* (literally: he's fairly adept with Excel VBA macros)