要成为当今软件开发中受人尊敬的专业人士,你需要掌握各种技能,而且达到高水平的专业级别。最起码,你需要能够把你的英语解决方案翻译成软件实现。不仅技术上要正确,在业务上也得可行。因此,对业务有一个深刻的理解总是没有坏处的。这使得你可以有效地收集和谈判客户的需求,并确保软件能够经过时间的考验。企业希望软件是一个长期的投资,能够在几年甚至几十年之后依然物尽其用。很少有希望软件只存活几个星期的。如果真的有,那可真是一个糟糕的投资。
对软件开发的熟练要求放宽了
在美国,对软件开发人员的需求一直在增长,但对技能熟练程度的要求却在降低。计算机编程退步到了寻找正确的软件库然后将它们串接起来得程度。那么你如何解释软件或平台作为服务的迅速崛起?是的,有时你是需要弄清楚哪些组件装配在一起才最适合你的特定问题,而且,当找不到这样的组件时,你必须自己动手创建。但是,现在的问题是,很多时候,该软件已经存在。在这种情况下,你的工作就是无聊重复的顺序:选择库,联合库,按照需求测试。
但是先等等!你可能会认为,编程还囊括了很多合同规定的内容。当然,我们可以构建一个已经构建过的结构,但它们还需要个性化,才能适应特定的业务需求。这无疑需要一定程度技术和智慧的,对吧?而对于这种说法,我承认。是的,业务需求常常是非常多样和特殊的,然而现在却在开始渐渐地变得大同小异。
因此,选择组件来满足业务需求成为了自动化的主要目标。既然有这么多潜在的组合,那么那些永远不需要睡觉、吃饭和休息的员工才是最完美的员工。人工辅助软件开发的时代正在到来。也就是说,计算机将执行大部分的开发步骤,而人类只需要协助它们即可。
在这个新的时代,人工智能研究人员和测试人员将占据统治地位。人工智能研究人员负责想出大致的思路。他们将确定需要解决哪些问题,即通过给定的输入描述期望的输出。然后,测试人员编写断言这个问题确实被解决的测试。也就是说,验证正确的输出是由给定的输入确定的。此时的计算机负责将给定的输入转换为所需的输出。
遗传编程
你可能会觉得自动化的软件开发是一个奇思妙想,甚至觉得这是不可能的。但是遗传编程告诉我们 nothing is impossible。软件会产生变异,改变它们的指令,努力顺利发展以变得更适合。在每个突变后,它们将自行评估它们是否正趋向于期望的输出。这里对于合适的评估是由测试提供的。而且是大量的测试。这些测试都封装了经过时间、空间和功能性制约的业务逻辑。突变越合适,通过的测试越多。这是值得重申的是,我们不应该关心生成实现的细节。事实上,生成多个符合要求的解决方案是完全合理的。要减少解决方案只需要增加更多限制问题就可以了。
软件开发人员的传统角色将会被淘汰。他们很快会被重新定位到设计、开发和维护测试。即,计算机的程序设计将变得不必要,因为它们自己就能编程。这种范式将对软件行业产生翻天覆地的影响。改变业务需求,直接改变测试,而这会触发软件自动化的进化。修改现有代码,以满足新兴需求的压力将一去不复返。计算机会做好这件事:因为它不会有重新开始的顾虑。它也不关心可维护性,并且最后一定更兼容不断变化的业务需求。
说了这么多,我决定把将来的重心放到测试上,以应对将来软件行业的变化。那么,你呢?