Skip to content

Latest commit

 

History

History
95 lines (47 loc) · 9.07 KB

数据之外的代码.md

File metadata and controls

95 lines (47 loc) · 9.07 KB

数据之外的代码

背景与简介

周五同事做了敏捷开发的Knowledge Sharing,最近也刚好在看敏捷宣言发起人之一Robert C.Martin的《代码整洁之道》 ,结合之前看了一半的《软技能:代码之外的生存指南》,站在鲍勃大神和前辈的肩膀上,分享一点两本书中的观点以及个人浅显的理解和絮叨,作为一种“软”分享,我个人理解的算法工程师,首先是作为工程师而存在,在信息科技时代,以提升码力解决问题为第一位。

1、是否还需要代码

前段时间有新闻说会写代码的人工智能来了[1],又掀起一阵新的焦虑。目前开源架构集成越来越高,之前需要编写大量代码实现某个功能,现在只需要调用现有的接口,几行代码搞定;很多算法也已封装好,算法工程师似乎变得门槛越来越低,加之BI工具的成熟,业务人员甚至使用拖拉拽就可以实现复杂的算法,而这正是当前与过去专业工程师的岗位职责,未来会不会一步步的解构专业人员存在的部分价值,变得不用写代码?微信图片_写代码人工智能

《《代码整洁之道》的作者似乎有预见性的首先解答了这个疑惑,并在书中表示,代码自动产出的事永远不会发生,即便是人类倾其全部的直觉和创造力,造不出完全满足客户模糊感觉的成功系统,也不能把含糊不清的需求翻译成可完美执行的程序,结合作者作为敏捷开发宣言提出者之一的身份,“个体和互动高于流程和工具”,“传递信息效果最好效率也最高的方式是面对面的交谈”等理念,说明了只有业务人员和开发人员充分的沟通及时响应变化,才能开发出满足实际需求解决当前问题的软件,从哲学上解答了存在问题,所以代码还是要写[2]。

2、什么是整洁代码

我们直接从书中摘取知名从业者对整洁代码的定义如下:(个人在编辑过程中做了少许语句的调整)

1 优雅高效,简介规范

我喜欢优雅和高效的代码。代码逻辑应当直截了当,让缺陷难以隐藏;尽量便于维护,减少依赖关系;依据某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做不规范的优化,制造一堆混乱。整洁的代码只做好一件事。-----Bjarne Stroustrup,C++语言发明者

2 简单直接,干净利落

*整洁的代码简单直接;整洁的代码如同优美的散文;整洁的代码从不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控制语句。-----Grady Booch《面向对象分析与设计》作者

3 通过测试,表达清晰

*整洁的代码应可由作者之外的开发者阅读和增补。它应当有单元测试和验收测试。它使用有意义的命名。它只提供一种而非多种做一件事的途径。它只有尽量少的依赖关系,而且要明确地定义和提供清晰、尽量少的API。代码应通过其字面表达含义,因为存在不同的语言,导致并非所有必需信息均可通过代码自身清晰表达。----*Dave Thomas,OTI公司创始人

4 完美无瑕,无需更改

*我可以列出我留意到的整洁代码的所有特点,但其中有一条是根本性的。整洁的代码总是看起来像是某位特别在意它的人写的。几乎没有改进的余地。代码作者什么都想到了,如果你企图改进它,总会回到原点,赞叹某人留给你的代码——全心投入的某人留下的代码。----Michael Feathers 《修改代码的艺术》一书作者

5 通过测试,体现理念

简单代码,依其重要顺序:

  • 能通过所有测试;
  • 没有重复代码;
  • 体现系统中的全部设计理念;
  • 包括尽量少的实体,比如类、方法、函数等。----Ron Jeffries《极限编程实施》一书作者

6 深合己意,针对问题

如果每个例程都让你感到深合己意,那就是整洁代码。如果代码让编程语言看起来像是专为解决那个问题而存在,就可以称之为漂亮的代码。----Ward Cunningham,Wiki发明者

以上6位经验丰富的专业人士,给出了他们的定义,类似于python之禅(The Zen of Python),值得我们不时的拿出来审视自己代码,提高专业素养。

以上6位经验丰富的专业人士,给出了他们的定义,类似于python之禅(The Zen of Python),值得我们不时的拿出来审视自己代码,提高专业素养。注:为更加通顺对翻译后的书籍原文在语言上做了些许改动。

3、如何专注写代码

以上我们回顾了整洁代码的定义,基于《软技能:代码之外的生存指南》下面我们谈谈如何专注于写代码。

20世纪著名经济学家约翰·梅纳德·凯恩斯在1930年做过一个有名的预测,他认为到2030年,人类的劳动时间每周15小时就足够了,也就是工作日每天3小时。结合前段时间在互联网上引起巨大热潮,甚至举国讨论的"996.icu"话题,同时参照我们的邻国日本的当下就知道,实际情况完全与伟大如凯恩斯做出的预测大相径庭。生产效率的提高,人类的工作时间应该减少才对,为什么很多公司开启996的工作模式,甚至一周7天24小时随时待命?

微信图片_凯恩斯

解释是,工具便利性的提高,为我们创造了更大的空间,我们倾向于把这个可能的空间填满用尽[3],正如微信的便利,随时拿起手机进行交流,仿佛对方在2小时之内没有回复你,是一种不礼貌行为,越来越多的软件瓜分了我们的注意力,各种夸张的标题和图片,想尽办法要吸引我们点进去,诱惑的增多以及沟通的便利性带来注意力的分散与效率的降低,使得我们在先进生产工具面前变得没有那么专注高效。

在《软技能:代码之外的生存指南》一书中,作者的思维模式是这样的,先花一些时间先把所有的事务在脑子里过一遍,然后才能达到思维高峰以完成任务[4],结合我们身边的代码高手,写之前先充分思考,然后指尖飞快的在键盘上敲击,一次通过。作者在书中提到,在一项任务之前,确保你已经做好一切可以让可以免受干扰的措施,比如将手机调成静音,关闭分散注意力的浏览器窗口。如果你也用jupyter,其实有一个很好的快捷键----F11 一键进入全屏,可以屏蔽掉很多打开的应用,甚至在桌子上挂上“正在忙,请勿打扰”,可能开始同事会有点不喜欢你的这种作法。和996类似的程序员热门话题是中年职业危机,我们不可能永远在一线敲代码,所以下面我们谈谈代码之外的事情。

4、代码之外是什么

作为《软技能》这本书的副标题----“代码之外的生存指南”,本书提到了很多代码之外的技能,个人认为非常实用且具有可操作性,所写是具体的领域和可复制的操作指南,也因此,与鸡汤文和食之无味的理论有显著的区别,对其中的一些观点也非常认同,比如,自我营销与打造引人注目的品牌,我个人之前有写过一段时间的博客,记录当下所学和总结一些技能感悟,后来各种原因中断,等过了半年以后再看,发现有几篇的浏览量已过万,也有同行点赞和表示帮助自己解决了问题,那一刻非常的欣喜,同时对于互联网的传播和扩散力吃了一惊。虽然初衷并非是推销自己,这些积累会变成将来很具有说服力的背书,当然在此过程中也要严格要求自己,所写内容是自己求证无误的。如部分求职者会把自己的GitHub网址放上去,这就是一种简单的自我营销方式。

微信图片_20190526214506

书中作者提出我们先确定在哪一方面确立自己的个人品牌,毕竟技术领域非常广博,包含了众多的领域,同时解答了作为一个全栈开发者还是作为专业领域开发者哪个更有价值,即,选定一个领域深耕,成为专业人士。书中列出了一下自我营销的方式,可供大家参考:

  • 写博客,建立自己的博客,并发布文章。
  • 分享视频,在视频网站上上传自己分享的内容和课程。
  • 投稿,给相关领域的杂志投稿。
  • 著书,出版书籍。
  • 参加技术会议,参加技术研讨会并发言。
  • 开源代码,在开源社区贡献自己的代码。

【1】https://openreview.net/pdf?id=ByldLrqlx

【2】《代码整洁之道》

【3】https://github.com/ruanyf/weekly/blob/master/docs/issue-54.md

【4】软技能:代码之外的生存指南