人们都会期望随着岁数的增加,个人条件受到限制的时候,你会放弃现实里的一些工作,如编程。从而转向更加高大上的任务,比如管理一个团队或者融资。 这在“真正的教授”决定细节的学术界确实如此,只保留“大方向的东西”。换句话说,组织正面向垂直协作: 顶层的管理者管理一个平行结构中的一些(更廉价的)雇员。在研究机构中,高级科学家提出想法,而初级科学家的任务就是来实现这些想法。随时间的推移,高级 科学家可能不会做初级科学家会做的事情,但是他们会变成融资方面的专家。因此,就出现了这么一个可扩展的模型:高级科学家可以让中层科学家指导初级科学家 等等。Jorge Cham 将这种模型称之为 Profzi scheme,因为一旦资金方面非常充足的话,它的表现就异常的优异。 同行间横向协作 在此模型中,高级科学家做所有事情,从点子到实现。他们喜欢尽可能地自动避免繁杂的工作。合作主要是用来得到一个不同的角度和专业互补点。这种模式在资金缺乏的前提下仍然可以良好的运行,但是它不能够适应参与者过多的现象:横向协作关系过于紧密。 每个模型支持不同类型的工作。我认为,垂直协作有利于长期的和可预测的工作。而横向协作有助于偶然情况和“狂野”的想法。 我愿意花宝贵时间去编程的理由 我 比较赞成横向协作,这也正是为什么我老了但是我还在编程的原因。这看上去很不寻常,也许有人对此很不解。有些编程需要花费很多时间,我一年当中用在编程上 的时间有两三个月之久。虽然我的时间很宝贵,我也可以将我的这些工作花点钱外包出去也行,但是我还是愿意自己亲手做这样的在别人看来浪费精力的事情,为什 么呢?这里我引用 Donald Knuth 的话来做解释: 那些致力于更高层次和抽象思维的人们通常会错误地认为低层次的具体想法相对而言没有价值而且很可能被人遗忘。恰恰相反,最好的计算机科学家需要透彻地了解计算机实际运行的基本概念,而且计算机科学的精髓就在于能够同时理解众多层次抽象的能力。 但我也有我自己的观点: 我希望我的工作是重要的且能产生影响力的。然而,即使是被广泛引用的研究论文都很少有人详读细看,也是因为很少有研究论文能够产生显著的影响力。然而,从事与软件相关的事情是比较容易的。例如,最近Facebook的一个团队集成了我发布的一个 Apache Hive 中的压缩位图索引库:基于Hadoop 数据仓库框架。在 Apache 的配置单元我压缩的位图索引库之一:基于Hadoop框架的数据仓库。但是我敢打赌,Facebook 团队里肯定没人去花时间阅读我写的这个软件的原始论文。 一次又一次实践经历只是为了让自己更好的理解自己的想法。常见的情况是一些听起来似乎很有道理的想法却无法通过实践途径实现。我也经常通过执行我的数学论证发现bug。我能把这个工作外包给别人吗?也许可以。但结果估计不会是很让人满意。 随着时间的推移,你在编程上的运作做得会更好,驾轻就熟。几十年来,我一直在锻炼我自己的专业技能。如果你在哪一天从头开始,在数天内解决了一个难题,特别是当你知道别人可能需要数周或数月才能解决问题的时候,那种感觉是很享受的。 如果我的论点是合理的,就连 Donald Knuth 也支持我的观点的话,为何当我承认自己是一个程序员科学家的时候仍有人大跌眼镜?我觉得可能是大部分人都会拒绝编程这样低层次的工作吧,这一点从《闲人阶级理论》这 可以得到证实。实际上,我们往往追求名望而不是实用。为了最大限度地提高信誉,必须了解休闲阶层的含义:你的工作 一定不要产生实际的作用。因此,成为一名CEO或政客要比成为护士或者厨师带来更大的声望。那些离现实世界更远的科学家们会更加有声望。编程是一项类似制 作工具的工作,因此来自有闲阶级的人们不会喜欢。人们会把自己称作工程师、分析师或是开发者,但很少称自己为“程序员”,因为这会显得太功利。 所以,并不是每个人都应该去学习编程。它是一个耗时的活动。我编写了这么多的程序,花了那么时间以至于很多令人兴奋的事情我都做不了。 |