文章首发公众号:CoderMrWu ,每周分享优质技术文章和经验,欢迎你们关注,共同交流。java
最近特别喜欢看传记经验类的文章,由于能够从中找到一些本身正在经历或即将经历的问题的答案。以史为鉴,就是这个意思。下边是一个程序员自我提醒的清单,摘了些本身觉着比较有价值的整理翻译分享给你们。英文好的能够去看原文:Notes to Myself on Software Engineeringpython
代码不仅是要执行。代码也是跨团队交流的一种手段,是一种向他人描述问题解决方案的方式。可读代码不只仅是一种良好的编码习惯,它应该是编写代码的基础要求。这其中包括清楚的分解代码、选择意义明确的变量名和对任何隐式代码添加注释等。程序员
不要问你提交的程序能为你下次的营销活动带来什么,要问你的程序能为你的用户群体带来什么,要避免以“显式的贡献(conspicuous contribution)”为目标。若是不能知足你产品最初的设计目标,宁愿不添加任何新功能。golang
品味这个词一样能够拿来形容代码。经过对知足对简单性的要求来知足本身的品味,这个是一个约束知足问题(constraint-satisfaction process)。保持对简单性的偏执追求。安全
有时候,某人要求一个功能时,并不意味着你必定要去作这个功能,你彻底能够说“不”。有不少超出最初设计预算(维护成本、文档成本和用户的认知成本)的功能,这时候你要问“咱们真的须要这样作吗?”,答案每每是“彻底没有必要”。markdown
当你打算支持一个新的用例(use case)请求时,记住不要仅仅从表面上去实现用例功能。用户的请求,每每都是站在他们本身的特殊我的的角度。你应该整个项目构架和将来规划上考虑。通常,正确的作法是扩展该功能,而不是简单修改。数据结构
把更多的精力投入到持续集成,争取更多的单元测试覆盖率,确保本身在一个有安全感的编码环境中。模块化
能够不提早计划全部事情,根据事情的进展看结果。可是要及时纠正错误的事情,让本身处在一个正确的轨道上。oop
好的软件,可使困难的事情变得简单。事情一开始看起来很难,并不意味着它的解决方案就很难或很复杂。工程师常常会使用反射解决方案,这种每每会使问题复杂化(添加 ML、构建新的 APP、添加区块链)。在编写任何代码时,确保使用了最简单的方案。要用最根本、最简单的方式来处理问题。单元测试
在软件设计过程当中,你应该考虑软件的总体影响,而不只仅是某个功能模块。除了监控相关指标外,你的软件对用户,乃至社会有什么影响?有没有你不但愿看到的负面影响?这些你是否能够采起必定措施来解决掉?
Design for ethics. Bake your values into your creations.
你的 API 也是有用户的,即也有用户体验一说。因此,在你作任何决定时,都要考虑到你的用户。要站在用户的角度,无论他们是菜鸟仍是经验丰富的老手。
在用户使用你的 API 时,尽量下降用户的认知难度。隐藏复杂不重要的部分,减小用户的使用成本。设计听从简单一致思惟模式和工做流程。
参数的含义应该是在不了解上下文的时候就能很好的理解的。参数应该和用户对问题的思惟模型有关,而不该该与代码的实现细节有关。API 应该与解决的问题有关,而不该该与后台的工做方式有关。
好的思惟模型是模块化和分层的:从高层上来讲很简单,可是细节也很精准。一样,好的 API 也是模块化和分层的:易于实现,但表现力又强。
你的 API 的实现是你的一个实现选择,特别是数据结构,你应该选择和天然领域专家思惟模型贴近的直观结构。
设计 API 时,应该是一组原子功能。确保以最简单的方式知足上层用例工做流,而不是由于“可能用到”而添加没必要要的功能。
错误消息,是 API 与用户交互的一个反馈,交互性和反馈是必不可少的。
文档是用户体验 API 是的核心,高质量的文档,会使用户有高质量回馈。你的文档,不该该讨论软件的工做方式,而应该是使用方法。更多的实例代码会使文档更友好、实用。
Productivity boils down to high-velocity decision-making and a bias for action.
职业生涯的进步是不你管理多少人,而是你有多少影响力;
软件开发是一个团队合做的工做;社交能力和技术能力同样重要。成为一个好的队友,和其余人保持良好的联系。
技术永远不会中立,在作选择的时候,有受益者,也会有受害者。将你的价值观融入到设计中,保持谨慎和明确。
自省,是生活满意度的关键。确保你对你的工做和生活的彻底掌握。
做者介绍:码农吴先生,专一python/golang/java/devops等技术的学习经验及资源分享~ 学习路上,让咱们共同前行,相信每一段路,都是一个故事~