Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

This question already has an answer here:

I've been on the constant road of learning new concepts in OOP, Software Design, Architecture, etc. But there are times when you are in a team where those concepts are foreign to them and they don't have the time or the same eagerness to learn as you.

The problem is if you design your code the "right" way, the people who code with 2kLOC classes won't understand it. Would you sacrifice good coding principles to support your team? What about a scenario where this will be a long term arrangement?

share|improve this question

marked as duplicate by MichaelT, gnat, GlenH7, Bart van Ingen Schenau, Ampt Jun 3 at 20:54

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

    
more often I've had to code in deliberate errors in order to make things work "the same as the legacy code" where the legacy code contained errors management didn't want to get customers to know about by releasing new versions that yielded different (correct) results... –  jwenting Jun 1 at 3:27
add comment

2 Answers 2

up vote 13 down vote accepted

Welcome in the real world.

I worked with hundred of different developers around the world, in startups and large enterprises. The vast majority of them doen't understand advanced concepts, and won't in the future. It's just too complicated to master something unless you spend over a decade in that particular field. Very few are able to do that.

That's why I'm really upset when one of my developers is too "CV driven" and try to implement design patterns that do nothing better but allow him to put something new in his resume (or the title "Architect"), while the rest of the team is strugling to understand and maintain HIS code.

That's why I think that a good developer is not the technically supperior, but the most pragmatic of the pack:

An excellent developer try to convert a functionnality the business ask by maximizing the ROI.

IMHO, keeping things simple, is the way to go. If you want to do the "right" stuff, do it at home. Your boss is especting something else from you.

share|improve this answer
    
Honestly, I think I'm one of the guys you're describing. But aside from the CV and experience farming, my greatest beef is that I don't want future maintainers (which could be me too) to be swallowed up whole by 3000 lines of code by a class that "does everything". Or the obvious memory consumption created by instantiating one of these god-classes. IMO they aren't even the bigger design patterns, they're just basic OO principles I've come to live by. –  Jonn Sep 23 '10 at 14:02
4  
I didn't say code like a moron. I said "keep things simple". –  user2567 Sep 23 '10 at 14:55
    
I didn't mean it that way. But well, that's what I indicated in the question. This isn't in a case where I'm being asked to stop implementing command patterns or MVP or MVC. It's more of along the lines of me being asked to put all stuff into one class. I do get your point though. –  Jonn Sep 23 '10 at 15:20
1  
MVC is just fine, because it is becoming a standard way of doing things. –  user2567 Sep 23 '10 at 15:21
    
Technical superiority should mean that you in fact eschew needless abstraction/complexity in favor of legible/maintainable code. This answer leans a little bit too much in the direction of writing for the lowest common denominator which can be pretty damn low if your company outsources from the right kind of organization. Just because somebody might not understand a basic principle that they should, doesn't mean you should violate it willingly for instance. –  Erik Reppen Jan 20 '13 at 17:03
add comment

I think there's a difference between what you're referring to and technical debt.

Technical debt is when you deliberately do a hacky and quick implementation with the full knowledge that you will have to change the design at a later stage. Similar to financial debt this can be beneficial to a project but you need to be aware of it and eliminate it at a later stage.

In terms of deliberately not using certain language features - I have been in that situation as well. I remember I once implemented anonymous delegates just after C# 2.0 came out, and a few months later I saw someone had simply deleted my delegate and replaced it with a normal method. They simply didn't understand the code :-(

Having said that, it's not always a bad thing. Let's keep it simple.

share|improve this answer
1  
+1 for the deleted anonymous delegate. Had similar experience. I started burying such things deep in to libraries where such programmers need not go. –  James Sep 23 '10 at 13:58
1  
Or you could probably add the "system generated snippet". XD –  Jonn Sep 23 '10 at 14:08
    
Haha, sneaky - nice tip –  Jaco Pretorius Sep 23 '10 at 17:16
    
Picked it up on the comments question on SO. XD –  Jonn Sep 26 '10 at 12:28
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.