views:

329

answers:

12

I have a couple of employees that, while technically proficient, do not seem to fully grasp the nuances of building objects. Because C# is an Object Oriented Language (hey, no laughing from you Java people!! Don't think I didnt hear that!!) they understand that they are creating classes but they dont really understand how those classes are used and what is or isnt good design (or even what the difference is between a class and an object.)

If they were deficient with Data Access I would give them a book on ADO.NET. If they dont understand Regular Expressions, I would point them to websites to help them write and test regexes. But I cant seem to find anything online that gives good tutorials on writing effective classes (in any language really.)

Can anyone suggest some resources such as books or blogs that you found helpful with these topics?

Thanks

+15  A: 
  • The Pragmatic Programmer: "This is a great book for programmers who have learned the mechanics of programming, maybe in college, but don't quite feel secure deciding what to do. It's like the difference between drafting and architecture. What you learned in that class in college was drafting, and you can draw beautifully, but if you still feel like you wouldn't quite know where to begin if someone told you to write a P2P music-swapping network all by yourself, this is the book for you." --Joel
  • Code Complete: "The encyclopedia of good programming practice, Code Complete focuses on individual craftsmanship -- all the things that add up to what we instinctively call "writing clean code." This is the kind of book that has 50 pages just talking about code layout and whitespace." --Joel (NB imo there's more to it than semantics)

Also see what-is-the-single-most-influential-book-every-programmer-should-read

For the record, most of my 9-5er colleagues aren't going to read 6 books on coding, two is a stretch. But these are the definitive two.

Dustin Getz
+1 for explaining WHY these are great books and what we should take when reading them
MedicineMan
+1  A: 

There's Effective C# class design handbook - Wrox/Apress I think publish it but it sounds like you need a more basic intro to OO design and development. I've given Lhotka's Business Objects book out to VB6 newbies in the past to get them up to speed and that has worked quite well in most cases.

Chris W
+1  A: 

There aren't many sites because this is something you can't learn quickly like ADO.NET or regular expressions. Designing good object oriented systems is an art and needs years of experience to master. You start with the basic principles and then continue with design patterns.

Darin Dimitrov
+1  A: 

Effective Java

Yes, it's about Java instead of C#. Not all of the items are applicable - and it's worth you reading it first so you can advise on those items - but its general advice is extremely good.

There are also Bill Wagner's Effective C# books:

I've skimmed Effective C# and my impression was that it wasn't quite up to Effective Java's (hugely lofty) standards, but it's still definitely worth reading. I haven't read More Effective C# yet. (One day, one day...)

Jon Skeet
I thought the "Effective" series was best for describing good style vs design -- which I think the OP is looking for. Am I mistaken?
MedicineMan
@MedicineMan: Each Effective book is different - Effective Java contains both style and design, IIRC.
Jon Skeet
While I wouldnt mind style, I am more concerned with design. I am facing a problem where I have a technically proficient team that doesnt understand nuances. So we have objects that try to do too much, and programs that dont ever manage to fit everything together.
Goblyn27
+4  A: 

Framework Design Guidelines by Krzysztof Cwalina and Brad Abrams

and

Class Design by Andy Olson

Charles Bretana
Framework Design Guidelines is an excellent reference +1
Scott Lance
+1  A: 

I'd also recommend point them at the Design Guidelines for Developing Class Libraries. Technically, this is more about creating the design that's usable more than "effective", but the two often go hand-in-hand.

The related book (Framework Design Guidelines) is even better - and probably more relevant. It takes about the rationale behind the suggestions, and is very useful information.

Reed Copsey
+7  A: 

I always think I am writing good classes. But as I learn more about good software design, I look back at them 6 months later and realize I could have done it so much better.

Books that have really helped me are:

Design Patterns: Elements of Reusable Object-Oriented Software

Head First Design Patterns

Design Patterns Explained: A New Perspective on Object-Oriented Design

Patterns of Enterprise Application Architecture

Code Complete: A Practical Handbook of Software Construction

And a lot of reading on Domain Driven Design and Inversion of Control.

Matthew Vines
+3  A: 

You might check out the book called Head First Design Patterns By Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates. It focuses on design patterns but goes over the OO fundamentals too and ties it together with some examples. I believe the examples are JAVA syntax but its not difficult to follow from a C# perspective.

kragan
+1  A: 

Practicing DDD (Domain Driven Design) and TDD (Test Driven Development) definitely will help a lot. Besides I would suggest to learn directly from code/applications. Some of sample application (open source) are very good quality. Basically you can see how other developers are addressing the similar issues we are facing every day, such as how to define domain objects, how to create data access layer, how to do the exception handling, how to manage dependency, etc. List some of the good examples on top my head right now:

Sutekishop

CodeCampServer

Cuyahoga

BlogEngine.net

I believe there have much more. You can find some other good application/framework from Google Code Search

Liang Wu
+1  A: 

There some great books listed in this thread already. I wanted to add that if you are really serious having your team understand these principles, I feel a Study Group is a fantastic way to accomplish the goal.

So,

  1. Choose a book from one of the suggested items
  2. Ideally, purchase a copy of the book for everyone on your team that wants to participate. ( This lets them read at their own pace, take notes, etc. )
  3. Start your study group (following this advice)
  4. Each week (or up to you), agree on the portions of the book to read and cover in the next meeting. Discuss different topics each week until you have covered the portions you want your team to understand.

The benefits of the study group are numerous. If done correctly, this can be a "team bonding" exercise, which is generally appreciated as extra training as well. I find it also helps the leader/moderator as much (or more) than even the team!

Chris Melinn
While I like this idea, I dont know how well it would fly in my workplace right now.
Goblyn27
A: 

A specifically C# oriented book about objects etc is C# Design and Development: I didn't like it much but if you are looking for a discussion of the ideas around the langauge it might be good for you.

mikej