January 20, 2006 05:21 by
dgood
Object Oriented. Two words. Ubiquitous. Synonymous with high-speed, low-drag, modern programming techniques. Ask a coder, developer, programmer, hacker, or software engineer if they've heard of Object-Oriented programming and you're likely to get a funny "are you serious" look. Of course they've heard of it. Heck, ask your bank teller or the clerk at the Wa-Wa and they'll probably give you the same look. Everyone has heard of object-oriented programming.
Unfortunately, it seems that that's the extent of it. They've all heard of it but few can explain it. Perhaps the most unfortunate thing about it is, they all believe that they know what object-oriented means - "I wrote a Java applet. Java is object oriented, of course I know what it is."
I'm an applications manager. One thing that means is, I interview potential developers. One of my standard line of interview questions is intended to probe the candidate's object-oriented knowledge. I generally begin by asking the person to describe their experience. Invariably, they start explaining their C++ / Java / C# knowledge, which is almost a dead giveaway that the follow-up questions are pointless. Indeed, Java is an object-oriented langauge, but that doesn't make the programmer any more knowledgeable about object-oriented techniques.  Having a hammer doesn't, in itself, make you a carpenter.
My follow-up questions involve basic object-oriented concepts such as polymorphism, coupling, cohesion, orthogonality, and in some cases I seque to questions about design patterns. Surprisingly few candidates can get past the first question or two. I've had every reaction from blank stares to one candidate who just started making things up. I'm truly surprised at the lack of understanding and knowledge of what object-oriented really means. Let me be clear, if you've used Java or C#, that doesn't mean you understand object-oriented concepts to the extent you should. Perhaps you really do, but not simply because you've written "Hello World" as a Java applet. If you don't understand basic oop concepts such as inheritance, polymorphism, and encapsulation, then you don't understand oop. Again, simply reciting the vocabulary words without explaining them is not sufficient.
Moving beyond the basics, in order to be effective and really understand the object-oriented paradigm, it is necessary to understand concepts such as cohesion and loose coupling. Abstraction is also a necessary skill. It's great to understand inheritance but it's just as important to understand where to use it and where not to use it. Should you create an abstract class, inherit from it, and use a class factory, or should you use composition? What about class invariants and type-conformance? These are requisite concepts to understand. It is necessary to grasp them in order to contribute to large applications and systems.
Invest some time and a little money and pick up a book or two. There are volumes of books on object-oriented design and programming. Pick one up at the local bookstore, order one from amazon, but get a book. Read the venerable
Design Patterns by the gang of four. There are countless web sites devoted to the topic, read them. But above all, practice, practice, practice. OOP is not a spectator sport.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5