Planning large programs

I was wondering what is the best way to plan out large applications. I use Design Documents as of now but that does not seem to help enough. I heard that using a diagram is helpful too but I dont know. Any suggestions?
> what is the best way to plan out large applications.

IMHO, by partitioning the large program into separate smaller programs (some of which may be libraries). Loosely coupled; the goal is that these smaller programs can be developed, debugged and tested in isolation.

As these four independent programs, each designed to do a simpler task, can co-operate to do a more complex task:
cat my_database.txt | sort <sort options> | pr <paginate and format options> | lpr <spooler options>

Rule of Modularity: Write simple parts connected by clean interfaces.

As Brian Kernighan once observed, “Controlling complexity is the essence of computer programming”. Debugging dominates development time, and getting a working system out the door is usually less a result of brilliant design than it is of managing not to trip over your own feet too many times.

Assemblers, compilers, flowcharting, procedural programming, structured programming, “artificial intelligence”, fourth-generation languages, object orientation, and software-development methodologies without number have been touted and sold as a cure for this problem. All have failed as cures, if only because they ‘succeeded’ by escalating the normal level of program complexity to the point where (once again) human brains could barely cope. As Fred Brooks famously observed, there is no silver bullet.

The only way to write complex software that won't fall on its face is to hold its global complexity down — to build it out of simple parts connected by well-defined interfaces, so that most problems are local and you can have some hope of upgrading a part without breaking the whole.
- ESR, 'The Art of Unix Programming' http://catb.org/~esr/writings/taoup/html/ch01s06.html
Thats more for building the software though isnt it? I'm talking about planning it out before even writing any code at all, like using a diagram to structure it or something.
You are talking about software architecture (description), aren't you?

Perhaps you can start here:
https://en.wikipedia.org/wiki/Software_architecture
https://en.wikipedia.org/wiki/Software_architecture_description
Somewhat yes, but I mean like planning on paper, like design documents and diagrams and stuff, is there a different way like that, thats a good way to plan out a program?
Typically, one starts with a block diagram. Initially on drawn on a white board.
https://en.wikipedia.org/wiki/Block_diagram
Alright cool, I'm looking into some software that would help me do that, do you happen to know of any that are free and specifically designed for programmers? Also I was told that I should also look into computer architecture or something like that to help with programming, is there any books and/or websites for beginners that would help me understand stuff like that?
Software architecture sounds like a great idea. A building is static and does not change while it's used. This is basically contrary to software. Designing software without keeping the details in mind will usually fail.

So the best is what JLBorges suggested: Make [controlable] modules and let them act as independant as possible.
For those modules you may use software architecture if you want, but that's a rather esoteric decision.
Alright i'll give them a look, thank you.
Topic archived. No new replies allowed.