我们真正看到的不是软件工程师或计算机科学家的消亡,而是程序员和技术员的崛起。
作者 | Alexander Katrompas
译者 | 苏本如
责编 | 唐小引
出品 | CSDN(ID:CSDNnews)
我认识的大多数人要么是软件工程师要么是计算机科学家。他们中的大多数人都具有丰富的经验,并且在他们那个时代,如果想从事这些职业,必须接受过正规的计算机科学教育。当然,在当下如果想成为一个计算机科学家,仍然需要接受正规的计算机科学教育,但如果只是想从事编程工作,似乎不再有此要求。我所熟识的一些历史悠久的大学都对它们的年轻一代的技能和教育水平感到失望。我也在职场和校园里的一些初级编程候选人身上感受到了这种技能和教育水平的下滑。软件工程作为一门学科和职业似乎已经让位给了“黑客”和“牛仔”开发者,但这些后者往往不怎么懂计算机科学。是时代改变了吗?如果是,我们又该怎么办?
历史 101
如果你追溯计算机科学的起源,会发现最初它并不被称为计算机科学,没有一所学校开设了计算机科学系。当时的计算机科学只是数学或工程学下面的一个子学科。世界上第一个计算机科学系于 1962 年在普渡大学(Purdue University)成立,在之后的 15 年内,世界上仍旧只有屈指可数的几所大学开设了计算机科学系。直到 20 世纪 80 年代,计算机科学仍然被认为是数学或通用工程学下面的一个子学科。然而,早在 20 世纪 40 年代,我们就有了计算机程序员。这些早期的先驱者都是些什么人?他们又做了些什么呢?
奥古斯塔·阿达·金,洛夫蕾丝伯爵夫人;又名阿达·洛夫蕾丝。计算机科学中的第一人。计算机科学家之母。
最早的程序员都是数学家。她们通常不被称为程序员。她们是分析员、工程师、数学家,或者通常被称为“冰箱里那些真正聪明的女人”(最早的程序员大多是女性,而且大多数电脑都在“冷库”里)。这些程序员必须受过广泛的正规的数学和/或工程学教育。与我们今天所认为的程序员相比,她们更类似于科学家。随着时间的推移,到了 20 世纪 60 年代末,这一领域仍在不断发展,参与计算机编程的人们被称为软件工程师。这些人受过很高的教育(仍然主要是女性),通常拥有数学高等学位。这种情况持续了一段时间。
玛格丽特·汉密尔顿,第一批真正的软件工程师和最伟大的软件工程师之一。
到了 20 世纪 80 年代,计算机科学系及其学位开始在高校中占据一席之地。有人认为这是计算机科学的黄金时代。个人电脑开始出现在美国各地的家庭中,像《战争游戏》这样的电影引起了人们的兴趣,使大众想更多地了解电脑,而关于“互联网”的谣言吓坏了人们。在此期间,我们看到了正式的传统软件工程师的崛起。这是一个令人羡慕和尊敬的头衔,只有那些在数学、计算机科学和/或电子工程学方面受过正规教育的人才有资格获得这个头衔。这种情况也持续了一段时间。
情况的改变
到了 90 年代末,第一批能被我们现在简单地称之为“程序员”、“码农”或“开发人员”的人出现在人们的视野里。这些人没有正规的大学学位,他们只是拥有一个技术培训证书或实操编程副学位证书,或者仅仅是通过互联网自学。慢慢地,这个新的群体以新的头衔(比如“程序员”或“开发人员”,而不再是“工程师”)进入软件工程领域。与此同时,我们也看到了计算机其他相关技术领域从业人员的激增,比如网络专家和系统管理员。
直到 21 世纪 00 年代初期,作为一名招聘经理,我很少看到一个申请软件工程工作的应聘者没有与计算机科学相关的四年学位。如果我收到了这样的简历,我会毫不犹豫地把它扔掉。到了 21 世纪 10 年代后期,我收到的求职申请中已经至少有一半是来自没有计算机科学相关正式学位的应聘者。现在,作为一名计算机科学教授,我经常遇到学生在上了一两堂课后就辍学的情况,因为他们获得了某份程序员的工作(通常不是一份好工作,也不是他们能胜任的工作,而是一份空有“开发人员”头衔的工作)。
现在,“软件工程师”这个头衔变得要么不受欢迎,要么是留给大型科技公司的传统高级职位。招聘广告上的主要职位名称变成了“开发人员”、“程序员”、或者是非常荒谬滑稽的“黑客”、“代码忍者”或“代码大师”。我们也发现可笑的“全栈开发人员”的头衔满天飞,仿佛这个头衔有什么特殊含义似的(其实并没有)。学位不再是获得程序员工作的必要条件了,事实上成为程序员甚至不再需要受过正规教育。程序员的标准似乎在急剧下降,以至于任何能打字的人现在都成了“程序员”。
发生了什么?
对于许多守旧派来说,典型的结论和观点是:标准下降了,显然是因为现代社会对具备编程能力的人(甚至是初级的)的需求急剧上升。必须有人来做这些事,所以不得不降低门槛,把一些不是那么高学历的行尸走肉们聘用来坐在电脑前。表面上来看这是有道理的。适合攻读四年制的自然科学学位的人本来就少,而适合攻读数学、工程和计算机科学等学科的硕士学位的人更加地少。
很明显,这变成了一个简单的数学问题。对开发人员的要求高得离谱,能够获得计算机科学四年学位的人数相对太少,而我们现在开发领域需要大量的程序员。我们必须以某种方式满足对开发人员的需求,所以我们只得降低标准。显然,现在我们的标准已经低到可以让任何人成为“工程师”,我们只能祈祷会有好结果发生。看上去,真正的软件工程正在消失,而几乎没有接受过正规教育的“编码”和“黑客”行为正在取代它。包括我在内的许多受过正规培训的工程师都相信这一点。然而,和大多数简单的答案一样,我们应该在下结论之前深入研究。
真正发生变化的是计算机技术的成熟、以及模块化和产品化的实现。我们过去在涉及计算机的各个方面都需要训练有素、受过正规教育的软件工程师,这是由于当时在一个企业或机构中的计算机数量只是…一台。一台非常大,非常复杂,非常昂贵的计算机。而且这台计算机不具备今天我们所说的网络,也没有互联网的存在。在这些机器上工作的人必须集科学家、工程师和数学家的所有能力于一身。这些早期与计算机相关的工作的严格程度令人难以置信,因为计算机技术本身还不成熟,大部分都是实验性的。随着计算机技术的成熟,它变得模块化、产品化和可包装化(就像任何技术一样)。不再需要一个集数学家、工程师、程序员、网络管理员和数据库管理员于一身的使用者。技术变成了即插即用,他们的工作也变成了即插即用。技术角色(像技术本身一样)被许多受过重点培训的专家分解,而不再需要少数受过高等教育的通才去做。
找到 bug 了!哦,是一只蛾子!
这种情况在所有领域都会发生。最初只有最有远见、最有才华和受过教育的人才有机会开拓一个新领域。一开始,只有那些对整个领域都有充分的了解的、受过正规教育、和有着严谨思维的人才能进入该领域。想想汽车工业的早期(在它成为一个工业之前):只有那些对冶金和工程有着深刻理解的人才能制造、设计或修理汽车。在 20 世纪 00 年代,建造或修理一辆汽车可能需要铁匠、冶金、制造、工程、物理和化学方面的知识和技能(无论接受的是否是正规教育)。到了 20 世纪 30-40 年代,汽车需求猛增,装配线被发明出来,模块化零件也被发明出来。如今,汽车生产流水线上的普通工人对汽车工程和冶金知识几乎一无所知,更不用说控制汽车所需的计算机科学了。同样地,我们的汽车技术人员对工程、冶金(或计算机科学)也几乎一无所知。他们使用诊断设备来告诉他们问题所在,他们在线订购零件,然后更换零件。这些技术人员和装配线工人受过培训,技术娴熟,但他们的工作方式与机械工程师或冶金学家完全不同。同样的情况也已经在计算机科学和软件工程领域发生了 - 因为它的发生是个必然。
编程技术员的出现
正如汽车行业的情况一样,一方面,编程行业对熟练工人的需求激增。另一方面,计算机和软件变得模块化、可包装化和产品化。同时,在网络、系统管理、加密、数据库、电气工程等与计算机科学相关的领域,我们也看到了从业人员爆炸性的增长。我们根本负担不起让计算机领域的每一个从业者都成为训练有素的计算机科学家和数学家,就像我们也无法在制造或者修理汽车时,让每一个装配线上的工人和机工都具备机械工程硕士学位一样。因为这根本行不通。
现今,在电脑键盘后面的从业人员越来越类似于熟练和训练有素的汽车技术员(而不是经过正式培训的机械工程师)。越来越多的“程序员”或“开发人员”没有受过正规计算机科学教育。取而代之的是,这些“程序员”或“开发人员”接受了编程方面的专门训练而掌握了编程技术,他们也会接受一些基础的计算机科学教育,但主要都是一些直接关系到编程方面的内容。
今天的编程不再是一个需要接受过广泛而正规的计算机科学教育的人士、在混乱又复杂的实验环境中进行的事了。今天的许多编程都仅需要类似于汽车技工的技能,即识别所需零件、知道在哪里找到零件并将其正确插入。
而现在的程序员也不再需要知道如何设计和构造排序或搜索算法,并在实现之前对其性能进行数学分析。他们只需要找到排序或搜索所需的“零件”,并将其正确插入。
我们真正看到的不是软件工程师或计算机科学家的消亡,而是程序员和技术员的崛起。
这些新的“熟练工人”也具有一定的计算机科学基础知识,但仅限于和编程以及编程方面的实际培训直接相关的部分。
真正的计算机科学与软件工程:活得很好!
计算机科学家和真正的软件工程师并没有被“程序员”、“开发人员”和“黑客”们所取代,我们只是将我们的职业和职位重新组织成一个行业,这个行业正在成型。首先要感谢计算机科学家、工程师和数学家们,正是他们的工作诞生了编程技术员(即现代的“开发人员”或“编码人员”)这一职业。由于计算机科学的进步,软件的构建现在已经模块化,并且大部分是预先打包和指定的,这导致了广泛的软件库、包管理器、依赖关系管理器、集成开发环境、软件即服务、基础设施即服务、分布式代码库,当然还有因特网的出现;它们最开始都是由计算机科学研究实验室的博士们和工程师们建立起来的。此外,像 Python 这样的编程语言已经把细节抽象到了几乎任何人都可以只需要具备基本的计算机科学知识就可以编程的程度。
计算机科学家仍在努力建立新理论和新技术。受过正规教育且拥有计算机科学学位的软件工程师仍在努力将这些理论付诸实践。然而,随着这些新技术逐渐渗透到一线,软件开发中的大部分日常工作还是由程序员和技术员来完成的。
当下,对于在计算机科学方面受过高等教育的计算机科学家、数学家和软件工程师的需求度比以往任何时候都高,只是他们在该领域中只占很少一部分,所以难以看到他们。曾经有段时间,这个行业中 100%的从业人员都是正式的工程师和科学家。现在他们所占的比例越来越小。不是因为他们被替换了,而是由于这些受过正规训练的计算机科学家和软件工程师创造了一个新的需求量很大的职位:程序技术员。
真正的软件工程师和计算机科学家没有倒下,我们仍旧在这里,做得比以往任何时候都好。我们应该张开双臂欢迎这些新同事,因为现实是:这些新同事承担了战壕里的大部分工作。
你的选择
得益于技术的爆炸性增长,以及早期软件工程先驱者的工作,现在整整一代人都可以在过去几乎无法涉足的领域拥有一份既能赚大钱又令人愉悦的职业。正如 20 世纪 30-40 年代的汽车和制造业革命促使了中产阶级的产生,同时将人民的生活水平提高到了空前的水平一样, 21 世纪的 IT 革命也在做着同样的事情。我们看到了计算机科学的民主化,这是件好事。
现在是这些都取决于你的选择了。几乎每个人都可以成为持续发生的技术革命的一部分,并在技术领域获得一份报酬丰厚且身心愉悦的职业。你面临的选择不是你能否进入科技行业,而是你想进入哪个行业,达到什么水平,以及如何达到这个水平?取得了数学和计算机科学博士学位的人们仍在提出新理论,测试这些理论,并将其应用到实际技术中。受过正规培训和教育的具有计算机科学硕士学位的软件工程师是该领域的软件架构师和领导者。编程技术人员(即现代的程序员、开发人员和码农)站在第一线,将“零件”部署到位,组装和维护系统,而分析师和管理员则为其提供支持。
与早期只有受过最严格训练和教育的人才能考虑进入计算机领域的情形大不相同,现在你可以选择你的教育水平,通过提高你的教育水平来自由选择或改变你从事的行业。然而,要清楚的是,如果你想以编程谋生,你仍然无法避免学习计算机科学的一些基础知识,你需要喜爱编程技能和相关的生活方式。这仍然不容易。只是现在你可以选择从哪里开始,以及想走多远。
英文:The Fall of The Software Engineer, The Rise of The Programmer Technician
链接:https://medium.com/@
alexkatrompas/the-fall-of-the-software-engineer-the-rise-of-the-programmer-technician-451a572d28b0
作者:Alexander Katrompas
译者:苏本如