研发的精神所在(3)- 努力拓宽眼界

今天写的这篇文章正值我们公司若干个项目交付的关键时刻,有些好消息也有坏消息;各位同事近期为了项目交付都非常努力,在外出差、加班都很多;但我还是请诸君加油努力,跨过这些坎,我们会变得更强大,梅花香自苦寒来、宝剑锋自磨砺出,在实战中练出自己的卓越技能,练出强大心脏,练出卓越效率的团队,练出我们的美好未来!

我猜想很多人会对我上一篇文章所提到的宽广的知识面的速成感兴趣,那确实对研发人员有很强的吸引力。我今天就谈谈如何在知识面方面速成。

什么叫“速成”?“速成”是个比较的概念,既然有速成肯定也有“慢成”。相对于某一领域的“专家”而言,知识面的宽广度是可以速成的;但是这个速成也不是一蹴而就的,可不能以为在三个月以内就可以达到很宽广的知识面。

那如何“速成”呢?别忘记上篇所提到的“好奇心”,如果你没有这个好奇心作为基础的精神内核,你肯定不会速成;所以我建议没有好奇心的研发可以换个职业。

除了好奇心,速成的最重要的方法是多看,多看看其他的系统。比如今天接触了一个供应商做OCR的,把他们材料拿过来看看,琢磨一下,OCR大概是怎么实现的;明天在客户那里听说了一个新技术,记在心里,有空的时候上网了解一下,下次在别人那里吹吹牛逼也开心呀;只要有心,身边到处都是可以了解的东西。比如我们银行客户的柜面系统、园区的收费系统、中午吃饭时候的收银系统、收快递的时候看看快递小哥的手持终端;网上的资料现在也非常的丰富,而且上网也很方便。

如何快速把握一个系统的大概,最重要的技能是思考方法,其实就是黑盒的方法,说的高大上一点是系统化思考的方法,自顶向下的思考方法。其实做研发的人有个毛病,真的是毛病,就是思考的时候容易坠入实现的细节。希望各位同事可以正视这个问题。

但是在了解一个系统或是做前期需求的时候,切勿把自己的主要精力放在技术的实现上,也不要管这个系统的技术实现有多难;而应着遵循如下几个步骤去理解系统:

  1. 系统的输入是什么?输出是什么?由此来定义系统的主要功能。
  2. 系统的运行环境是什么?依赖条件是什么?
  3. 接下来要理清系统的分成哪几部分、各自完成什么功能
  4. 系统中的各模块的角色和作用、数据流向
  5. 每一个部分之间如何通信、数据通过什么方式交换,并且如何互相协作。
  6. 主要过程是如何触发的? 我发现这个问题很多人会忽视。
  7. 这时候框图、架构图、状态图等就是非常好的工具。

如果你把上述的若干问题搞明白了,而且这个系统不是你工作要做的也不是你感兴趣的,那就可以不看了;对于拓宽眼界的事情,我的建议就是不求甚解,大概搞明白就好;因为你的主要任务是变成当前工作的专家呀!你当前做的工作就要做到没人比你厉害!这才是最高效率。

而如果上述的系统是你个人工作要做的,那就需要进一步细化、分解,这个过程就是自顶向下的设计过程。而上述的工作是异常重要的,即先概览再breakdown。为什么重要呢?因为软件总会有bug,在复杂系统例如我们的产品这样的系统中,排查问题非常依赖于你对于全局及各部分关系之间的理解;还因为在团队作战中,大家的理解一致了才可以继续协作。可以看见很多专家,可以非常迅速的定位问题,那就是因为他对于自顶向下的东西理解得非常透彻。

这部分说到底就是系统化的思维方法。我始终推荐两本书《系统化思维导论》(作者是个老外,如果没记错叫温伯格);另就是IDEF0 方法(不记得书名,IDEF0是美国国防部的一个方法论,我记得公司有这本书,如果没有网上也有很多资料)。

各位千万不要以为这是很简单的,这种系统化思维的方法是需要你自己有意去训练的。下篇文章我打算讲讲怎么变成某一方面专家。

研发的精神所在(2)- 做技术世界中遨游的孩子

Change is always good. 人类几千年的积累催生着各方面的新理论、新技术、新产品;有人说智能时代的“奇点”即将来临,有人说“奇点”就是现在,也有人持有悲观态度,认为“奇点”还离得很远。甚至有人说机器智能第一将会取代的就是程序员。不管这个“奇点”是什么时候,技术发展的切线斜率越来越大这个事实及趋势是确定的。

研发人员必须接受这个事实和趋势,努力跟上这个时代,努力让自己的技术和能力为人类及社会做贡献,并通过这样的努力让自己的生活更好。这是研发人员的历史使命也是极好的机会,我们不可虚度光阴,不可辜负这样的时代。

研发的核心精神是:保持一份强烈的好奇心!!!是的,这是一个好的研发的最基本素质。各位可以自己掂量一下自己有无这样的好奇心,如果没有,我建议你就不要做研发了。我说的是“强烈”的好奇心,如果不强烈,那也可以回家卖红薯。

要像三岁的孩子,对于新事物有兴趣去探索,学习各种新鲜的技术、不同的实现方式、以及面对不同的人!自己弄不懂的就要把他弄懂,以前没实现的就要把它实现,以前做的不好的琢磨一个方式把它加强、做得更好,相信各位能够感知在千方百计完成一个任务之后的那种兴奋和愉悦感;体会过这种感觉的同学他就会不一样,没体会过的同学要尝试着去体会,如果长时间体会不到那么请转行吧,因为这个工作让你没有快乐,何必做一种没有快乐的工作呢。

做Java的也要看看iOS是怎么回事,做大数据的也要看看前端的JS是怎么回事,新出的各种技术也要有好奇心去看看是个什么东西,实现的原理是什么。不要让自己做青蛙,只管自己头上的那一片天。技术的东西很多是相通的,多看看对自己拓宽知识面非常有帮助,甚至对自己目前的方向的深入理解也有很多帮助。

这样可以极大的拓宽我们的眼界,让我们知晓世界的广大、感受技术的变化,让我们不再做井底之蛙。青蛙看见的一片天是真实的吗?是真实的,但是不是全部的天。但是我们不了解的东西实在是太多了,新技术实在是太多了,我们有那么多精力吗?所以我提供一个学习方法,就是狼吞虎咽、不求甚解。把一本技术书籍的前三章看完就可以把书扔了,做个初步的了解原理;所以公司经常组织技术分享,努力拓宽大家的知识面。因为没有那么多时间啊!在这种方法下,知识的广度可以很快积累,可以速成的。但是这种方法只适用于我们一个新系统的初步准备阶段,只适用于我们作为孩子学走路阶段,还不能独立行走、不能跑。因为你还不是专家,你还不能实现这个系统或者业务,因为专家是需要深度的。

保持好奇心还有一个隐含的意思就是也要做个谦逊的人,我们必须要清楚,未知的东西仍然浩如烟海,我们只是捡贝壳的孩子。是的,我们是孩子,我们好奇且谦逊;我想这是对乔布斯所说的“Stay Hungary, Stay Foolish”的最好注解。

研发的精神所在(1)- Change is always good.

这是我准备写的一系列关于研发精神的文章的第一篇,先在公司内部分发


我要讲讲作为一个研发的精神,讲讲我自己的一点感受。我从学习Basic开始到今天也有近30年的软件开发经验了,做具体的项目也接近20年了。我这30年的感受是什么呢?是技术变化得真快,而且是越来越快!30年前我是用Apple II学习Basic的,80年代末2万多元一台的Apple II的计算能力不如当今一台200块山寨手机的CPU存储和计算能力;现在谁还用Apple II和Basic写代码呢?谁还记得20年前的Fortran是什么呢?谁还知道10多年前Java的CORBA总线?

技术热点的变化也是日新月异,2012年是移动端,2014年是智能硬件,现在是AI,是深度学习,是无人驾驶,明年是什么我不知道,一定会有新技术热点出现。我们公司随着业务规模的扩大,涉及的领域也越来越多,现在大数据的部分内容已经很多了,再加上Java,JS,Android,iOS,数据库等等,近期又涉及到OCR、图像处理和机器学习等内容,我们也会涉及越来越多的技术方向。

 

我非常庆幸自己能够赶上这样的技术飞速发展的时代,我可以亲眼见证技术进步对于人类社会效率的提升,我可以享受到科技带来的更多便利,并且更兴奋的是我也能够参与其中。对于技术人员来说,这是最好的时代!

但是在这样的时代,对于人的要求是越来越高的。如果你不愿意改变,那你会被推着、被迫改变。我举个例子,我的父亲今年74岁了,他70岁的时候要给他买个智能手机,他说太复杂、学不会、不想学、不肯要;结果现在呢?每天玩微信,经常和他孙子视频。连他这样几乎退出社会生活的老头都被影响,被逼着学习新事物,可见科技的力量有多大。老外说Change is always good,我们必须适应这样的节奏,个人才能安身立命,公司才能发展壮大。

在这样的时代,不再是一招鲜吃遍天,就说90年代的Fortran、DELPHI程序员,他们在干什么? 各位研发的同事怎么才能适应这样的时代?我就着我自身的经验写几篇文章给大家一点建议。