喜爱软件开发的人,是不是那些宁可与计算机打交道也不愿意与人打交道的反社会、反人类的人呢?如果是这样的话,随之而来的问题是,所有的软件项目最好都由一个人来独自完成吗?
对于第一个问题,可以勉强回答“是”;但对于第二个问题,我们要响亮而又坚决地回答“不”。网上有一篇很不错的文章,名叫“Creating My Own Personal Hell”(打造我自己的地狱),它解释了独自编程的危害性,读后让我非常震惊:
有些人宣称,“独自工作”为建立起自己的工作流程提供了极好的机会。但是,根据我的经验,在团队只有一个人的时候是没有流程可言的。没有任何东西可以帮你抵挡住如潮水般涌来的大量工作。当你的代码太急于求成时,没有人去纠正你的错误。没有人检查你的代码。没有人保证你的代码能准时提交、打好标签、进行常规的单元测试。没有人保证你遵循了某个编码标准。没有人督促你及时修复代码里的缺陷。没有人检验你是否把一个实际存在的问题标注成了“无法重现”。没有人复核你的估算,在你玩忽职守的时候把你抓回来。
没有人在你生病时或者出差时接过你的工作。没有人在你工作繁重时帮助你,在你深陷于骚扰电话、无聊会议、还有在最后关头忽然被扔过来(但需要立即解决)的杂碎任务时,没有人能拉你一把。没有人忽然有奇思妙想,帮助你走出困境。没有人在设计、架构或技术上与你合作。你在一个真空中工作;在真空中,没有人能听到你绝望的尖叫。
如果你读到了这些内容,请以此为鉴。如果某个公司只招你作为唯一的一位开发者,在你答应他们之前请三思。那根本就是另一种地狱。如果有机会的话,请选择那些能与其他开发者一起工作的职位,这样你至少可以在与别人一起工作的过程中得到指导,这有助于你发展自身的技能,让你在技术方面与时俱进。
对于在现实的荒漠中被很多无能的同事和糟糕的管理人员包围而感觉束手束脚、甚至感到绝望的很多软件开发者来说,独自工作是一个非常大的诱惑。独自工作意味着对于一个软件项目的完全掌控,在方方面面拥有最终的决定权。但是,与授权别人一起开发相比,完全自己一个人开发是极其脆弱的。就像是一个移动中的海市蜃楼,它给你极具诱惑力的希望和慰藉,但当你靠近它的时候,你会变得比一开始更加饥渴和虚弱。
像很多程序员一样,由于性格内向,我在小时候就被计算机所吸引。与没有明确的对和错、到处充斥着不合理但又无法解释的人类世界和社会相比,在计算机的世界里,是那么的平静,尽是1和0的理性组合,这片绿洲似乎要诱人得多!事实上,计算机并不比人强,但真见鬼,它们比人更容易让人懂。
在互联网盛行之前的早期时代里,搞计算机的的确确是一件孤独的事情。Danielle Bunten Berry(《M.U.L.E.》游戏的创作者)总结了这样一句名言:没有人会在临终之时说,“哎,我希望我能花更多的时间与我的计算机单独相处。”8位的编程时代已经离我们远去了。互联网的出现,以及软件不断增长的规模和复杂性,更是让人坚信:在当今这个年代,我们几乎不可能脱离互联网进行编程。当我没有网络的时候,也就无法进入互联网上浩瀚的编程知识海洋,我会感到寸步难行……
如果你不能展示给别人看,再漂亮的编码技巧又有什么意义?如果你不去接触其他程序员的不同观点、不同方法以及不同的技术,你又怎么能学到更多的技艺?谁又能检查你的代码并告诉你,那个问题有更简单的解决方法?如果你对待编程的态度是认真的,你应该要求与同伴们一起工作。
个人的能力总是有限的,它决定了你在这个领域里只能走那么远。找一些其他的聪明程序员吧,和他们一起工作。努力让自己保持谦逊低调,然后你会很快发现,软件开发其实是一种社会活动——它的社会性比大部分人想象的要大得多。你可以从那些性格内向的同伴身上学到很多东西。