   All of programming! Need Overview
  Ok, so I have taken a bunch of courses in C++, Java and C#. But I still don't have a overall idea of what all need to be done to accomplish a relatively big program. Most of my experience has been creating simple programs.I want some reference (book or website) that gives me a overview of pretty much everything in programming! Doesn't even have to have any code just how everything connects.This should include strengths and weaknesses of programming languages, engines, xml or whatever else that needs to be taken into account before thinking a solution to any task that would need programming. I don't know if what I want is clear enough, but I just want to know all my options before I can think of specializing in something.   
  Code complete?   ;  You're not going to find this, because it doesn't exist. It couldn't possibly exist. Your question is just too broad. Instead try searching these (and other) forums for answers to questions as they arise. If you want to compare C# to C++, look it up! If you want to learn about Ogre and compare it against other 3D rendering engines, look it up! There's more information than you could possibly use scattered across the internet, if you're willing to look for it.And as always, the best way to learn about these things (assuming you're not being paid) is to just jump in and try them.   ;  The closest thing I can think of is Coders at Work: http://www.amazon.ca/Coders-at-Work-Peter-Seibel/dp/1430219483After that, I would look a Code Complete 2: http://www.amazon.ca/Code-Complete-Steve-McConnell/dp/0735619670Then, if you want to know more theory you should get The Art of Computer Programming: http://www.amazon.ca/Art-Computer-Programming-Boxed-Volumes/dp/0201485419/Another classic is Design Patterns: Elements of Reusable Object-Oriented Software: http://www.amazon.ca/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612Then get a bit lower level with Write Great Code Vol. 1&2: http://www.amazon.ca/Write-Great-Code-Understanding-Machine/dp/1593270038http://www.amazon.ca/Write-Great-Code-Low-Level-High-Level/dp/1593270658At that point you'll have a pretty high-level view of programming, and you can start investigating particular language paradigms. You can learn Lisp, Haskell, Prolog, Smalltalk, x86 Assembly, Erlang, Python, Ruby, and &#106avascript for a tiny cross-section.Maybe have a look through some of the free Google Tech Talks, or Stanford and MIT lectures online: http://www.youtube.com/user/GoogleTechTalksBy the time you finish all this, technology will have shifted and you should look at what the latest developments in software architecture and engineering are. You should have enough of a foundation to decide for yourself at that point.Any of these books are good by themselves as well, in my opinion. Good luck!EDIT: Just wanted to highlight that Coders at Work is probably the closest to what you're looking for.   ;Quote:Original post by musafir2007Ok, so I have taken a bunch of courses in C++, Java and C#. But I still don't have a overall idea of what all need to be done to accomplish a relatively big program. Most of my experience has been creating simple programs..Quote:Original post by musafir2007but I just want to know all my options before I can think of specializing in something.Your question is too broad.but if you want to know how to accomplish a relatively big program and have more options to implement something complex. Look at this book : "Design Patterns". or some books about OO design and Software engineering.http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&s=books&qid=1271665572&sr=8-1Hope it helps.;  Just as someone else mentioned the question your asking is too broad to be covered in a single book.I also had this question unanswered for a long time, and to be honest I was only ever able to answer it after a shortwile in my job (Build & Release Engineer).Here's some advice however: go to sourceforge and pick a software type that your interested in, download the source and read through it. Try and get an understanding of what the author is doing, even get some pen and paper and draw some pretty little pictures to help you visualize the code. I've done this in the past and found it very helpful.   ;  Troll programming.reddit.com for a few hours a day for the rest of your career.Programming is so vast it can't possibly contained in one book or tutorial. It takes a whole Internet to learn how to program.Designing large programs is a struggle. Large programs aren't good programs, because as the size increases, the complexity of a system begins to explode. Large programs are ugly. They are buggy. They are not fun at all to work with. When you work on a large project, the biggest issue you face is figuring out how to organize everything. This is essentially what "system architecture" is all about. If you ever see a system architecture book, there is nothing about code anywhere inside. But to be sure, it all boils down to how to find a "home" for every class you write in Java or C#.Much of learning strengths and weaknesses is learning the tools yourself. I can tell you XML is a shitty, shitty format, and I could rant on about why it is. But you can't really understand why it is until you feel the pain of working with it first hand.On the other hand, you may have used XML before. You may have enjoyed it, and enjoyed what you could do with it. You might not understand why I have such a negative opinion when yours was so great. In that case, it's because you don't have experience with other tools to use as a baseline. Maybe you haven't used JSON, which is much more elegant. Maybe you haven't had to work with other people's custom, bloated XML configuration files as much as I have. Maybe you haven't had the problems I have where someone in your company is hand-editing XML files and neglecting to properly close tags. You have to learn these things through experience. Most common programming tools are free, so there's no reason other than lack of time or motivation not to play with them. Learn a new language every year and learn it well. Write tools that make your life easier. Over time, your ability to foresee the important details in a program will grow, and you will be able to write larger programs with greater ease.One other piece of advice: join an open source project. Find a tool you can be really passionate about. It could be an application, an OS or kernel, a library, a programming language, a tool, a server, or whatever. Then try to break into the community. Read through the source code. Don't worry about the details of how every function works -- just concentrate on the overall architecture. Ask on the mailing list for an easy bug to fix from their bug tracker database. Do your best to solve the problem. Write a patch for the bug. Submit it. It will come back to you and they will tell you why it's wrong. Then go back and try and account for what they told you. All you have to do is spend enough time looking at the code and asking yourself questions about how it might work, and soon enough, it will all make sense.