I have been programming in Java for the past 2 years and now i want to get into Designing applications. So far i am only into coding ie; i am given design document/class diagram etc and asked to code. Now i want to learn how to design, i mean i want to lean when should a class be interface not a concrete class, coming up with design given the requirements , design techniqies and all the other aspects of desiging.
To learn all these could you plese suggest any series of articles/books etc.
I have tried reading Headfirst Design Patterns, but even though i am able to grasp few design patterns, i am still not able to get on to the desiging apllications on my own.
Please help.
Design Patterns are quite advanced examples of design features built on fundamental principles such a Separation of Concerns, Coherence and Extensibility. If you are at the stage of wondering about Interfaces and Classes you may need to do some reading about fundamental OO ideas. For example read about SOLID principles. So I would not fisrt buy a book, I would start at that article and follow links and googles from there.
Then, reading is not enough, you need to do.
Next time you get a spec, study it. Understand the problem that is being solved, then go home and design it yourself. Compare your attempt with the spec. Or consider alternatives to the spec you are given, suppose you didn’t have an interface here, or a Factory there why would this matter?
Ideally, your growth would be enabled if you leaders would start to give you less specified problems and allow you to design them. Project pressures may prevent that. In which case I think you need to do work in your own time. Pick some small projects and work on them. This may be tough unless you have mentors, but I think reading without doing is not going to advance you so quickly.