惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
MyScale Blog
MyScale Blog
The Hacker News
The Hacker News
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
GbyAI
GbyAI
Vercel News
Vercel News
量子位
Apple Machine Learning Research
Apple Machine Learning Research
Recent Announcements
Recent Announcements
美团技术团队
D
DataBreaches.Net
H
Help Net Security
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Y
Y Combinator Blog
S
Secure Thoughts
S
SegmentFault 最新的问题
The Last Watchdog
The Last Watchdog
Jina AI
Jina AI
Security Archives - TechRepublic
Security Archives - TechRepublic
F
Fortinet All Blogs
C
Check Point Blog
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
Schneier on Security
Schneier on Security
MongoDB | Blog
MongoDB | Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Stack Overflow Blog
Stack Overflow Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - 【当耐特】
Simon Willison's Weblog
Simon Willison's Weblog
Scott Helme
Scott Helme
S
Security @ Cisco Blogs
SecWiki News
SecWiki News
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google Online Security Blog
Google Online Security Blog
S
Securelist
L
LINUX DO - 最新话题
Forbes - Security
Forbes - Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
InfoQ
Engineering at Meta
Engineering at Meta

游牧血液

2026 年春节江西之旅 让 AI 写代码,它派了支咨询团队来 在 AI 时代,应该选择什么编程语言? 在 AI 时代,博客该怎么写? 深入理解 ISO 8601 时间间隔表示法 在 CentOS 7 上,使用 Let's Encrypt 安装免费的 HTTPS 证书 可组合数据系统之路:对过去 15 年和未来的思考 交换友情链接 MacOS 下解决 Edge 浏览器侧边栏无法关闭的问题 你使用什么作为数据库的 ID? HTTP API 的错误响应标准 只需要一个文件,在本机跑起 ChatGPT 聊一聊 Node 技术栈 个人网站迁移到 Astro 静态网站生成器 Gridsome 介绍 编程命名规范 升级到 iOS 14.2 后,Google Authenticator 挂了 SaaS 数据库架构选择 GitHub 宣布私有仓库支持无限协作者,核心功能全部免费 新一代通信协议:RSocket Let’s Encrypt 撤销 300 万个证书,检查你的证书是否在其中 使用 BFG Repo-Cleaner 修改 Git 提交历史 | 游牧血液 为 HTTP API 接口增加统一请求日志 | 游牧血液 如何做 HTTP 接口的访问控制 | 游牧血液 什么是移动原生业务软件(MNBA:Mobile Native Business Applications) | 游牧血液 JDK 的另一个选择:OpenJDK with Eclipse OpenJ9 分享开发多个线上项目后总结的 HTTP 接口设计方案 Flutter 集成友盟统计 Hugo 简明教程 Flutter 开发时,idevice_id 不能执行问题的解决 另一个静态网站生成器:Hugo
我编程 20 年的指导原则 | 游牧血液
2020-03-08 · via 游牧血液

这是一篇翻译文章,已获得作者 Alex Ewerlöf 授权,原文地址:My guiding principles after 20 years of programming

Cover

我从 1999 年开始编程,今年我已经正式编码了 20 多年。我从 Basic 语言入门,但很快就转到 Pascal 和 C,然后用 Delphi 和 C++ 学习了面向对象编程(OOP)。2006 年我开始用 Java,2011 年我开始用 JavaScript。 我曾在多个行业工作过,从机器人、金融科技、医疗科技到媒体和电信。有时候我是作为研究员,CTO,TPM(技术产品经理),老师,系统架构师或者 TL(技术领导)的角色,但是我一直坚持编码。我参与一些为数百万人服务的产品,也有一些在发布前就失败了。我曾做过顾问工作,我甚至有自己的初创公司。我在开源项目、闭源项目和内部开源项目(公司内部团体开发的专有代码)上花了很多时间。我参与过微控制器,移动和桌面应用,再到云服务器,再到最近的 Serverless。


在我编程 20 周年的纪念日上,我试图列出多年来积累起来的最重要的原则,作为我职业生涯中的指导原则:

  1. 不要与工具作斗争:库、语言、平台等等。尽可能多地使用原生的开发方式。不要技术捆绑,但也不要问题捆绑。为工作选择合适的工具,否则你将不得不为你的工具找到合适的工作。

  2. 你不是为机器编写代码,而是为你的同事和未来的自己编写代码(除非它是一个废弃的项目,或者你正在编写汇编代码)。为了能给后来者作为参考而写代码。

  3. 任何重要且有价值的软件都是协作的结果。有效沟通和公开合作。信任别人,进而赢得别人的信任。尊重人胜过尊重代码。以身作则。把你的追随者变成领导者。

  4. 分而治之。编写具有分离关注点的松散耦合的独立模块。分别测试每个部分然后一起(集成)测试。保持测试接近实际,但也要测试边缘用例。

  5. 轻视自己。不要成为代码的关键人物。对它进行优化,以便人们找到修复 Bug 和向代码添加功能的方法。解放自己,以进入下一个项目/公司。不要拥有代码,否则你将永远无法超越它。

  6. 安全是分层的:每一层都需要单独评估,但也需要与整体相关。风险是一种商业决策,与脆弱性和概率有直接关系。每个产品/组织都有不同的风险偏好(为了更大的收益,他们愿意承担的风险)。通常这三个关注点会相互冲突:用户体验、安全性、性能。

  7. 要认识到,每段代码都有一个生命周期,并且会死亡。有些时候,还没看到上线的曙光就在婴儿时期夭折了。接受放手。了解三类功能的区别:

    核心:就像汽车的引擎。没有它,产品就没有意义。

    必要的:就像汽车的备件。它很少被使用,但是当需要时,它的功能决定了系统的成功。

    附加价值:就像汽车的杯座一样。最好有一个,但产品没有它是完全可用的。

  8. 不要将您的身份附加到代码中。不要把任何人的身份附加到他们的代码上。要意识到,人是独立于他们的工作产出物之外的。不要把代码批评当成是针对你个人的,但是在批评别人的代码时也要非常小心。

  9. 技术债就像快餐。有时这是可以接受的,但如果你习惯了,它会超乎你想象地更快地杀死产品(而且是以一种痛苦的方式)。

  10. 当你为解决方案做决定的时候,假设其他条件都是一样的,按照这个优先级:

    安全性 > 可用性(可访问性和用户体验) > 可维护性 > 简单性(开发人员体验/DX)> 简短性(代码长度) > 性能

    但是不要盲目地遵循它,因为它取决于产品的性质。 就像任何职业一样,你获得的经验越多,你就越能在每个特定的情况下找到合适的平衡点。例如,在设计游戏引擎时,性能是最重要的,但在创建银行应用程序时,安全性是最重要的因素。

  11. 复制和粘贴孕育了 Bug。这就是它们繁衍的方式。总是搞明白你复制过来的内容,总是审核你导入的内容。Bug 藏身在复杂性当中。“魔法” 在我的依赖库里能接受,但是不能出现在我的代码里。

  12. 不要只为乐观场景写代码。写出好的错误提示,回答为什么会发生,如何检测到它,以及如何解决它。验证所有系统输入(包括用户输入):快速失败,但尽可能从错误中恢复。假设用户拿着枪:在你的错误信息上投入足够的努力去说服他们射击别的东西而不是你的头!

  13. 不要使用依赖库,除非导入、维护、处理它们的边界情况/Bug 和他们不满足需求时重构的成本远远低于你拥有的代码。

  14. 远离 炒作驱动的开发。但是要尽可能地学习。总是有自己的宠物项目

  15. 走出你的舒适区。每天学习。把你学过的东西教给别人。如果你是大师,你就不需要学习。让自己接触其他语言、技术、文化,保持好奇心。

  16. 好的代码不需要文档,伟大的代码有良好的文档,这样任何没有经历过演进、试错过程和明白导致当前状态的需求的人都可以使用它。未文档化的功能是不存在的功能。不存在的功能不应该有代码。

  17. 尽量避免覆盖、继承和隐式小聪明。写纯函数。它们更容易测试和推理。任何非纯函数都应该是类。任何具有不同函数的代码构造都应该具有不同的名称。

  18. 除非你完全理解了问题,否则永远不要开始编码(制定解决方案)。花更多的时间在听和读而不是编码上是很正常的。在开始编写代码之前了解领域知识。一个问题就像一个迷宫。您需要逐步地经历 “编码-测试-改进” 周期,并探索问题空间,直到您完成。

  19. 不要去解决不存在的问题。不要进行投机性编程。只有确定代码将来会被扩展,才花功夫提高代码的扩展性。当代码要被扩展时,有很大的可能性问题定义已经与代码初次编写时不同了。

  20. 大家一起开发软件时更有趣。建立一个可持续发展的社区。听。灵感。学习。分享。


我并不是软件开发方面的权威。这些都是我一路走来获得的智慧。我相信另一个 20 年后这个列表会更加完善。