• Alan Kay

    Stuff you must know: object-oriented fundamentals

    Fri 14 May 2010

    I’ve run job advertisements recently that ask for people “who visit sites like Joel On Software and Stack Overflow”. This has led to an increase in the number of job seekers who during the phone interview claim to read Joel On Software and Stack Overflow. Perhaps that’s because the job advertisements are working, and attracting the people who do read those blogs. I don’t think so however because scratch the surface and these same people don’t know much, if anything, about those sites and few of them have a Stack Overflow account that shows a history of participation. People read the job ads and craft their answers to meet the requirements. They’re telling me what I want to hear.

    So I’m hesitant to blog openly about what I’m looking for in a software developer for fear that I’ll get people faking it and learning the minimum to get past the interview questions. On the other hand maybe some people will actually go and learn and fill the gaps in their knowledge, making themselves better programmers. I’m willing to risk it, in the hope that more people applying for jobs will have some grasp of the basics.

    So here’s the inside scoop: if you call yourself a computer programmer in 2010 then you MUST understand object oriented programming fundamentals. Employers look for it, and it matters; OO pervades almost every aspect of modern programming and you should understand it even if you are coding with a non OO language. And you must understand those concepts in depth. Don’t learn just enough to get by. Don’t skim the surface. Learn it, use it, apply it code and practice it. You need to understand object-oriented concepts in sufficient depth that you can really explain how they work.

    There’s absolutely no excuse not to be an expert on the fundamentals of object-oriented programming. If you are a computer programmer then this is part of your job. It’s not hard if you put your mind to it, it just takes time and effort and practice. It doesn’t matter if you started coding with Cobol and then moved onto Dbase and Dbase 2 before shifting up to Clipper and then Visual Foxpro – you must know the OO concepts. It doesn’t matter if you are a graduate or a 20-year coding veteran – you must know the OO concepts. In 2010, you absolutely MUST know this stuff if you wish to program computers.

    Make it your mission. Fire up your web browser, set aside whatever time you think you will need. Take any learning approach that you works for you, but please go and make yourself a deep expert in the fundamentals of OO.

    Take this handy list of object-oriented concepts and use it as your study guide – I borrowed it from a great article by Steve Yegge. It’s an excellent overview of the concepts you should know. You don’t need to be an expert on everything on this list, but you should certainly aim at having at least passing familiarity with all these concepts, with detailed understanding in some areas. Start at the top and go through all 23 items and do your homework.

    1. class, object (and the difference between the two)
    2. instantiation
    3. method (as opposed to, say, a C function)
    4. virtual method, pure virtual method
    5. class/static method
    6. static/class initializer
    7. constructor
    8. destructor/finalizer
    9. superclass or base class
    10. subclass or derived class
    11. inheritance
    12. encapsulation
    13. multiple inheritance (and give an example)
    14. delegation/forwarding
    15. composition/aggregation
    16. abstract class
    17. interface/protocol (and different from abstract class)
    18. method overriding
    19. method overloading (and difference from overriding)
    20. polymorphism (without resorting to examples)
    21. is-a versus has-a relationships (with examples)
    22. method signatures (what's included in one)
    23. method visibility (e.g. public/private/other)

    You owe it to Alan Kay (pictured) to know your OO.

    andrew.stuart@supercoders.com.au

    Copyright © SuperCoders 2010 - 2011 All Rights Reserved.

    Image credit: Wikimedia Commons