做一个更高效更有潜力的工程师

2018-10-26 15:37

成为更好的工程师的方法是建立一套训练体系。这套体系里有一些固定的练习,每周都进行联系,会让你的工程师生涯更上一层楼。设计这套训练体系有两个非常明确的目标:

学习解决之前不会解决的问题;

学习如何更快更好的写程序。

训练计划主要是由四个练习组成的,每一个都会帮助我向上面的两个目标前进。这四个练习是:

读论文;

学习新工具;

读书;

写程序的时候录屏。然后回顾一下,看看能不能写得更快。


demo.jpg


读论文


这项练习的目标是拓展CS相关的知识。

第一是一些论文可以改变我对一些固定问题的思考模式。举个例子,The Tail at Scale这篇论文验证了反直觉的长尾延迟的本质。其中认为比较有趣的是关于在大量机器上运行一个请求是怎样影响延时的问题。研究Google一项服务的实验数据,这项服务将请求拆分,然后分发给不同的服务。他们用数据评估了一下,将请求分发给100个服务的情况。你会发现,如果你测量从100项服务获得回复的时间,一半以上的时间花费在等待最后五项服务的回复上。这是因为最慢的5%的请求要比其他请求慢非常多。论文也给出了一些方法来降低长尾延迟。

第二个好处是我发现读论文可以让我融会贯通不同系统的知识。举个例子,Google的分布式数据库Spanner。Spanner用了很多不同的技术,比如Paxos、two phase commit、MVCC和predicted locks。通过阅读相关论文,就能建立对于这些不同的技术的理解。这可以以一个整体来理解Spanner,并且和其他系统比较Spanner的利弊。


学习新工具


解决问题最简单办法之一就是用一个解决这种问题的工具。这个练习就是选一个工具,然后学习一下它。通常的练习过程就是,安装工具,练几个教程,然后简单看看手册。学习bash指令在解决日常问题的效率提升了很多。类似的,学习不同的分布式系统可以明白如何针对不同的问题运用不同的工具。


demo.jpg


读书

用书来补充从论文里或者学习工具无法获得的知识。

比如可以推荐几本书给你:

Refactoring – 这本书能让你明白好的代码是什么样的,以及如何将不好的代码转化为好的代码。

Getting Things Done – 这本书让你明白如何安排工作的优先级以及如何追踪工作进展。它帮我建立了一套体系来确认优先完成重要的工作。

The First Time Manager – 做团队管理员,需要协调不同的团队一起工作,还要主持团队会议。这本书有助于理解管理的基本原理。


录屏

这个训练是对个人来说解决问题改变最大的。运动员经常会看自己的录像来让自己做的更好。

它可以帮助你在写代码的时候就测试代码。这样可以通过快速定位Bug来减少DEBUG方面消耗的时间。如果之前的代码都没有Bug,那Bug肯定是在你新写的代码里。

当DEBUG时,针对要DEBUG的对象专门添加函数是非常有必要的。举个例子,一个玩具的项目,要写一个LRU缓存,写了个Bug,它不能清除正确的元素。这时就可以快速地添加一个打印当前缓存状态的函数来看一下是哪里出问题了。之后就可以看一下缓存的期望状态和现在实际情况的差别。这样就可以快速定位Bug。

在开始写代码之前,花五分钟决定一下方向会非常的有效。这么做有两点好处。首先是能够确认方向是正确的。更重要的是,这样可以强迫自己选择单一的方向。因为看了录像后,就能发现在选择实现方向上经常犹豫很长的时间,其实两个方向都还OK。所有这些经验现在回顾的时候都很明显。


做这项练习的步骤是:

记录一些写程序的录像。可以是工作中的,也可以是在刷题网站上刷题的时候。

十倍速看一遍录像,并且记录每个时刻自己在做什么。

然后统计一下在大的类别上分别花费的时间。比如花了多少时间DEBUG,花了多少时间写功能。

看看花时间最长的类目。然后仔细研究下为啥花费了这么长的时间。

提出一些能够让自己节约时间的方法。有一些办法可以把代码结构化,然后可以少写一些代码或者更快找到Bug。

这种方法能感受到自己发生了很大的改变。学到了很多之前没有学过的关于系统和工具的知识。解决问题也要比之前快。


以上,希望你能考虑一下这些练习,然后自己也尝试一下,做一个更高效更有潜力的工程师。


Copyright2018贵州自由客网络技术有限公司版权所有 黔ICP备16000950号