Fog Creek Software
Discussion Board




improving design skills

How can I improve my OO design skills?

Andrew R.
Monday, July 14, 2003

Do more OO design.  Seriously

Cracker
Monday, July 14, 2003

>Do more OO design.  Seriously <

Then how do I know if I'm getting any better at it?

Andrew R.
Monday, July 14, 2003

You can know if you're getting better by testing your code to see if it is easier to update/maintain than your previous projects.

If it takes half as much time to do something now than it took before, you're improving.

Brent P. Newhall
Monday, July 14, 2003

What Brent said and other than the usual metrics the word Gestalt seems appropriate.  It has been my experience that it coalesces as the feeling of tightness.

Hard to specify exactly, but you'll know when you see it. Sorta like irony. <g>

Cracker
Monday, July 14, 2003

Why do you think you need to? What are you trying to do better?

Steven E. Harris
Monday, July 14, 2003

It's like in high school when you spend a week staring at an algebra formula then all of a sudden you get the answer and understand how you got there. Like a light bulb going off. The day I finally "got" OO programming is still one of my best programming days.

Chris

Chris
Monday, July 14, 2003

Do more OO programming, like everyone else says, but also find a local user group, some friends, your boss, anywhere you can find an experienced programmer, and ask them to review your code. It's fun for the whole family!

Fred2000
Monday, July 14, 2003

Related question, has anyone read Peter Coad's "Java Design" book - http://www.amazon.com/exec/obidos/tg/detail/-/0139111816/qid=1058219538/sr=1-3/ref=sr_1_3/103-2301827-0699028?v=glance&s=books

Amazon reviews seem to be rather polarized, though I seem to like the reasons given by those who like the book.


To answer the original question, I think it's important to focus on intentions - make sure you understand the "whys" of OO and you should be able to better understand the "how tos".

My current thinking is that the code I create has to be as flexible as possible (a stated aim of OO) and this tends to help me find the appropriate level of abstraction for a set of classes - think, "what different scenarios do I need to manage here (with as little effort as possible)?". The project I'm working on has also illustrated how making your code externally configurable is a good (great) thing so I'm now drawn to approaches/patterns that support external configuration. In Java (and so I suppose .NET too) I also found using Interfaces really helped me create better designs.

And of course, practise makes perfect.

Walter Rumsby
Monday, July 14, 2003

"How can I improve my OO design skills?"

_Much_ better than "just practicing" is:

*  Working with an experienced professional.

If that's not possible:

* Working with and through a well-designed system created by an experienced professional.

Just like any art - you have to study the masters to find yourself.

Robert
Monday, July 14, 2003

i would like to recommend a book

Object-Oriented Analysis and Design with Applications
(2nd Edition), Grady Booch

- it is a good book because it consists of examples; i.e. follows the design process through (not just listing of a notation + some rules)

Michael Moser
Tuesday, July 15, 2003

Good points here that it helps to work with someone else.

Some people like working with a peer, so that both of you figure it out.  Others like working with a mentor, who can pull you out of a quagmire.  Either way, yes, this is good advice.

Brent P. Newhall
Tuesday, July 15, 2003

I would recommend the _Design Patterns_ book by Gamma et. al. The _Refactoring_ book by Fowler is also interesting, if only because it hints at how many different ways there are to design something.

Christopher Wells
Tuesday, July 15, 2003

Try the 'Design Principles' documented on Object Mentor's site.
Then try to apply those to the design you are doing.  (esp. Open Closed Principle, Liskov Substituion Principle', Dependancy Inversion Principle and Interface Segregation principle)

Those design principles help you answer the question ' is a particular design good or bad in the given context.'.

The articles changed my perspective about the OO Design.

http://www.objectmentor.com/resources/articleIndex

Nitin Bhide
Thursday, July 17, 2003

*  Recent Topics

*  Fog Creek Home