许多年轻有才华的开发员正不断的寻找新的项目和解决不同的问题,以此来增加经验。然而,很少有一个单一的环境能够提供这样的条件。如果基于遗留系统代码(维护原有系统),架构方面没有多大的想象空间。因此,许多开发员觉得需要变换工作,到不同的环境去获取新一阶段的学习。
然而,“跳槽“只不过是获取丰富经验的途径之一,我仍提议另一个选择: 接单。
回想起来,我能成长为一名成熟的软件开发员,最快的一个办法就是得益于在咨询公司工作学到的经验。为什么是这样呢?有以下几个原因:
1. 大量的新项目(以及几个老项目)
接单过程中,最大的优势在于多元化的工作机会,接单是一个很好的学习环境。开始新项目和获得新客户的机会会很多。事实上,我很少在单一的一个项目上花六个月以上的时间(即使那样,另一边我也会同时与其他客户合作)。
每两到三个月就能开始一个新项目是很难得的。我总是开玩笑的说,我引以为傲的是六个月内所编辑的代码。就是这个原因,我养成了一个习惯,就是从每个项目出错的地方不断学习,不断提高。
老项目的存在(这个也很有帮助),因为它可以让开发员学会如何维护遗留系统。集体讨论如何将单元测试融入Lotus Notes系统(译注:Lotus Notes是IBM的一个产品)是件困难的,同时也是件值得尝试的任务。不是每个项目都可以完美地收工,这也就给了你学习写好维护代码的机会。
2. 不同领域的问题
不同的项目涉及不同的领域。建一个餐厅的博客、然后再去参加一个血压机器方面的发布会、再完成一段有关退休基金问题的学习,非 常有趣。不要误会我的意思—这想法可能有些糟糕,但是很具启发性。
我工作过的一个最冷门的领域,就是有机会编写一个控制煤炭开采设备中巨型泥铲的应用程序。这个领域真棒!实际上是在一个露天的矿场中,头戴安全帽,为一个移动2000吨的大机器编程,多恐怖的工作环境?如果你只在一家以商业领域为中心的公司工作,这种机会就不多见。
3. 编程责任
在大多数的咨询公司里,你既是开发员和架构师,又是测试人员。尽管测试自己的东西是件“讨厌”的事,但是你可以有机会去反思你的架构,从而运用其他你认为更合适的模式和架构,这样的经历和机会让你有难以形容的体验。
或许最困难的事情是对架构的理解和选择。什么时候该用哪些,什么时候不用,什么时候需要打破常规的去应用这些想法。不同的项目,不同的领域,给了你一个比大多数工作都要好的增长经验的机会。
4. 学会与人交往
咨询工作就是与人打交道,幸运的是,我从来没遇到过什么麻烦的家伙,但是与人交流,是我们要穷尽一生去学习的一种技能。如果你学不会如何与客户沟通,你可能也不知道与你的老板,经理,甚至是配偶如何交流。与人交往迫使你走出心中的阴暗角落,即使只是小小的一块阴影。
成为你工作相关领域的咨询师顾问。如果你决定成为永远不和客户交流的“隐士”,或者只采取同一种处理办法来解决不同的问题,你应该学不到太多东西。如果你决心提高你沟通技巧,就像一位去实践不同技术,模式和架构师的布道师。那么,咨询顾问是一个不错的选择……