http://chinese.joelonsoftware.com/Articles/FireAndMotion.html
 作者: 周思博 (Joel Spolsky)
译: Siyan Li 李思延
编辑: Paul May 梅普華
2002年1月6日

时不时,总有一阵儿,我什么事也干不了。

我也去办公厅,东瞄瞄,西看看,每十秒钟查一次电子邮件,网上逛一圈。也许干点儿象付运通卡账单之类不需要大脑的事。不过要回去哗啦哗啦写程序,可没门儿。

这种不出活的状态,一般通常会持续一两天。在我的软件开发生涯中也有过几个星期干不了活的时候。就像他们说的,我不在状态,我进入不了情况,我找不到组织。

人人都有情绪波动,有的人温和一些,有的响动大点儿,也有的可以整个乱套。但不管怎么着,那段不出活期似乎总是跟忧郁有点儿关系。

我不由得联想到那些专家说,人们基本上控制不了自己吃什么。任何节食计划都长不了。大家总是悠回各自的正常体重。也许作为一个软件工程师,我也不能控制什么时候最能出活。我唯一希望的就是发呆那段能被哗哗干活那段扯平,最终还能混碗饭吃。

自从我干上软件开发这一行起,我平均每天只有两三个的高效时间。这真让我头大。我在微软实习的时候,另外一个实习生告诉我,他每天12点上班,5点下班。5个钟头还包括午餐时间,但他的同事还对他特别满意。因为他干的活比一般人都多。其实我也一样。我每天只有两三个小时的高效时间。看着别人那么卖力的干,还有点不好意思。不过呢,我总是组里出活最多的。由此可见,“人件理论”和极限编程都坚持不加班,每周只干40小时,还是有点道理的。他们都清楚这么做不会降低一个小组的生产能力。

每天只能干两小时还没让我太担心,真让我担心的是完全干不了活的那些天。

我老想这是怎么回事儿。我努力回忆我出活最多的时候。估计是微软把我搬到一间漂亮的新办公室的时候。舒适豪华的办公室,窗外风景如画,窗对面樱桃花开满了石头堆砌的庭院。所有的一切都那么恰到好处。我马不停蹄地干好好几个月,一口气把Excel Basic的详细设计搞定。用象纪念碑那么高的一叠纸,详细描素了一个超大型目标模型和编程环境,工作之细致,令人难以置信。我自始至终就没停过手。去波士顿参加MacWorld I的时候,我都带着一台手提电脑,坐在哈佛商学院的大阳台上把Windows类别的所有文件都写完了。

按步就班并不难。通常我一天是这样度过的:1,去上班。2,查电子邮件和上网等等。 3,考虑是否应该吃完中饭在开始干活。4,吃完中饭回来。5,查电子邮件逛网。6,终于决定应该开始工作了。7,查电子邮件逛网,东瞄瞄,西看看。8,再次决定确实应该开始开始干活了。9,打开该死的编辑器。10,一直会些程序学到晚上7:30,写到忘记时间。

在以上第8步和第9步之间似乎有点缺陷,因为我不是每次都能顺利地执行下去。

对我来说,启动是唯一的难题。静止物体在不受外力作用的情况下会保持静止。大脑里有些物质的质量大得不可思议,让它加速太难了。但是只要速度上去了,在全速行使的情况下,倒不用使什么劲就能继续走下去。就象骑着自行车去作一次自费横穿美国的旅行,一开始,你根本想象不出要花那么多时间让车轮动起来,可是一旦动起来了,让它们继续转就不是一件很难的事了。

也许高效率的关键就:启动起来。配对编程法之所以成功,说不定就靠两个人在一起,互相强迫对方启动起来。

我在以色烈当伞兵时,一次,有个将军来给我们讲实战战术。他告诉我们,步兵战术其实只有一种:行进中开火。你一边开火一边朝着敌人冲过去,火力让敌人抬不起头来,不能朝你开火 (当一个军人喊:“掩护我”的时候,他的意思就是“在我冲过街时候,你朝敌人猛烈开火,迫使他猫起来,没法朝我开火)。前进了,你就可以占领阵地,接近敌人,这样你的胜算要大的多。你要是不往前冲,敌人就有时间来搞清楚形势,这可不妙。你要是不开火,敌人就要朝你开火,撂倒你。

我很长一段时间都在想着这个教导。我想通了不论是战斗机空中格斗还是大规模舰队攻击,大部份军事战略战术都是以行进中开火作为基础的。我又化了十五年时间才想通了行进中开火也是一个人在现实生活中成功的基本原则。你每天都得往前进点儿,不用想你写的程序怎么差劲,怎么卖不出去,只要你不停地写,不停地改,滴水也能穿石。同时, 要注意你的竞争对手朝你开火。他们是不是想让你全心全意应付他们的扫射,好让你往前走不了呢?

想想这些年来,微软开发出来的资料存取方法,从OBDC,RDO,DAO,ADO,OLEDB直到现在的 ADO,.NET,不停翻新,技术上有必要吗?还是因为那个设计组实在蹩脚,每过他妈一年就得重新发明一遍资料存取技术?(实际上可能真是)。它最终的效果其实是一道掩护火力,让竞争者别无选择,只能把本来该用来开发新功能的宝贵时间都用来移植和升级了。仔细看看软件行业,干得好的公司对那些对大公司都依赖最少,不用把所有精力都用来为赶潮流而把程序重写一遍,还得修改那些只有在Windows XP上才会出现的缺陷。那些花太多时间去猜测微软未来发展方向的公司,日子都好过不了。有些人见了.NET就发怵,忍不住要按.NET来完全重建自己的体系结构,以为自己别无选择。哥门儿,看清楚了,微软是在朝你开火呢,而且这只是掩护火力。这游戏就是这么玩儿的。这样一来,他们就可以大步朝前走,而你却不能。你要支持Hailstorm 吗?SOAP呢?还有RDF?是因为你的顾客需要,所以你支持它们?还是因为有人朝你开火而你觉得应该还击?大公司的营销部都懂火力掩护。他们到客人那儿就说,“你们不一定非买我们的。谁的产品最好您就应该买谁的。不过,我们想提醒您,在下单之前最好先确认他们支持(XML/ SOAP/CDE/J2EE)。否则你们就会被他们的技术套牢。”。等到小公司去向这个客户推销的时候,那个听话的CTO就会问他们:“你们有J2EE 吗?”。他们回去就只好不管卖不卖得掉,都埋头打造他们的J2EE。他们也就再没有机会来展示自己的特色了。其实,这只不过是个打勾功能。因为有个打勾拦在那儿空着,你就必须有这个功能。其实谁都不需要它。这就是火力掩护。

对于我这样的小公司来说,行进中开火意味着两件事。别跟时间过不去,同时你还得每天都进步。天不负苦心人,你终有出头的一天。我昨天花了一天时间只不过让FogBUGZ的颜色稍微好看点。这不要紧,只要不停步。最重要的是,我们的软件越来越好,客人越来越多。在我们达到Oracle 的规模之前,我们并不需要通盘战略。我们只需要每天早晨到办公室来,别多想,打开编程器。

本文最先用英文出版,题为 Fire and Motion

Fire and Motion[转载]相关推荐

  1. Fire And Motion(英文原版) [转]

    Fire And Motion(英文原版) [转] By Joel Spolsky Sunday, January 06, 2002 Printer Friendly Version Sometime ...

  2. 在行进中开火 Fire and Motion By Joel Spolsky

    By Joel Spolsky http://www.joelonsoftware.com/articles/fog0000000339.html http://chinese.joelonsoftw ...

  3. 转:开火,移动-大神Joel 也浮躁

    http://www.ituring.com.cn/article/18728 2002 年 一月六日 星期日 有时候我就是不能静下心来干活. 没错,我进了办公室,但我只是到处瞎晃悠,每隔十秒就检查一 ...

  4. Joel on Software 祖尔谈软件:行进中开火 (转)

    Joel on Software 祖尔谈软件:行进中开火 (转)[@more@] 行进中开火 作者: Joel Spolsky 译: Siyan Li 李思延 编辑: Paul May 梅普華 200 ...

  5. Joel on Software 祖尔谈软件:行进中开火 shadowkiss

    为什么80%的码农都做不了架构师?>>>    http://chinese.joelonsoftware.com/Articles/FireAndMotion.html Fire ...

  6. hdu6165 缩点,dfs

    hdu6165    FFF at Valentine 题意:给出一个有向图,问任意两个点 a.b,是否可以从a到b,或者从b到a. tags:主要是题意有点绕.. 只要 tarjan 缩点成 DAG ...

  7. (四)JS学习笔记 - 模式 - 观察者模式

    理解观察者模式 简单的讲,一个对象作为特定任务或是另一对象的活动的观察者,并且在这个任务或活动发生时,利用事件的形式通知观察者. 观察者的使用场合 当一个对象的改变需要同时改变其它对象,并且它不知道具 ...

  8. 【译】How Microsoft Lost the API War

    这是你最近听到的一个理论:"微软已经完成了. 一旦Linux在桌面上取得一些进展,Web应用程序取代桌面应用程序,强大的帝国就会倒下." 尽管Linux对微软来说是一个巨大的威胁, ...

  9. CPR认证-建材CE认证-305/2011/EU

    建材CPR认证 - Regulation (EU) No 305/2011 2011年3月,欧盟颁布了新建筑产品法规RETULATION (EU) No 305/2011 – CPR,并通告了新法规于 ...

最新文章

  1. 在?三缺一,来斗个地主——肝个斗地主案例(java)
  2. 剑指offer java版(三)
  3. php protected 属性,PHP实现在对象之外访问其私有属性private及保护属性protected的方法...
  4. python爬虫简单示例_最简单爬虫示例(入门级)
  5. cpu居高不下 linux,linux cpu居高不下 调试
  6. 用c语言实现串的存储结构是指,数据结构学习笔记-串(C语言实现)
  7. php.ini 安全配置
  8. LeetCode 58. 最后一个单词的长度
  9. php 源文件加密工具PHP Screw
  10. ...提升网站程序开发安全的6大诀窍...
  11. VBA教程初级(四):声明数组
  12. MS DTC服务无法启动解决方法
  13. 电信机顶盒怎么连接鸿蒙系统电视,移动电信机顶盒怎么投屏?怎么连接手机
  14. python3d动图_如何用Python制作3D动态航线图
  15. 不懂 CAN ?一文告诉你CAN协议!
  16. 微积分(七)——一元函数积分学
  17. 一百个超级值得收藏网站,确定看见不点开看看嘛
  18. 求负整数补码不用对原码+1进位的技巧
  19. 都掏出来了,大学四年珍藏的26个宝藏网站,全部整理好给大家!!!
  20. 【人脸识别(三)】:使用face_recognition库实现人脸识别,python实现

热门文章

  1. 计算机网络考研、招聘面试问题总结
  2. Java笔记07——类和对象
  3. 解决 FileNotFoundError: [WinError 2] 系统找不到指定的文件
  4. 蒙氏计算机教育目的,蒙氏五大领域的内容及目的
  5. 论文阅读笔记:Retinal blood vessel segmentation using fully convolutional network with transfer learning
  6. kaze算法的图像配准研究(2)-匹配
  7. 食品如何寄国际快递到美国
  8. Linux 服务器用上 SS Client
  9. 2.给 Proxmox VE换源
  10. [Music]30首经典萨克斯名曲