您好、欢迎来到现金彩票网!
当前位置:9号彩票app下载 > 工作流 >

【泡泡新闻社】Keras之父对软件开发的三十三条箴言

发布时间:2019-06-27 15:31 来源:未知 编辑:admin

  1. 代码不仅仅是用来执行的,也是一种跨团队的交流方式,一种向他人描述问题解决方案的方式。可读性并不是锦上添花,而是编写代码的基础。这包括清晰地分解代码、选择自解释的变量名,以及插入注释来描述任何隐含的内容。

  2. 不要想着你的pull request能为升职加薪做什么,想想你的pull request能为你的用户和社区做什么。一定要避免“有目的的贡献”。如果对产品没有明显的帮助,就不要添加任何功能。

  3. 品味也适用于代码。品味是一个有约束的满足的过程,它被添加了正则项以追求简单。保持对简单的bias。

  4. 可以说不。只是因为有人要求某个功能并不意味着你应该这样做。每个特性都有超出初始实现的成本:维护成本、文档成本和用户的认知成本。总是问:我们真的应该这样做吗?通常,答案是否定的。

  5. 当你对支持新用例的请求说是时,请记住,实际上添加用户请求的内容通常不是最佳选择。用户专注于他们自己的特定用例,您必须以对整个项目的整体性和远景来应对这一点。通常,正确的答案是扩展现有的特性。

  6. 投入时间和精力于持续集成,以实现完整的单元测试覆盖。确保您处于一个可以自信地进行代码编写的环境中;如果不是这样,则从构建正确的基础设施开始。

  7. 不要事先计划好一切。试试看结果如何。尽早恢复错误的选择。确保创建一个可行的环境。

  8. 好的软件使困难的事情变得容易。仅仅因为一个问题一开始看起来很困难并不意味着解决方案必须复杂或难以使用。工程师们经常拍脑门提解决方案,这会带来不必要的复杂性(让我们使用ML!让我们建立一个应用程序!让我们添加区块链!)实际上,也有其他更容易但没那么明显的替代方案。在编写任何代码之前,请确保您选择的解决方案足够简化。从第一原则着手。

  9. 避免隐式规则。您发现自己开发的隐式规则应该总是显式的,并与其他人共享或自动化。每当你发现自己提出一个重复的、准算法的工作流时,你应该设法将其形式化为一个文档化的过程,这样其他团队成员就可以从中受益。此外,您应该在软件中寻求自动化这样一个工作流程中任何可以自动化的部分(例如,正确性检查)。

  10. 在设计过程中,应考虑选择的总体影响,而不仅仅是希望关注的,如收入或关注增长。除了正在监控的指标之外,你的软件对其用户、对世界的总体影响是什么?是否存在超过价值主张的不良副作用?在保持软件的实用性的同时,您可以做些什么来解决这些问题?

  1. 你的API具有用户,因此它具有用户体验。在你做的每一个决定中,都要记住用户。对你的用户有同理心,不管他们是初学者还是有经验的开发人员。

  2. 在使用API的过程中,始终尽量减少对用户施加的认知负荷。自动化可以自动化的内容,最小化用户所需的操作和选择,不要公开不重要的选项,设计简单和一致的工作流。

  3. 简单的事应该是简单的,复杂的事应该是可行的。不要为了特定的用例而增加常见用例的认知负荷,即使是最低限度的。

  4. 如果工作流的认知负荷足够低,那么用户应该可以在完成一次或两次之后凭记忆使用它(而无需查看教程或文档)。

  5. 寻求一个与领域专家和从业者的心理模型相匹配的API。有专业知识但对你的API不熟悉的人应该能够使用最少的文档直观地理解你的API,主要是通过查看一些代码示例并查看哪些对象可用,以及它们的签名是什么。

  6. 一个参数的含义应该是可以理解的,而不需要任何关于底层实现的上下文。必须由用户指定的参数应该与用户关于问题的心智模型相关,而不是与代码中的实现细节相关。API是关于它所解决的问题,而不是关于软件在后台的工作方式。

  7. 最有力的心理模型是模块化和层次化的:在高层次上简单,但在细节上精确。同样,一个好的API是模块化和层次化的:易于使用,但又富有表现力。在对更少的对象使用复杂的签名和使用更简单的签名的更多对象之间,有一个平衡点。一个好的API有合理数量的对象,具有相当简单的签名。

  8. 你的API不可避免地反映了你的实现,特别是对数据结构的选择。为了实现直观的API,你必须选择与领域专家的心智模型相匹配的数据结构。

  9. 用心设计端到端的工作流,而不是一组原子特性。大多数开发人员通过思考“应该提供哪些功能?让我们为它们提供配置选项”,来进行API设计。相反,应该思考:这个工具的用例是什么?对于每个用例,用户操作的最佳顺序是什么?支持此工作流的最简单的API是什么?API中的原子选项应该能够满足高级工作流中出现的明确需求,它们不应该因为有人可能需要它而被添加。

  10. 错误消息,以及通常在与API交互过程中提供给用户的任何反馈,都是API的一部分。互动性和反馈是用户体验不可或缺的一部分。要用心设计API的错误消息。

  11. 因为代码是种交流,无论是命名项目还是变量,命名都很重要。名字反映了你对问题的看法。避免使用过于通用的名称(x, variable, parameter),避免使用太长的和特定的命名模式,避免使用可能产生不必要摩擦的术语(master、slave),并确保在命名选择中保持一致。命名一致性意味着内部命名一致性(不要混用“dim”和“axis”)和与问题域的既定约定的一致性。在确定名称之前,请确保查找域专家(或其他API)使用的现有名称。

  12. 文档是API用户体验的核心。它不是附加组件。投入精力于高质量的文档;你将看到比投入于更多功能更高的回报。

  13. 演示,不要说:您的文档不应该讨论软件是如何工作的,它应该展示如何使用它。显示端到端工作流的代码示例;显示API的每个常见用例和关键特性的代码示例。

  1. 职业发展不是你管理了多少人,而是你产生了多大的影响:你的软件存在的世界和不存在的世界间的差别

  2. 软件开发是一种团队合作,它与技术能力同样与关系有关。做个好队友。在你的旅途中,保持与人的联系。

  3. 技术从来都不是中立的。如果你的工作对世界有任何影响,那么这种影响就有一个道德方向。我们在软件产品中做出的看似无害的技术选择调整了技术的使用条件、使用激励、谁将受益、谁将受苦。技术选择也是道德选择。因此,对于您希望选择支持的价值观,一定要慎重而明确。把你的价值观融入你的创作中。把你的价值观融入你的创作中。

  4. 自我指导-代理您的工作和环境-是生活满意度的关键。确保你对周围的人给予足够的自我指导,并确保你的职业选择为你自己带来更大的代理权。

  5. 做世界需要的,而不仅仅是你想要的。技术人员往往过着简单的生活,专注于满足他们自己特定需求的产品。寻求机会来扩大你的生活经验,这将使你更好地了解世界需要什么。

  6. 当做出任何有长期影响的选择时,把你的价值观放在短期的自利和传递的情感之上,比如贪婪或恐惧。知道你的价值观是什么,让它们指引你。

  7. 当我们发现自己处于冲突中时,最好停下来承认我们的共同价值观和共同目标,并提醒自己,几乎可以肯定,我们是站在同一边的。

  8. 生产力归根结底是高速决策和执行偏差。这需要a)良好的直觉,它来自经验,从而在只有部分信息的情况下做出正确的决策;b)敏锐的意识到什么时候更仔细地行动,等待更多的信息,因为错误决策的成本会大于延迟的成本。在不同的环境中,最佳速度/质量的决策权衡可能存在很大差异。

  9. 更快地做出决定意味着在你的职业生涯中你会做出更多的决定,这将使你对选择的正确性有更强的直觉。经验是生产力的关键,更高的生产力将为你提供更多的经验,从而良性循环。

  10. 在你意识到你缺乏直觉的情况下,坚持原则。在你的整个职业生涯中,建立一个行之有效的原则清单。原则是形式化的直觉,比原始的模式识别(需要对类似情况有直接的经验)更具有泛化性。

http://dralvaro.com/gongzuoliu/510.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有