Is there a place that help people like me that have issues with the process of design? As this thread shows ( http://cplusplus.com/forum/lounge/90985/ ) I think of the whole picture and overwhelm myself. Sadly I can't seem to break down things easily. Upon Googling I just get sites that talk about design and what it is, but not really any steps or projects that help you learn or teach yourself a process for designing. I feel this is one major issue that a lot of programmers face. I mean I've been programming for years now and always thought the language was my problem so I never really focused on design. Now I find that none of the books or tutorials really focus on design and give you such simple programs that you really don't learn design that well from them.
Any recommendations would be greatly appreciated. Sorry for posting this to the lounge, but I felt it really didn't fit in any of the other forums (though, now I think about it and probably beginner would have been appropriate).
What exactly do you mean by program design? Do you mean what classes you write, how they interact, inheritance trees, etc.? Or do you mean how your programs themselves are designed in terms of usage and appearance (i.e. layout, how input is taken, etc.)? If it's the former it's mostly something that comes from practice by taking on ever larger and larger tasks. If it's the latter I believe it comes from more of a natural aesthetic talent, though basic principles can be learned.
Design is definitely the hardest part of programming.
I try to think of a top-down approach. When designing something, I would think "how would I want to use this code?" And I map out a crude API for it. Then once that's in place it's much simpler to implement.
But I think computerquip is mostly right. It comes down to a combination of experience, creativity, and being able to envision something that is simple and functional. That said, there's a lot of books and established patterns that you can read and learn from, to take advantage of other people's experience.
Yeah, I wasn't sure what I needed to search for in regards to books, e-books, or sites as I was wanting to take advantage of other's experience. I'm more than willing to buy something to help me learn the patterns and ease my anxiety when it comes to making anything I think up.
I usually just think about all the classes and functions and stuff I need, then I write the header files. I can sort of see how it fits together in my head as I go, and any flaws I notice can easily be fixed before writing the source files. Then I write the main function and such to see what I actually need, and then I implement just the stuff I need at the time. Then I remove what I didn't use, unless I know I'm going to use it.
I mean I've been programming for years now and always thought the language was my problem so I never really focused on design.
I can give you homework, if you want to make yourself useful.
Things like: write an MD5 checksum utility (using C++11 features), post the code for others to scrutinize, then when you feel it's well polished, publish it in an article, in which you explain what the code is doing.
Gain some momentum by small steps first, is what I suggest.
You just have to relax. If you ever feel overwhelmed just take a step away from the computer and think about it without worrying about code at all. Just say "How will I accomplish this one part?" and once you have it in your head, either put it on paper in a more structured manner or start writing code. Repeat this for every part of the project, thinking about how each piece will interface with each other. If you can get a simple interface for other parts to interact with, the rest is much easier IMO. Then you don't have to worry about changes affecting anything but the current piece.
Yeah, the top-down method sounds like a simple enough method, but I'm the kind of person where I have to see it in action to understand it and learn to apply it to my own ideas. Problem is that most of the sites I've found only talk about it and really don't show it in full process. I never thought about it until now, but no book I have that teaches C++ ever bothers to cover design even in an appendix. I went back and looked and most of the books I have just explain parts of the code that is used which is new, but don't really bother showing or explaining the design of the programs (which would be pointless seeing as most are simple), but I feel it is an important element to cover even for beginners. Though that may just be my silly rambling on things that are separate.
Can't seem to find a good site that shows top-down design by example for any language.