Red Huang

Red Huang

compat 2021 -> interop 2022a

This series will update the summary and reading notes of Google's software engineering principles.

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 are not yet completed in this project; more hidden assumptions have been established.
  • 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 chance" and "maintainable."

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

Clever or Ingenious vs. Flawless and Maintainable: Depending on the categorization of programming style, code that relies on fragile or unreleased content falls into the former, while following best practices and planning for the future falls into 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 the opportunity for optimization could result in a 25% increase in computational resources.

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

Left Shift#

Shifting security issues left becomes particularly important when problems are discovered early in the development process, as it reduces costs.

image

Investment in Decision Making - Distributed Architecture#

As the codebase grows larger, the compilation time also increases. Investing more resources in local machines can be costly, as high-performance desktop development machines are often idle, which is not a good investment.

Developing a distributed build system and deploying it in a 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." However, as these costs increase, we cannot foresee all of them.

Software Engineering vs. 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.