字字珠玑,AI大牛Keras之父写给程序员的20条建议!

594 阅读5分钟

Keras是现今最流行的开源深度学习框架之一,无论是在工业界和在学术界都有深厚的影响力。发明Keras的是一位来自Google的大牛,畅销书《Python深度学习》的作者,Francois Chollet。这位哥们牛到什么程度?简单地举有3个数据:Google Scholar单篇论文引用次数3.8k+,Github单个项目STAR数量41k+,Medeium单篇博文获赞数15.8k+

作为享誉世界的人工智能大牛,Francois 还有另外一个身份,那就是软件工程师 (Software Engineer),俗称码农。再高大上的算法,也需要通过编程(Coding)来落地,并以软件产品的形式去服务用户。因此,编程能力和软件工程思想,对任何的算法研究者/算法工程师/软件开发者来说,既是基本功,也是需要持续打磨的重要本领。

那么,作为码农的Francois,是怎么看待编程和软件工程的?最近,他的一篇在Medium上获得**15.8k+**个赞的博文,就是回答这个问题的。虽然文章的题目是《写给自己的编程笔记》(Notes to myself on Software Engineering),但其实也是写给所有程序员的。经过我翻译,归纳和整理,最后提炼出来的干货建议共20条,一一列举如下。

1,可读性(Readability)是编程的基础性要求。因为代码不仅仅是用来执行的,代码更是团队成员之间的一种沟通方式

2,编程需要品味(Taste)。什么是品味?品味是一种对简洁性(Simplicity)的无限渴望和极致追求

3,学会拒绝需求。每项新需求的开发成本都会超出最初的估计,尤其是维护成本,文档成本和用户的认知成本等。经常问问自己:我们真的应该这样做吗?答案通常是否定的。

4,当确实需要支持新的需求时,正确的做法往往是基于现有功能进行扩展,而不是完全另起炉灶。

5,针对持续集成(CI)的投资是值得的,这样可以确保所有人处于一个自信(信心比黄金还重要)的编程环境中

6,没有提前计划好一切没有关系,先尝试一下然后看看结果如何。像回退(Revert)有问题的代码一样,尽早回退通过实践发现是错误的决定

7,一个问题看起来困难,不意味着它的解决方案必须复杂。在编写任何代码之前,请确保自己所采取的解决方案不能变得更简单。从第一性原理出发去处理所有事情

8,API拥有用户,因此也需要注重用户体验。保持对用户的关心,无论用户是初学者还是经验丰富的开发人员。

9,始终寻求减少用户在使用API过程中的认知负担:自动化可以自动化的内容,最大限度减少用户所需的操作和选择,不要暴露不重要的选项,设计简单和一致的工作流程。

10,API的命名和参数的命名应该是聚焦在API解决了什么问题(What),而不在API如何解决问题(How)。

11,聚焦端到端的工作流,而不是一组离散的原子功能。程序员不要问“应该提供哪些功能”,而应该问“用户场景是什么?对于每个用户场景,用户最佳的操作顺序是什么?怎么样用最简单的API支撑这个工作流?”。

12,错误消息(Error Message),以及任何在交互过程中向用户提供的反馈(Feedback),都是API的一部分,并直接影响用户体验。因此,请精心设计API的错误消息和反馈机制。

13,文档是API用户体验的核心。投资高质量的文档,会收到比投资新功能更高的回报

14,什么是好的文档?好的文档是以读者为中心的。它不应该讨论软件的工作原理,而应该说明如何使用这个软件;它应该展示端到端的工作流,并配以代码示例;它应该展示API的常见用法和关键功能的代码示例。

15,职业发展不在于能够管理多少人,而在于能够影响多少人

16,软件开发是一种团队工作(teamwork),它不仅关乎技术能力,更关乎人际关系。在你前进的道路上,请记得与人保持联系 (Keep in touch with people)。

17,技术永远不会中立,所有的技术决定都是伦理决定。设计软件产品时,不能只考虑技术因素,还应该考虑软件的伦理或道德影响。

18,创造世界需要的软件,而不仅仅是你自己希望拥有的软件。技术人员需要利用一切机会去拓展生活体验,让自己更好地了解世界的真实需求。

19,在不同的环境中,决策速度和决策质量之间的权衡会有较大差异。有时候,依据良好的直觉可以在信息不充分的情况下做出正确的决定;有时候,则需要推迟行动以等待更多信息,因为此时错误决策的代价比延迟决定的代价更高。

20,经验是提高生产力(Productivity)的重要因素,而更高的生产力将为您提供更多的经验。这是一个良性循环

Francois Chollet的建议,您怎么看?欢迎大家发表自己的看法,谢谢!

我是肖哥shelwin,一个高质量软件工程实践者和推动者。欢迎扫描下方二维码,添加我的个人公众号测试不将就,获得更多自动化测试, 持续集成, 软件工程实践, Python编程等领域原创文章。

公众号