[QUOTE=timmwagener;23420]I know what you mean. I had a job lately where i discovered that i needed to raise my design/code architecture skills. While i have a formal education on programming, and i would consider myself one of the (rare!?) programmers that always value readability, maintainability over performance (at least on the first iterations) maybe only knowing the language intricacies/knowing the OO basics sometimes doesnt take you all the way. I felt like i needed to get an understanding of the bigger picture, thats why i lately read a book about design patterns. While many buddies have deemed that uneccessary for plugin writing, i think it always helps![/QUOTE]
You might want to look into software engineering, which concerns itself with application architecture, the software lifecycle, re-use, maintainability, development methodologies and system design. In general you would find programmers who’re good with designing system (i.e. software engineers), and programmers who’re subject matter experts for a particular area, e.g. 3D programming, GPU programming, databases, etc. It’s a specialization big-picture vs. details.
For example you may have a guy in the team who’s really good at writing Max plugins, knows the Max API inside out. Yet that guy may not be the right person to get the picture of designing a big pipeline, consisting of many components, and being developed in many different languages.
In software engineering, and actually in any professional development setting, maintainability and re-usability always comes before performance, always! That’s the same reason why we don’t overclock our workstations. Reliability and robustness is king, and downtime and time spend on maintenance is bad! Sure performance is important, but it should never compromise reliability and maintenance. Performance wins are usually not that big, and the time gained is usually less than the time you lose if your software is crap and causes problems.
Anyway, I can recommend the following books:
“Software Engineering for Game Programmers” by Flynt is a good intro to software design and engineering (I think you can ignore the UML, although being able to read UML diagrams makes understanding those pattern books easier!; and ignore that the example game sucks). The book pretty much covers what a good SE textbook would cover, like Sommerville’s Software Engineering (but that one costs you an arm and a leg!)
“The Object Oriented Though Process” by Weisfeld is also a good intro to OO. But maybe more interesting for people who didn’t do much OO - i.e. you’re coming from Max Script or another language with questionable OO implementation.
“Code Complete 2” by McConnell - definitely get that one. Should be in every programmer’s library. Very readable, very solid advice how to write readable, solid and maintainable code. Can be applied to pretty much any language. I also found “The Pragmatic Programmer” a good read, but it feels a bit more abstract. Also covers ideas, programming philosophies and approaches for better code and more robust applications.
“Design Patterns” by Gamma is definitely the classic patterns book. Get it. But I don’t recommend it as first book as the patterns are not very concrete (but you will learn the power of this later, as you get into looking for patterns). Plus the examples are in C++. Instead I recommend getting Fowler’s “Patterns of Enterprise Software Architecture” first. The patterns feel less abstract and more focused, and they’re all presented in Java, which is basically C#. If you’ve worked with HTML or databases you will quickly recognize the patterns and get the whole pattern idea. After that, move to Gamma. Design patterns are a big part of the whole reuse idea, as the solutions presented by patterns can be reused.
Regarding your friends’ views, I would say that we will find both people in the TA tools coding field, and that eventually you may want to decide what to focus on - for example specialize in algorithms, APIs, 3D math to become the best programmer for highly specialized code, or get the knowledge so you can design bigger systems, like pipelines, content management system, and understand how to make it all work together. But both groups of programmers need each other when designing a big system. In any case, the time for “script kiddy TAs” is over. If you cannot program maintainable and reusable code: get out… or learns something new and adapt
[QUOTE=Theodox;23418]I’d recommend reading The Art of Readable Code - it’s got a lot of hints that work well regardless who you like in the big theological divisions in programming paradigm land.[/QUOTE] Interesting. Thanks for sharing.