为什么我还在编程

英文原文:  Daniel Lemire   编译:伯乐在线 – 唐尤华

人们通常认为,随着你不断成长你可能不再承担像是编写程序这样的实际工作,而是转而从事更高层次像是管理团队和募集资金这样的任务。在学术界尤其如此,“真正的教授”会把细节分配出去只负责“宏观的事物”。换句话说,组织会呈现纵向协作:在这样的组织结构里,位于顶层的人负责监督其他(廉价)的雇员。在研究领域,这意味着资深科学家把想法交给青年科学家去实现。世易时移,资深科学家可能无法完成青年科学家从事的工作,但是他们会转变成募集科研资金的专家。这个模型会不断放大:资深科学家领导中层科学家,而后者负责管理年轻的科学家,如此这般。Jorge Cham将这种模型称为Profzi模式,因为只有资金充足且不断增加的情况下这种模式才能运作得更好。

与之对应的是横向协作。在横向合作中,资深科学家会参与一切活动,从一个伟大的创意到最后的实现。他们会尽可能地避免繁杂的工作或者开动脑筋将其自动化。通常协作是为了获得不同的观点或者互补的知识。即使资金紧张这种模式依然有效,但当很多人员加入时会产生各种问题——横向协作过于地紧密。

Daniel Lemire

(本文作者:加拿大新不伦瑞克大学副教授Daniel Lemire)

不同的模式分别适用于不同类型的工作。我认为纵向协作适用于长期且可预期结果的计划,横向协作适用于需要机遇和“疯狂”创意的情况。

我倾向横向协作,标志之一就是尽管年纪很大但我还在编程。这是不同寻常的,以至于人们会为此皱起眉头。有些编程工作需要很多时间投入,一年中我会花2到3个月编写程序。也许我的时间是非常宝贵的,不应该浪费在类似编程这样的底层工作。我完全可以花一些钱把它们交给别人完成。那么为什么我还需要编程?

也许Donald Knuth大师的这段话就是对此最好的注解:

那些致力于更高层次和抽象思维的人们通常会错误地认为低层次的具体想法相对而言没有价值而且很可能被人遗忘。…… 恰恰相反,最好的计算机科学家需要透彻地了解计算机实际运行的基本概念,而且计算机科学的精髓就在于能够同时理解众多层次抽象的能力。

然而我也有自己的看法:

• 我希望自己的工作是重要且具有影响力的。即便是被广泛引用的研究论文都少有人阅读,很少有研究论文能够产生重要的影响。然而,从事和软件相关的工作会相对容易。比如,最近Facebook的一个小组集成了我发布在Apache Hive上的一个压缩位图索引库:基于Hadoop的数据仓库框架。如果为Facebook是否有人读过我为这个软件撰写的论文打赌,我肯定会赚到一大笔钱。

• 一次又一次的实践,迫使对自己的想法有着更好地理解。通常的情况是,在论文里看上去非常棒的想法实现起来却非常棘手。我也经常在实施过程中发现文章中数学论证存在bug,怎么可能把这项工作外包给其他人呢?也许我可以这么做,但结果一定不会得到丰硕的成果。

• 随着时间的推移,你的编程水平会变得更好。我花费几十年时间锻炼自己的专长。当你花上几天时间从头开始并解掉一个难题之后,了解到别人可能要花上几周甚至几个月的时间,这种感觉是非常享受的。

假设我的论点合理,而且Donald Knuth也赞同我的观点,那么为什么当我承认自己是一名程序员科学家时人们会对此惊讶不已呢?我想这是因为人们会拒绝编程这样低层次的工作,这一点从《有闲阶级论》中就可以看出。实际上,我们往往追求名望而不是实用。制作工具、烹饪或种田不会带来声望。为了最大限度地提升自己的声望,你必须上升到有闲阶级:你的工作一定不要产生实际的作用。因此,成为一名CEO或政客要比成为护士或者厨师带来更大的声望。那些离现实世界更远的科学家们会更加有声望。编程是一项类似制作工具的工作,因此来自有闲阶级的人们不会喜欢。人们会把自己称作工程师、分析师或是开发者,但很少称自己为“程序员”,因为这会显得太功利。

Theory of the leisure class 有闲阶级论

 

注意:并非每个人都应该编程。这是一项非常耗时的活动。因为我花费了很多时间编程,因而无法去参与很多其他令人兴奋的事情。

进一步的阅读:《设计原本》,2010,Brooks

 

英文原文:  Daniel Lemire   编译:伯乐在线 – 唐尤华

【如需转载,请标注并保留原文链接、译文链接和译者等信息,谢谢合作!】

 

收藏 评论

关于作者:唐尤华

唐尤华:我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其实我是一个程序员。 个人主页 · 我的文章 · 18 ·    

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部