5

Can you mention some advanced OO topics or concepts that one should be aware of?

I have been a developer for 2 years now and currently aiming for a certain company that requires a web developer with a minimum experience of 3 years.

I imagine the interview will have the basic object oriented topics like (Abstraction, Polymorphism, Inheritance, Design patterns, UML, Databases and ORMs, SOLID principles, DRY principle, ...etc)

I have these topics covered, but what I'm looking forward to is bringing up topics such as Efferent Coupling, Afferent Coupling, Instability, The law of Demeter, ...etc.

Till few days ago I never knew such concepts existed (maybe because I'm a communication engineer basically not a CS graduate.)

Can you please recommend some more advanced topics concerning object oriented programming?

Songo
  • 6,548
  • 4
  • 48
  • 89
  • please check [this](http://en.wikipedia.org/wiki/Object-oriented_programming) – dreamcoder Jun 14 '12 at 10:08
  • also, [this](http://en.wikipedia.org/wiki/Antipatterns) – linkerro Jun 14 '12 at 10:12
  • study [solid](http://programmers.stackexchange.com/tags/solid/info "what's this? find more details at Programmers tag wiki") – gnat Jun 14 '12 at 12:15
  • If you haven't already, see this: http://programmers.stackexchange.com/questions/46716/what-should-every-programmer-know-about-web-development – Steven Evers Jun 14 '12 at 13:41
  • I recommend you read Joel's recommendations for interviewers - http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html , then you will perhaps start asking better questions. Also prepare yourself for FizzBuzz http://c2.com/cgi/wiki?FizzBuzzTest – Doc Brown Jun 14 '12 at 14:29
  • @DocBrown I read this article before. A nice read indeed :D If I remember correctly it took me 3 mins to do the fizzbuzz and test it :D – Songo Jun 14 '12 at 14:36
  • And by "prepare yourself for fizzbuzz" we don't mean "memorize a fizzbuzz algorithm" but "make sure you can write some code in the languages you claim to know, particularly your best one." – JohnMcG Jun 25 '12 at 16:58

2 Answers2

2

Brother oh brother, nobody who'll actually interview you (i.e. other programmers) is going to want to hear you talk about vague sophisticated terms. You'll sound exactly as what you trained for - a guy who read a bunch of Wikipedia pages.

Instead, focus on understanding the advantages of abstraction over implementation, prepare some examples beforehand, explain the fallacies of tight coupling, how to recognize them, and how to avoid them (actually Law of Demeter comes in handy here - but it's important to know when to use it and why).

That's really all you need to know to not screw them over with bad code. I mean, that's really what they're worried about, that they'll get a new guy who's going to come in and make a big mess. You need to focus more on letting them feel they can trust you, rather than impress them.

A very good presentation of these topics is in the book Agile PPP by Bob Martin.

Yam Marcovic
  • 9,270
  • 2
  • 27
  • 29
  • I'm agree with you. If you don't know about the Law of Demeter, sure it's good to understand the concept but not just before in interview; you must integrate it in your day to day work to really understand the benefits and if possible, lives the advantages in a long term project. In an interview, if a guy just talk about design pattern and object oriented, I will no be very impressed. What is good about object oriented is how great that's change your life in a positive way. – Samuel Jun 25 '12 at 16:03
  • 1
    If they don't seem interested in these things, run like the wind, because they don't need to worry about a new guy making a big mess - they've already made one. Unless by some fluke they do all their coding in, say, a really awesome functional language in which case OOP isn't very relevant. – Matthew Walton Jun 25 '12 at 16:04
  • 1
    Functional programming won't save you from making a big mess. :) Only good skills, good judgement and a whole lot of luck can help you there. – Yam Marcovic Jun 25 '12 at 19:19
0

From initially reading your post I would have said: "you're well prepared". But actually it sound's like Yam has some points there.

I was put in the position to lead a couple of interviews and also be part of the decision process, so I may say you'll be surprised once you sit on the other side of the table, to what extent people tend to misinterpret their situation as a job applicant:

  1. They need YOU - you in contrast have a skill (telling from your writing you haven't been sitting on your hands during that two years) on a rather advanced level that's dearly hunted for by the industry
  2. They are people, too - they need to get at least the imagination that they could work together with you on a daily basis, and you won't get the job if you feel less comfortable and maybe become a shy or more silent version of yourself.
  3. Never be afraid to say straightaway that you don't know something. If you have read across the topic in question even ages ago and know only vaguely what it is, state that clearly. That's of course after being asked for something specific. If there are any any "elephants in the room", such as maybe an undocumented gap in your CV, put the story clear b4 you are asked for it.

Always keep those in mind. I cannot tell which things will get you the job at whatever specific company you are applying at, but i can tell you what kind of guys always got a full thumbs up and a 2nd invitation:

  • if you're showing in an authentic way that this job IS your passion, that you are BURNING to solve problems of this kind and just get the machines do all this wicked stuff, that you are an open-minded, constantly evolving character which one can also "agree-to-disagree" but still cooperate constructively with, then you have a your foot in the door
  • bringing along some example of your nicest kung-fu along (nothing academic, something cool or handy that best-relates somehow to what they are doing you can show on the laptop that you'll bring along) can help push them over the edge
  • research as much as you can about what they do, who their customers are and what currently might be the most prominent project. Find something, just a spark maybe, that really interests you, ASK THEM QUESTIONS. If it's a big corporation, try to understand which exact sector (horizontal) and level (vertical) point of the hierarchy you are applying to join for.

The best thing is: if you manage to follow these - of course depending on the company's size and HR practices - you might not be put into an oral-exams-like situation at all. That is, if the interviewer gets the feeling that you really enjoy understanding and exploring the stuff you do, and that you're not just the Mysql or MongoDb fanboy reciting some features of their favourite "golden Hammer" (see Anti-Patterns) without ever having a clue on the factual backgrounds.

Nobody needs to be a human dictionary of computer science, nowadays we need creators, inventors, problem-solvers.

Of course, all of this just being my personal two cents from that perspective change experience.

P.S. The most ground-breaking readings to me in my career were "Clean Code" by R.C.Martin and "Pragmatic Programmer" (Hunt/Thomas) which managed to restore my will to continuously battle mediocre or "just-good-enough" code and identify and improve suboptimal processes where I see them. Somebody having embraced those books would always immediately shoot to my top candidate list to give the job to.

Philzen
  • 101
  • 3