Red Huang

Red Huang

compat 2021 -> interop 2022a

This series will update the summary and reading notes of Google's Software Engineering Practices.

Time and Change#

Between one-time projects and decade-long projects, there is a transition: a project must start responding to constantly changing external factors.

For any project without an upgrade plan from the beginning, this transition can be very painful for three reasons, each of which complicates the others.

  • You are executing tasks that have not been completed in this project; more hidden assumptions have been made.
  • Engineers attempting the upgrade are unlikely to have experience with such tasks.
  • The scale of the upgrade is usually larger than usual, completing several years of upgrades at once instead of incremental upgrades.

image

We need a clearer understanding of the difference between "works by coincidence" and "maintainable."

Halem's Law - If there are enough users, your contractual commitments don't matter: your system's observable behavior will be relied upon.#

Cleverness versus Robustness: Depending on the categorization of programming style, code that relies on fragile or unreleased content is the former, while code that follows best practices and plans for the future is the latter.

If the cost of this task is considered too high and should be avoided in the future, we may still be using a compiler version from ten years ago. Missing out on optimization opportunities could cost an additional 25% in computational resources.

Stagnation is a choice, but often not a wise one.

Left Shift#

Shifting security issues to the left can reduce costs when problems are discovered early in the development process.

image

Investment in Decision Making - Distributed Architecture#

As the codebase grows larger, compilation times also increase. Investing more resources in local machines for compilation may not be a good investment, as high-performance desktop development machines are often idle.

Developing a distributed build system and deploying it in the production environment speeds up the build process for everyone. However, over time, the distributed build system itself becomes bloated.

The cost savings from implementing a distributed build system may outweigh the negative costs of "building and maintaining." But as these costs increase, we may not foresee all of them.

Software Engineering versus Programming#

Programming is the direct act of generating code, while software engineering is a set of strategies, implementation methods, and tools.

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.