How do I get better at technical design?

So the way I program is split up my tasks, one for technical design, and the other for code (construction).

In technical design usually starts off with me looking at a goal to achieve and attempting to figure out the minimal features required to achieve it. I then start using notepad to scribble out a draft of program flow and design. Once basic flow is achieved, I use UML to plot out classes and objects. I start prototyping each of the classes (this time I use crimson editor for the tabbing) and their rough implementation in pseudo code.

The problem is I don't realize all the issues I need to address through this system. Sometimes it requires construction/coding to see flaws. I take precautions in the design phase but sometimes something unexpected arises during coding that requires me to go back to the tech design (I try to keep them updated in case I need to look up the design for aged code).

Is there some sort of technical design step I am missing? (sorry if this is a dumb question but I never had formal education in programming)
Um... By doing it a lot? Have you tried reading books?

Sometimes it requires construction/coding to see flaws.
The only things I've seen so far that can handle arbitrary complexity to an arbitrary level of detail aren't running on human brains. If you're looking for a way to predict all possible problems that can arise from design decisions during the design phase, prepare to be very disappointed.
Learn the fundamentals of data structures and algorithms
Learn the SOLID principles of software design: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
Learn design patterns so you can talk to other engineers about your design: http://c2.com/cgi/wiki?SoftwareDesignPatternsIndex
Learn your language.
Learn how other people use your language. Adopt idioms, not idiolects.
Adopt test-driven development (TDD): http://www.boost.org/doc/libs/1_40_0/libs/test/doc/html/index.html
Get involved in community software development so that you get feedback from peers.

Honestly, I would say that the SOLID principles and TDD have helped my coding more than anything. And they go hand in hand. It is hard to test software that isn't constructed with the SOLID principles. When components are hard to test, I know that I have not designed the components correctly
I've read quite a few books, but maybe there is one I'm missing. I pretty much sleep with "code complete" underneath my pillow and have read it back to back at least 5x within 2 years. Other suggestions for reading material?

Thanks pan, reading through the first link.
I have to agree with helios.

Reading books is not the best primary way to learn C++ or design. At best they will give you a
superficial and ephemeral knowledge.

IMHO the best way is to practice, practice, practice, and supplement your practice with book knowledge
second.



Topic archived. No new replies allowed.