title: Recommendations for how to do OOP design
body: <p>I find that whenever I begin writing an app in Java/C#, things start off good, but over time, as the app becomes more complex, it just gets more and more complicated.  I've become aware of the fact that I'm not very good at design and high level architecture.  All my classes become fairly strongly coupled and the design isn't "elegant" at all.  I'm fairly competent at "low level" programming.  That is, I can get just about anything done within a function or a class, but my high level design is weak and I'd really like to improve it.  Does anyone have pointers to techniques, books, etc. that would be helpful in making me a better software engineer?</p>