Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.Sign up
Design and Management
So you made some "temporary" fixes to your codebase to save yourself from having to think too much, duct-taped on those "minor suggestions" from upper-middle management, "reworked" some things to fit a specification written in marketing jargon, then you kicked your feet up and took a nap. You're then gently awoken by a warm breeze on your face, and the soothing sounds of, wait, that's people screaming! Your eyes jolt open. That warm breeze on your face is heat from your project ablaze. "How long was I out?" you ask yourself, pausing to think of how silly it is to ask yourself that question. You shout to the nearest person running for their life " YOU! What's today's date?!". Their answer horrifies you. It hasn't been minutes, hours, or even days. You've been asleep for years. You've been asleep for years and you've grown a beard and that beard is now on fire too. What the hell happened?
The longer a software project goes on, those "temporary" things will begin to calcify if left unattended. The consequences of this are dire. They can result in security issues, nests of bugs resulting from side-effects, and sometimes prompt entire other projects to form just to mitigate your net losses from complacency.
Here are resources for programmers and project managers alike for knowing when to tame your code beast, taming it, and maximizing your profitability vector magnitude potentials 2.0, all at the same time.
Antipatterns are the inverse of Design Patterns and Managerial Procedures. Where no thought for design is in play, antipatterns emerge and introduce entropy into your project.
- The Big Ball Of Mud A very thoughtful description of how code turns into something unmanageable and how to avoid very common traps.
- http://en.wikipedia.org/wiki/Anti-pattern a comprehensive list of antipatterns and some info about them.
- Technical debt is one of the many consequences of letting antipatterns roam free.
- Book: AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis is a quick read, and goes into detail about the topics listed in the Wikipedia link above. It's an excellent complement to the Gang of Four's book.
- Book: The Gang of Four's Design Patterns is a tedious read and goes into painstakingly intimate detail of abstract design concepts. If you want to learn about useful abstractions you ought to read this (exactly once).
Making use of acquired code
- Book: Confessions of a Used Program Salesman is a little dated but relevant nonetheless. Horror stories from being a "used car salesman" of software, and exactly how modularity and documentation increase profits and cohesion.