你或许会满头黑线:隔行如隔山,这转变也忒快了吧。其实不然,早在以前我就已经写过很多软件了——比如想理解扫描出来的有 40GB 那么多的大脑数据,我得捋起袖子、埋头苦干,写个能紧缩这些数据的脚本。所以我一直以来就是一个能干的程序员。但是直到我最终下定决心辞去了这份在学术上能有所建树的工作,转去一家朝气蓬勃的创业公司打工,我才明白了什么是软件工程师——而更重要的一点是,知道了软件工程师是干什么的。软件工程师并不意味着你得学会更多的编程语言、类库、算法和设计模式。它是一种心态。
如果我能早点懂得这些,我的工作肯定要轻松的多。不过亡羊补牢,犹未晚矣。
下面是我写给自己的注意事项,是我在这三年里学到的经验教训,有的甚至是惨痛的。
1、智力不是万能的
如果你还年轻,聪明机智能让你的道路走得更加顺畅。聪明能让你鹤立鸡群。如果你有强大的表达能力就更妙了。老实说,聪明和好口才能让我们在高中和大学里所向披靡,轻轻松松就能拿到个好成绩。——如果你两项都具备,那么首先要恭喜你,你是一个幸运儿。但是同时你也很不幸。因为当你毫不费力地考上一个好学校,随便看看就能通过考试,其他智力不如你的人却因此学到了将来会受益无穷的品质:勤奋、耐心、协作等等。
当今社会太过于看重智力。当我告诉别人我曾经在神经科学方面工作过,大家第一个反应往往是:“哇,你肯定超聪明的!”我不得不说,我认识很多人或许智力方面不及我,但是却的的确确是更为优秀的神经科学家。
智力毫无疑问能为你打开前行的大门,但是如果光有聪明,工作是永远不可能做好的。勤奋、严谨、可靠的网络,最后还有守信等等,不光是在软件工程领域甚至在其他专业都是必须的基本品质。而这些是学校不会教给你的。
2、为你自己鼓掌
这句话可能大家看到过很多次了,但是这的确有着其不可忽视的重要意义。无论结果如何,只要努力了,那么就应该为自己自豪,为自己鼓掌。不是所有努力都会有成果。我们谁都喜欢在报刊杂志上出现自己的名字,但是中间过程却异常艰辛。首先得想出一个好的课题,否决一些假设,然后才能一步一步进行研究——这个课题可以大至人类也可以小至在试管里漂浮——根据需要而定,然后严格分析数据和验证统计资料,如果发现有错误就毫不犹豫重新开始。看着过程就头皮发麻!
写软件意味着要规划特点、研究现有的开源代码、学习新的模式和编程语言、修复 bug、重构及维护等等。如果在这些过程中你丝毫没有感觉到乐趣,只是把这些步骤当做是得以发表论文、发布产品的工具,那么你永远也不可能在这个领域真正有所建树。如果你在提升自己技能方面没啥目标,那么我建议你还是尽快转行,哪怕是去做科学家、工程师还是别的什么,都比现在这样浪费时间要好。
为自己鼓掌、以自己为荣意味着,你在做的项目是自己喜欢的,可能这些项目看上去又小又蠢,为了不影响整个项目的顺利完工,可能根本没有必要投入精力马上去做,但是你就是孜孜不倦、刻苦攻关。只因为两个字:喜欢。有意思的是,这似乎在软件社区是个相当普遍的现象——我们每天在用的很多产品开始仅仅是因为开发者个人的爱好而已——但是却在科学界极为少见。下面是 Konrad Lorenz(奥地利动物学家、动物心理学家、鸟类学家、诺贝尔奖优胜者)写的我最喜欢的一段话之一,和大家分享:
“对研究型科学家而言,
在早饭前
回顾丢弃宠物的假设
就是最棒的晨练了。”
如果你感觉这听起来很愚蠢,那么也许你并不应该成为研究型科学家。
3、学习新工具
学习新工具不只能够扩大抽象的知识领域,并且在有的时候借助这些工具还能帮助我们解决问题。付出总有回报,一切很快就会见分晓。
学习新工具的一个好办法就是类似上面提到的要自己喜欢,毕竟兴趣才是最好的老师。当你构建好新模型或者别的什么之后,可以试着用另一种工具再构建一次。要记得,失败是成功之母,人都是在逆境中成长,在失败里学习的。不过如果你认为没必要继续了,学到的已经足够了,或者不可能成功,或者对此你已毫无兴趣,又或者你发现这个挑战超出了你的能力范围,那么就此放弃也可以。
以下是我强烈建议学习的一些好工具:
Git 和 Github。有了 Git,妈妈再也不用担心我的备份了。而 Github 上有超多的事例代码,这样你就不必老是自己重新写过了。
插图软件。我个人比较喜欢 Inkscape,不过 Adobe Illustrator 和新出来的 Sketch 也一样棒。
学习如何有效使用文本和代码编辑器。
学会如何讲话。
涉猎 Python, R, HTML 和 Javascript 等等的基础知识。
对一个问题的解决方案往往会受到我们所用工具的限制。学习新工具也是为了能跳出这个框,从其他的角度看问题。
如果你还在上大学,那么我强烈建议你每周定一天时间用于学习新工具。如果你已经是在搞研究的博士,那么可以每周两天。从长远来看,这会节约你解决问题的时间,别人会因为你的高效率而震惊赞叹。如果你觉得你没有那么多空余的时间,也不需要给自己压力,可以向年长的同事请教,如何去正确分配时间。
4、成为利益相关者
众所周知,主管以及 CEO 总是把公司的利益放在首位,这是他们的工作职责。
但我们谈到公司的最大利益,我们往往指的是利益相关者的最大利益。而现在的问题是:哪些是主管和 CEO 眼中的利益相关者,这些利益相关者的利益又占多少比重?
如果你的老板认为他/她自己是唯一的利益相关者,那么赶紧走吧。不然的话,要是找到合适的家伙,你就会被抛弃。还有哪些会是利益相关者呢?投资者或者慷慨的捐献者,员工,学生,还是全人类,都有可能,关键是要尽快找出来。并且如果你不在利益相关者当中,那么离开。
5、发布
“发布”这词已经成为了科技领域的新宠。它的意思是把我们的产品从仓库中取出来展示给消费者。这不仅仅是一个动作,更是一种心态。如果不能把产品成功交付给客户,那么意味着我们以前的工作毫无价值,是无用功。关于这一点,是我们要时刻谨记的。
以前在学术界的时候,我写的大多数软件必须一一对应系统。而现在要为五十万用户写软件,这真的大不相同。
这也意味着,如果不能发布一个完美的产品,我们就得一直迭代。所以如果想尽快得到一个完美的产品,那么发布吧!有压力才有动力,集思广益,查漏补缺。
6、了解 80/20 法则
80/20 法则的基本意思是,花上 20% 的时间能实现项目 80% 的预期效果,然后剩下 20% 的项目成果则需要 80% 的时间才能拿下。举个例子,假如你从郊区开车前往市区:在 20% 的时间里走了 80% 的路程,但是当你碰上交通堵塞,呵呵,剩下 20% 的路程就会用去你很多很多时间。
那么了解这个法则有什么意义?因为如果没有这个法则指导,很多人往往会低估完成一个项目所需要的时间。科学家和工程师更是容易犯这种错误。不光是这个法则,还有部分是经验问题:懂得越多,就越能更好的预测开工之后会遇到的各种问题,而这一点是很多人想不到的。
如果你还没有这方面的经验,那么可以将你认为所需要的时间乘以五,希望经过五分之一的时间之后,你会明白对 80/20 法则有所了解。
7、不要出卖自己的灵魂
我攻读我的博士学位完全是个错误。其中一个错误我把它叫做“学术犯罪”。因为那个时候我觉得如果我不去读博士完全是浪费了我的天赋。不过我觉得我有所亏欠于那些支持我学术生涯的人——教授和支付我奖学金的人——因为我最后并没有去搞研究。他们投资了我的未来但是很可能会失望,因为他们的投资并没有成果——我并没有成为一名伟大的科学家。不过这是他们的问题,不是我的。
这同样也适用于任何其他工作。人们给你投资,是他们利益最大化的选择。这并不意味着你由此需要出卖自己的灵魂。
8、离开自己的安乐窝
以下是我对世界的看法:
在一个你熟悉的地方,舒适又安全,你可能学进去很少。然而当处于恐慌的心态中,你可能啥都学不会。
每个人都有自己的“狗窝”,在这里,你放浪形骸无拘无束,角落里藏着什么都清清楚楚。不过如果你想学到新事物并且能够迅速成长起来,那么首先你得离开这个“安乐”的地方,自己在学海里迎风破浪“苦作舟”。
当然,如果你感觉不堪重负,那么其实矫枉过正,已经处于恐慌的境地了。可怜的你,风浪太大掉海里了!现在唯一能做的就是尽量保证自己能活着等别人来搭救。
而正如上图所示,在到达恐慌的境地之前的最高点,我们能学得更多,成长得更快,变得更优秀。找到你的学习最高点。
9、驯服思维之猴
舒适地坐下来,闭上眼睛,平稳的吸气呼气。感觉一下当当空气流出你的鼻子流过上嘴唇皮肤带来的美好。什么都别想,好好感受。
大脑放空多久了?有五分钟了?可能不会。一分钟?太棒了。20 秒或者更少?好吧,这才是正常值。你的思绪就像一只猴子,它在树上跳来跳去,看到哪个枝干最近就抓着哪个跳过去。你可能还不理解,我再重新用专有名词表述一下:现在比较流行的说法是联想性思维。如果你想发明创造,那么联想性思维绝对是不可或缺的好工具,但是它却是专注的杀手。幸运的是,专心致志是可以学习的。现在有非常非常多号称“能提高生产力的高科技”,但是都还停留在表面因素。谁都不希望在写软件的时候,思绪飘啊飘得在想意大利面怎么做才更好吃。我们需要驯服这只顽皮的猴子,一劳永逸。
不过适合我的方法可能并不适合你。我通过定期使用上述沉思的方法(这方法还有其他有益之处)从而获得了很大的成效。不过即便是如此,我也不敢保证每个人都适合。我所要推荐的是,要保持你的头脑处于最佳状态,这很重要。还觉得冥想是在浪费时间?我们每周都会去健身房锻炼身体,不过在心理锻炼上你得花上至少两倍于此的时间:减去几磅杂念。锻炼自己的思绪以便保证在工作时自己的头脑可以专注更长时间。