tags:

views:

104

answers:

5

To me it seems that classroom training gives us building blocks of technique, but rarely covers actually building anything large or complex, and even when classroom training covers "large projects" you are still just graded on getting the correct end result.

Where should people turn to learn the larger aspects of software design? Specifically where can people go to learn actual "best practices" when starting to work on mid size to large projects/systems? (With less theory and more application)

(My focus would be on .NET and C#, but the question is valid for any technology)

+6  A: 
  1. Code complete - by Steve McConnell
  2. Pragmatic programmer - by Andy Hunt and Dave Thomas
  3. Facts and Fallacies of Software Engineering - by Robert Glass
smok1
+1  A: 

One place: industry. This could be as an internship if you're still in college, or as a job if you're out of college. There's no place for you to learn the standard practices like at a company full of people developing software.

Dan Lorenc
standard practices != best practices
anon
+2  A: 

Code code code Make mistakes, fix them Ask for help - SO is great for that!

n8wrl
+2  A: 

In my experience, the only way to learn how to design and develop large projects is to work on such a project. This is inevitable when you consider that most large project problems are to do with communication - between team members and between code modules. This is something that is almost impossible to simulate in the classroom (I've tried).

anon
A: 

even when classroom training covers "large projects" you are still just graded on getting the correct end result.

You seem to be awfully concerned about how projects are graded. You shouldn't be.

Your grades are of course important, but they shouldn't be the end-all be-all of your university experience. You are there (presubably paying tens of thousands of dollars) to learn. Get your money's worth. Good grades should be a by product of the fact that you are learning the material well, not the other way around.

Your large projects in school will probably be your most important learning experience. Mine was where I first really came face to face with issues like:

  • The importance of design before coding
  • Communications between developers working the same project
  • Dealing with the very real differences in capabilities between developers
  • Dealing with the differences in motivation between developers
  • The nessecity of using revision control
  • Software integration

The whole experience ended up being a major topic in the job interview for the job I finally got after graduation.

I think we got a B on our project, but that was totally beside the point.

T.E.D.