Planning large programs

Oct 6, 2014 at 6:08pm
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?
Oct 6, 2014 at 6:50pm
> 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
Oct 7, 2014 at 6:13pm
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.
Oct 8, 2014 at 3:57am
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
Oct 12, 2014 at 9:07pm
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?
Oct 12, 2014 at 11:14pm
Typically, one starts with a block diagram. Initially on drawn on a white board.
https://en.wikipedia.org/wiki/Block_diagram
Oct 13, 2014 at 4:33am
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?
Oct 13, 2014 at 11:14am
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.
Oct 13, 2014 at 1:42pm
Oct 14, 2014 at 5:52am
Alright i'll give them a look, thank you.
Topic archived. No new replies allowed.