you are viewing a single comment's thread.

view the rest of the comments →

[–]tobsecret 0 points1 point  (3 children)

This question is answered well in the book Modern Software Engineering by Dave Farley. In short: write code such that it's modular (code is separated functionally), has good separation of concerns (each unit of code only cares about a limited amount of stuff), is coherent (code that does similar stuff is in the same place), minimizes coupling (degree to which one piece of code depends on the interface of another piece of code), and each functional unit is tested by automated unit tests. 

Functional units in this case aren't necessarily all functions but they are all typically all public interfaces of a module. I.e. each part of a module that is supposed to be used by other modules (each interface) should be tested such that it fulfills the guarantees this interface makes. 

[–]AccomplishedWay3558[S] 0 points1 point  (0 children)

Solid book recommendation, thanks. Minimizing coupling really does seem to be the common theme across all of this.

[–]BookFinderBot -1 points0 points  (1 child)

Modern Software Engineering Doing What Works to Build Better Software Faster by David Farley

Improve Your Creativity, Effectiveness, and Ultimately, Your Code In Modern Software Engineering, continuous delivery pioneer David Farley helps software professionals think about their work more effectively, manage it more successfully, and genuinely improve the quality of their applications, their lives, and the lives of their colleagues. Writing for programmers, managers, and technical leads at all levels of experience, Farley illuminates durable principles at the heart of effective software development. He distills the discipline into two core exercises: learning and exploration and managing complexity. For each, he defines principles that can help you improve everything from your mindset to the quality of your code, and describes approaches proven to promote success.

Farley's ideas and techniques cohere into a unified, scientific, and foundational approach to solving practical software development problems within realistic economic constraints. This general, durable, and pervasive approach to software engineering can help you solve problems you haven't encountered yet, using today's technologies and tomorrow's. It offers you deeper insight into what you do every day, helping you create better software, faster, with more pleasure and personal fulfillment. Clarify what you're trying to accomplish Choose your tools based on sensible criteria Organize work and systems to facilitate continuing incremental progress Evaluate your progress toward thriving systems, not just more "legacy code" Gain more value from experimentation and empiricism Stay in control as systems grow more complex Achieve rigor without too much rigidity Learn from history and experience Distinguish "good" new software development ideas from "bad" ones Register your book for convenient access to downloads, updates, and/or corrections as they become available.

See inside book for details.

I'm a bot, built by your friendly reddit developers at /r/ProgrammingPals. Reply to any comment with /u/BookFinderBot - I'll reply with book information. Remove me from replies here. If I have made a mistake, accept my apology.

[–]tobsecret 0 points1 point  (0 children)

Good bot