在我们周围,我们周围都是糟糕的软件。使用错误假设的数十年历史的批处理脚本而脚的养老基金。信贷机构泄漏了超过一亿个社会安全号码和其他机密数据。更不用说我们周围看到的无数错误和令人沮丧的软件,它们来自较小的供应商和较旧的企业软件。
这种无能将永远不会在其他工程学科中飞速发展。我们永远不会忍受像普通软件系统那样容易出错的桥梁。那么为什么软件工程如此糟糕?为什么那里有很多废话软件?
要了解原因,我们首先需要了解开发人员的技能与他们为给定任务生产的软件的实用性之间的关系。
在第一个阶段,您将拥有实际上无能的“开发人员”。您可能会在此存储桶中看到各种各样的技能水平……但是它们的相似之处在于最终产品在功能上是无用的。在这方面,计算机是无情的-如果您不知道如何编译应用程序,则可能根本不编写它。如果您不知道如何构建应用程序的核心功能,绝对没有人会使用它。低于一定的技能门槛,您将不会生产任何可用的软件。这个存储桶中的大多数“开发人员”可能会在闲暇时间涉猎编码,但是您很少会发现他们生产专业软件。
但是,一旦超过此阈值,情况就会改变。在低端,开发人员现在已经足以生产最低限度可行的软件系统。随着这些开发人员越来越好,其软件的实用性也迅速提高。一个“运行”但缓慢,错误,不安全且难以理解的应用……逐渐开始减少错误,更高效,更安全且更易于理解。与其他两个存储区不同,随着该存储区中的开发人员技能的提高,他们产生的软件将变得更好。
最后,当开发人员达到一定的技能门槛时,他们会跨入第三个阶段。每个人都达到了如此高的水平(相对于他们要解决的问题)的存储桶,进一步的个人成长将对最终产品的影响最小。也就是说,Google的任何随机工程师都可以构建与Jeff Dean一样出色的CRUD应用。
在理想的世界中,第一和第二类中唯一的开发人员将是学生或入门级员工。所有专业软件系统将主要由开发人员在第三个存储区中构建。掌握了解决指定问题所需的所有技能并开发出非常接近柏拉图式理想的解决方案的开发人员。在这样一个天堂般的世界中,我们在我们周围看到的所有软件都将具有类似的高品质……完全按预期运行,并具有最佳性能,并且没有安全漏洞。在这个世界上,公众对所有软件都充满喜悦而不是沮丧。
首先,相对于第二个存储桶,第三个存储桶中的显影剂数量非常少。编程是一种“易学,难于掌握”的活动。数以百万计的人可以编写功能脚本,但是很少有人掌握软件工程的艺术。此外,对于软件行业而言,没有任何关门手段–没有相当于美国医学协会或律师协会的软件。毫不奇怪,与专家能力相比,您拥有更多的新手和中级能力的人。
其次,对专业开发人员的需求巨大。在几乎每个行业中,软件开发人员都有机会进行巨大的改进。与机会等受到严重限制的天文学这样的利基行业相比,软件开发是人才受限的领域。即,主要瓶颈是找到有才能的软件开发人员,而不是寻找有用的工作供他们去做。
综合考虑这两个问题,大多数想聘请专业开发人员的公司都无法这样做。没有足够的专业开发人员来招聘,并且那些开发人员经常得到FANG公司或热门创业公司的无与伦比的高报价。
因此,其他所有公司都在做次佳的事情。他们从第二个阶段雇用开发人员。大致可以归类为“足够好”的开发人员。他们的应用存在错误,安全漏洞,并且无法处理高负载。但是至少他们能够构建出“可行的”东西。比现状更有用的东西。可以通过最少的法规审查将其推广到生产中的产品。
您可能会想起上述是世界的自然状态,但实际上并非如此。
有很多工作属于“易于掌握”类别。像出租车司机,建筑工人或酒保这样的工作。很大一部分工人已经达到掌握能力的职位,而进一步提高技能的回报却大大减少了。
而且,还有很多职业机会有限,以至于雇主只能选择雇用具有专业能力的职业。例如,钢琴家。在每次家庭聚会中,业余钢琴演奏家比比皆是,但是鉴于有才华的钢琴演奏家的数量远远超过了预定音乐会的数量,因此您永远找不到他们在音乐厅演奏。
最后,您面临的工作很难掌握,机会很多,但进入门槛受到监管。例如,医生。在奥巴马医改之前的世界里,有很多人买不起医疗保险,他们会选择“某些”医疗保健而不是根本没有医疗保健(无论是否建议,都是蠕虫的另一罐)。但是,由于严格的法规,只有具有出色能力的人员才被允许提供医疗服务。对于许多面临巨大监管监督的其他工程学科(例如,建造桥梁或摩天大楼或医疗设备),情况也是如此。
软件开发是以上所有方面的一个奇特的部分。这很容易学习,因此世界各地都有大量的“足够好”的开发人员。开发人员构建的软件解决方案虽然有些有用,但到处都是bug和安全漏洞。同时,这很难掌握,因此,可以避免上述陷阱的开发人员就很难找到。
软件开发的机会是如此丰富,以至于大多数雇主几乎都不可能招募专家开发人员。机会是如此丰富,以至于尽管全球有大量新手开发人员,但每个人都有工作。
最后,软件工程完全没有看门人。任何人都可以参加编码训练营,参加一些在线编码课程,并在第二天开始在Upwork上出售其服务。他们的工作产品可以立即投入生产,而无需监管。
将这三者结合起来,不难理解为什么会有这么多糟糕的软件。软件正在吞噬整个世界,其错误和安全漏洞也是如此。