JanZou analyst, programmer

作为软件工程师,我学到的9件事


本文由@Jan_zou翻译,原文出处:Manual Ebert

三年前,我在巴塞罗那的神经科学实验室工作,当时我忙于将电极放在人身上,并在认知系统上训练分类。现在,我靠设计和编写软件为生。

当然,早在做科学工作时,我就写了很多软件,我也一直是个优秀的程序员。——如果你想让大脑扫描的40G数据有意义,你不得不卷起袖子,编写脚本来压缩这些数据。但直到我在学术界辞掉工作(也可能是我的未来)并开始小型而雄心勃勃的创业 时,我才明白什么是真正的软件工程师。更重要的是,明白了软件工程中的业务是什么。这不需要知道更多的编程语言、库、算法和设计模式。这是一种思维模式。

如果我曾经知道这种思维模式,并在我开始读研究生之前采用它,它可能会让我的工作轻松许多。

这是给我年轻时的自己的一张纸条,上面列举着过去三年我学到的一些事情,其中有时是痛苦的。

1. 智力被高估

当你年轻的时候,需要走很长一段路才能让你变得聪明。你是小池塘中的一条大鱼。如果在中途,你懂得一些表达自己的诀窍,你会加倍加快你的进程。事实上,成为智慧的流畅的言论者会让任何人通过高中和大多数大学,而根本不需要学习太多。(虽然你必须学习物理,但不只是讲一个等式。)——恭喜你,你是幸运的。同时,也是非常不走运的。因为当你毫不费力地通过学校,一路上学习东西时,其他人必须学会以后什么是更重要的:勤奋、坚持、人际关系。和一些下面列表中可能的八件事。

我们的社会非常重视智力。当我告诉别人我曾经在神经科学实验室工作时,他们的第一反应经常是:“哇,你肯定超级聪明”。我不傻 ,我知道有很多人可能在智力上不如我,但他们是更好的神经学家。

智力仍然是一个开门砖,但不能只依靠智力。勤奋、严谨、可靠的人际关系和最终犯傻,不仅仅是软件工程师的必要素质,也是从事研究生院之外的任何职业的必要素质

2. 以你的手艺为傲

这个口头禅可能已被过度使用,但它对你而言仍然很重要。亲爱的年轻的自己:无论你做什么,要把它视为一个光荣的手艺。没有什么应该只是达到目的的一种手段。我们都爱在出版物上看到我们的名字,但真正的手艺是想出来的许多无效的假设,是针对你的主题的——无论是人类还是浮在试管中——而且趋向于它们的需求,严格地分析你的数据并验证你的统计资料,重新开始,因为在某些时候,你会发现你刚才提出了一个令人尴尬的愚蠢的错误。如果你编写软件,这意味着要规划特点,研究现有的开源代码,学习新的模式和编程语言,修改代码错误,重构并维护代码。如果你做这些事情时没有愉悦感,只是认为它们是你为了发布论文或产出产品必须要做的,那么你将永远不会真正的擅长这些。如果你没有野心要真正地擅长于你的手艺,那么成为一个科学家或工程师或任何你现在做的事情可能都是在浪费你的时间。

你尊重你的手艺的一个好的迹象是,你正在做一些小项目:这些愚蠢的小项目不需要服务于任何当前的需求,你做这些仅仅只是因为项目的缘故。因为你喜欢做这个。有趣的是,这似乎在软件界非常普遍——我们每天使用的许多产品都开始于某人的小项目——但是这在科学界较为少见。来自康德拉·洛伦兹的一句我最喜欢的引用:

“每天在早餐前放弃一个小的假设,这对科学家而言是一个很好的晨练。”

如果这听起来对你而言有点愚蠢,也许你不应该成为一个科学家。

3. 学习新的工具

作为最后一点的延续:花时间来学习新的工具。不仅为了扩充你的抽象知识,而且真正了解工具可以帮助你把事情做好。你将很快的从中获得回报。

学习新工具的一个好的方法是通过上面提到的“小项目”。每次你创建一些新的东西,同时也以新的方式创建它。请记住,小项目即将失败。你投入不多,你学到的也很少。如果没有取消或你失去了兴趣或你意识到面临的挑战太多了:没有造成伤害。没有自我伤害。

如果你在学术界,我强烈推荐学习好的工具:

  • Git和Github。Git帮助你管理你的工作,并从不需要担心备份。Github上有许多优秀的代码,因此你不必重复的造轮子。请和你的同伴做代码审查。不要使用代码去分析数据,除了你没有人会去读。(我甚至不能相信,我甚至不得不告诉你,年轻的自己。你一直是一个优秀的程序员,但如果不是因为代码审查让我相信,因为错误,科学上所有结果的30%可能都是假的,我仍然会毫无察觉得犯错)。
  • 绘图软件。我个人比较喜欢Inkscape,不过行业标准的Adobe Illustrator和新生的Sketch同样也很好。用这些软件对你的曲线和图表进行后期加工;这往往比写Matlab或matplotlib的绘制指令更容易。
  • 学习如何有效地使用你的文本及代码编辑器。Sublime Text是一个很好的编辑器,它的学习曲线比VIM或Emacs低得多。学习快捷键。这能节省你的大量时间。
  • 学习如何说话。看TED演讲,并注意许多经验丰富的演讲中是如何能吸引观众十五分钟,同时讲述一个引人入胜的故事的。在镜子前练习。你的身体和声音也是工具。
  • 知道Python, R, HTML和Javascript的基础知识会让你还有很长的路要走。如果你对编程已经并不陌生,学习一个新的领域或库。接触下计算机视觉,自然语言处理,网页抓取,音乐合成。

你可以看到一个问题的解决方案总是受限于你所知道的工具。学习新的工具意味着从其他的角度看待问题。

如果你在大学里,我强烈建议你每周安排一天专门来学习新的工具。当你作为博士开始做自己的研究时,每周安排这样的两天。从长远来看,你将节省大量的时间,人们会对你的工作效率感到惊讶。如果这样的安排听起来好像要很多时间,而你认为你没有时间,同时你有太多的压力要去做其他事,跟比你年长的同行聊聊,在什么才真正花时间这个问题上,问问他们的意见。

4.做一个利益相关者且让你的日程知道

这是一个普通的假设,你的主管或CEO将总是在研究所或公司的最佳利益上采取行动,这是他的工作。

但是,公司和实验室都不是一个有意识的实体,因此没有内在的兴趣。当我们谈论一个公司的最佳利益时,我们实际上指的是利益相关者的最佳利益。现在真正的问题是:你的CEO或主管认为这些利益相关者有哪些人,以及他们的利益有多重要?

如果你的老板认为他(或她)是唯一的利益相关者(获得尽可能多的出版物;目标是快速获利退出):尽可能快地退出。你将被扔下车。还有谁呢?你的投资者或资助者?员工?学生?人类?问题的关键是:尽快找出来。如果你没有被视为利益相关者,那么全身而退。就像你可能喜欢你的工作一样,这将是片面的、辱骂性的关系。

5.出货(Shipping it)

在科技界,“出货”已经成为一个非常时髦的名词。这意味着让你的产品从你的仓库中出来,并传给消费者。但比一个行为更重要的是,这是一种心态。这意味着,直到你的工作在消费者手中结束,它才不是毫无价值的。而这应该永远是你的主要目标。

在学术界时,我写的大多数软件完全只在一个系统上运行过一次。编写生产就绪代码为五十多万用户工作,完全是另一码事。而当我开始专业地编写代码时,我的工作往往达不到这一点。

但是,这也意味着,迭代多年直到你有完美的作品,这是没有意义的。做一个小而完整的。写你能得到的最简单的篇幅。然后担心做更复杂的研究。迅速获取基本的正确,并让它们尽快的出来。出货就行。

6.知道二八法则

二八法则基本上表示,它将使用20%的项目时间来实现80%的预期效果,然后剩余的80%的时间只是来完成最后的20%。这就像从郊区开车到市区:其中20%的时间,你能行使80%的路程,但一旦你进入市区交通,最后20%的距离将占用很多的时间。

为什么知道这个很重要呢?因为人们总是低估一个项目需要的时间。尤其是科学家和工程师们特别容易这样。这是属于经验方面的问题:你越了解,就越能预测什么会出错,并且当你开始做时,没有人会想到有趣的边缘情况会是什么。

如果你还没有这样的经验,花一个项目所需时间的5倍,并在达到预计时间的五分之一后,期望能积累到经验。

7.不出卖自己的灵魂

因为所有错误的原因,我开始了我的博士生涯。其中一个错误的原因就是我现在所说的“学术内疚”。我认为,如果我不读博士会浪费我的天赋。同时,我觉得我做研究欠那些用自己的方式支持我学术生涯的人——教授们和支付我奖学金的人。我真的不知道。他们对我的学术前途的投资可能要失望了,他们的投资没有还清或产生一个伟大的科学家。但这是他们的问题,不是我的。

这同样适用于其他任何工作。人们总是投资你,这往往是他们的最佳利益驱使他们这样做。但是,这并不意味着他们拥有你的灵魂。

8. 离开你的舒适区

以下是我如何看待世界的观点:

如果一种状态太熟悉,你学不到太多。然而如果你感到恐慌,你可能什么也学不到。

这里是你的舒适区。你知道池塘中的每条鱼。你的归属。你知道如何处理问题。太阳底下没有什么新鲜事。如果你想要学习新东西并且成长,你必须离开你的舒适区。这是学习的开始。这是有趣的事情开始的地方。这是你不会立即对一切事情做出反应的地方。

当然,这也是你感到不堪重负的地方。这是恐慌区。这是你将晕厥的地方。在这里,你所能做的就是尽量把你的头保持在水外,希望有人会救你。

最佳地带在你的恐慌区之前。这其中的挑战是,在那里你将学到最多,成长最多,改变最多。去那里吧。

“忘记安全。 在你害怕的地方生活。 破坏你的名誉。 变得臭名昭著。” ——鲁米

9.驯服你的猴子思维

舒适地坐着,闭上你的眼睛,只是继续正常的呼吸。专注于从你鼻孔呼出的空气如何在你的上唇之上抚过你的皮肤。不需要在意其他任何东西。只是关注于这一点。

在你的心灵开始飘荡之前,这有多久?五分钟?大概没有。一分钟?很好。二十秒或更短?恭喜你,你是正常的。你的思维就像一只猴子,它会抓住任何最近的一个树枝。我可能叙述地与学院派的稍有不同,它的专业术语是联想思维。如果你想做一些有创造性的事情,那么联想思维是很好的,但它是专注力的杀手。好消息是:你可以学习如何专注。这里有无数多的“生产力技术”,但它们都只是隔靴搔痒。你不想依赖定时器且分心于自由写作软件。你想一劳永逸地驯服你的猴子思维。

适合我的方式与适合你的方式可能极不相同。我通过定期打坐(它有一些其他有益的副作用)得到了很好的效果,但即使是这样,这里有这么多不同的风格和传统,我不可能推荐一个适合每个人的。我所推荐的是,让你的思维保持良好的状况,并认真对待这个问题。想想冥想是浪费时间吗?你去健身房减肥。你应该至少在思维训练上花两倍的时间来减轻头脑中的一些杂念。改善你的精神洞察力。增强你的背部,能够让你的头脑保持直立更长时间。