如今软件技术的演变步伐已大大加快,你一眨眼,说不定就错过了某项重要技术。软件开发产业正在蓬勃发展,势头非常迅猛,新的软件产品和创新技术每天都在潮水般涌入市场。这就引发了一个问题:技术的这种快速演变是代表着软件开发进入到一个成熟阶段?还是说我们前进的步伐实在太快了?软件技术未来会如何发展?
要准确地回答这些问题似乎是不可能的,不过有一点可以肯定,如今的软件开发环境比过去任何时候都要庞大、都要复杂。由于众多不同软件技术和软件产品进入市场,再加上测试版到正式版的交付周期缩短,现在开发人员往往觉得不知所措,觉得自己落在后面。比如,单就微软平台就会有成百上千种新兴技术出现,而且这种演变迅速之快和技术的爆炸式增长态势并不仅仅局限于某局部领域。相反,这是整个软件开发领域普遍存在的现象。对软件开发的从业者而言,想紧跟技术的{zx1}脚步越来越困难。
那么,软件开发人员如何及时了解这个领域所出现的重要新动态,又不会淹没于与自身项目关系不大或帮助不大的开发工具和技术细节之中?如何分清好坏、去芜存菁,全身心地关注确实很重要、很宝贵的那些技术?尽管没有一个简单的答案能解开这个谜,但有一种方法也许管用,那就是坚持主动、抽象和完善。
主动出击:等待意味着失败
在.NET出现的早期,新工具和新技术的推出并不是太快。特别是最初6年到8年,这些工具和技术以合理的间隔时间推向市场,这使得软件开发人员可以花比较长的时间来研究、审查及评估这些技术,并进行实际试用,{zh1}可以准确地就这些技术对整个项目或单个目标来说是不是合适做出判断。在个别情况下,人们甚至可以对这些进行试用。作为开发团队也有时间等各种开发工具的正式版出来,然后进行评估。换句话说,从长远来看,等待能收到成效。
而到了今天:等待却意味着失败。如今的技术发展速度比十年前要快得多。而不断变化的软件领域涉及的技术面比以往任何时候都要广,不仅涉及企业技术、互联网技术、云计算还涉及移动技术,这就导致开发人员常常要同时学习和掌握多种平台和多种技术软件。
最近两三年新的技术和更新版本涌现更为频繁,测试版到发行候选版的周期已大大压缩,结果让人觉得好像每个月都有新技术在推出。对于普通的.NET开发人员来说,这就意味着无法像过去那样可以慢慢来,因为时不我待,如果袖手旁观,只是等更新版本和新技术推出,那必然会落伍。
开发人员要想不落伍,就必须变得更积极主动。实际上,这意味着需要摆脱传统的“等”的心态,而是应主动迎接即将出现的变化:明确哪些新兴技术(不管热不热门)最能满足项目在当前和将来的需求,向专家和项目团队积极打探{zx1}的演示版本和信息,在最终发行版上市之前参与讨论。软件开发人员最终是否成功,要看他能不能随机应变、迅速适应不断变化的形势,如果开发人员愿意努力变得更积极主动,他们不但很可能在迅速变化的时代幸存下来,还会有更大的作为。
学会抽象
要在如今的软件开发领域取得成功,积极主动而不是消极被动是一个重要方面,不过这也带来了一个让人生畏的挑战:面对出现在市场上的众多新技术,你该如何确定重点关注哪些技术?如何确定哪些技术会切实可行、经久不衰,哪些技术又会半途夭折?由于几乎不可能预测到哪些技术会被证实为是必不可少的技术,开发人员常常发现自己面临越来越大的压力:只好采取“什么都学习”的策略。然而,成为一个“样样都懂,样样不精的人”几乎与袖手旁观一样,不利于{zh1}成功。
由于开发人员手里通常没有能够预知未来的水晶球,这就需要有另一种办法为未来成功作好准备。抽象就是这样一种方法,抽象是指减少及剔除具体细节,以便重点关注重要概念。也就是说,如果开发人员在自己与不断变化的技术环境之间添加一层抽象,就能有效地选择、大致了解及评估众多相关重要的技术,又不会觉得自己被迫全面学习新出现的每一项小众技术。
有很多方法能帮助软件开发人员获得所需要的信息。比如:
1.向技术专家请教。项目或团队负责人以及行业分析师是合适的人选,该人应该对某一项技术能够给出有见地、冷静而客观的看法。确定专家之前,花一些必要的时间来真正了解这个人,就像认真审查重要的服务提供者,比如会计师、律师或者甚至汽车修理工,核实专家的观点是否正确而真实非常重要。
2.要是找不到专家,也可以找一家值得信赖、过去已证明了其价值的厂商。如果一家公司拥有得到验证、成熟可靠的技术,又能提供附加值,而另一家公司拥有新颖但还没有得到证实的技术,那么选择前者总比选择后者来得稳妥。
3.充分发挥工具的作用,比如对象关系映射(ORM)套件。由于ORM具有充当某种均衡器的独特功能——让软件开发人员可以在多个不同环境里面高效工作,不需要每一种数据库系统方面都要有专门知识,所以它提供了一种行之有效的手段,不需要从头开始学习,就可以充分利用新兴技术。
不管具体是如何做到的,反正在开发环境里面运用抽象的艺术让开发人员能够“与世隔绝”,减少软件领域的动荡和变数对自己的不利影响。
既见树木,又见森林
俗话说“只见树木,不见森林”,面临如潮水般涌现的新技术时,开发人员置身其中,想看清全局异常困难,比如很难看清哪些创新可能会给现有或将来的项目带来重大影响,哪些技术又会即将过时、湮没于计算机历史的长河中。而对这一切有一个比较清楚的认识,无论是对开发人员个体还是整个开发团队来说都极其重要。想得到更准确的看法,就需要进行一番“过滤筛选”,不断充实自己的知识面,也就是完善自己,做到既见树木,又见森林。
尽管很多技术xx在宣讲很多技术是如何重要,但{jd1}不要相信哪一些技术是每个软件开发人员为了成功而非学不可的。当然,针对特定场景而言,所用的工具和技术肯定存在好坏之分,确定哪些技术最适合某个具体的项目是{dy}步。
如果软件开发人员对某个开发环境的独特要求进行全面深入的评估,就能够确认该开发环境是否适合某项目的要求。同时,比较清楚地了解项目要求,反过来也有助于过滤筛选过程:确定及关注那些相关重要的技术可以带来{zd0}的附加值,又不用理会那些基本上没有多大实效的、炒作厉害的“热门”技术。想亲自试一下,比较全面地了解某项新技术(而不是仅仅略懂皮毛),就需要花几个晚上来熟悉它,这离不开深入研究、实际使用演示版本,请教该领域的专家。软件开发人员只有不断充实自己的知识,才能确认应当把哪些新技术添加到最终候选名单上,从而确保拥有{zx1}的技能组合。
大量新技术涌入市场没有要停止的丝毫迹象,如何选择给软件开发人员会面临越来越大的压力。实际上,软件开发人员应当少关注了解每一项新型小众技术的细节方面,多关注并弄清楚哪项技术最适合自己的软件开发实践和环境,以便保持足够的灵活性。开发人员只有真正了解了这个观念,才会发现其实可以在保持头脑清醒的同时保持技能{zx1}。