我周围的大多数人都是软件工程师或计算机科学家,他们大多经验丰富并接受过严格的计算机科学教育。当然,这只能做到计算机科学,不一定是编程。许多有经验的同事都对年轻同事的技能和教育水平下降感到遗憾。我还看到入门级编程学习者在工作和课堂上的技能和教育发生了转变。软件工程作为一门学科和职业似乎已经让位于对实际计算机科学知之甚少的“黑客”和“牛仔”开发人员。事情变了吗?如果是,如何?如果历史101追溯计算机科学的本源,那它还不叫计算机科学,学校连计算机系都没有设立。计算机科学作为一门学科是数学和/或工程学的一个分支学科。第一个计算机科学系于1962年在普渡大学成立,15年后大学计算机科学系相继成立。在20世纪80年代,计算机科学在很大程度上仍被认为是数学或工程学的一个子领域。然而,早在1940年代,我们就有计算机程序员。这些早期先驱者是谁,他们做了什么?奥古斯塔·阿达·金,洛夫莱斯伯爵夫人;还有阿达洛夫莱斯。计算机科学家之母最早的程序员是数学家。她们往往不被称为程序员,而是分析师、工程师、数学家,或者“冰箱里那些真正聪明的女人”(最早的程序员大多是女性,大多数计算机都在“冷藏库”里面)。这些“程序员”必须在数学和/或工程学方面接受过广泛的正规教育。早期的程序员比我们今天认为的程序员更像科学家。随着时间的推移,到20世纪60年代末,这个领域发展壮大,从事计算机编程的人被称为软件工程师。这些人受过高等教育(仍然主要是女性),通常拥有数学高级学位。这持续了一段时间。玛格丽特·汉密尔顿,第一位真正的软件工程师;最伟大的学科之一到1980年代,计算机科学系和学位在大学和学院如雨后春笋般涌现。有些人认为这是计算机科学的黄金时代。个人电脑进入全美千家万户,《战争游戏》(Wargames)等电影激发人们对电脑的学习兴趣,传说中的“互联网”挑战人们的认知。在这段时间里,我们见证了正式但传统的软件工程师的崛起。这个令人垂涎和受人尊敬的头衔是为那些接受过数学、计算机科学和/或电气工程正规教育的人保留的。这也是经过一段时间发展起来的。这种转变始于90年代后期,我们现在简称为“程序员”、“编码员”和“开发人员”的人开始出现,他们不是正式的大学毕业生,但拥有军事技术培训或动手编程的学位同事。拥有学位等证书的人,或者只是通过互联网自学的人。渐渐地,这个新团队以新的头衔进入了软件工程领域,例如从“工程师”到“程序员”或“开发人员”,我们也见证了网络专家和系统管理员等计算机相关技术领域的爆炸式发展。发展。即使在2000年代初,作为招聘经理,我也看到几乎所有申请软件工程职位的人都拥有相关的四年制学位。如果我看到这样的简历,我会想也不想就跳过它。快进到2010年底,我看到的申请中至少有一半来自没有正式学位的人。现在作为一名计算机科学教授,我经常有学生在上完一两节课后就退学了,因为他们找到了一份像程序员这样的工作(通常不是一份好工作,也不是他们梦寐以求的工作,而是一份名为“开发人员”的工作)。资料来源:Pexels“软件工程师”这个头衔要么不受欢迎,要么被保留给大型科技公司的传统和高级职位。如今,将“开发人员”或“程序员”视为职位头衔很常见,不幸的是,将荒谬可笑的“黑客”、“编码员”或“代码大师”视为职业。我们还看到了到处乱扔的可笑的“全栈开发人员”头衔,好像它有一些特殊的含义(但事实并非如此)。学位不再是衡量程序员工作适合性的必要条件,事实上正规教育也不一定是必需的。标准似乎急剧下降,以至于任何会打字的人都可以称为“程序员”。发生了什么?对于保守派来说,典型的结论和论点是标准已经下降。显然,对任何会编程(甚至是初级)的人的需求都在猛增。典型的论点是必须有人去做,所以我们降低了门槛只是为了躲在键盘后面。从表面上看,这是有道理的;很少有人适合攻读数学、工程学和计算机科学等学科的四年制高级学位。显然,它变成了简单的数字。对开发人员的需求高得离谱,能够获得计算机科学四年制学位的人数相对较少,我们现在需要这个领域的程序员。无论如何,我们必须满足需求,所以我们只是降低了标准。显然,现在每个人都可以成为“工程师”,我们盲目地希望最好。从表面上看,真正的软件工程正在消失,取而代之的是几乎没有受过正规教育的“编码”和“黑客”。这是许多受过正规培训的工程师(包括我)愿意相信的简单答案。然而,与大多数简单的答案一样,我们应该在得出结论之前更深入地挖掘。真正改变的是计算机技术的成熟化、模块化和产品化。我们过去需要在计算的各个方面都训练有素、受过正规教育的软件工程师,因为企业或机构中的计算机数量是……一台。一台非常大、非常复杂、非常昂贵的计算机。没有今天所谓的“互联网”。在这些机器上工作的人必须是多位一体的科学家、工程师和数学家。这些早期努力的严谨程度令人难以置信,因为技术本身还不成熟,而且主要是实验性的。随着计算机技术的成熟,它变得模块化、产品化和打包(就像任何技术一样)。不再有数学家、工程师、程序员、网络管理员和数据库管理员合而为一。技术已经变得即插即用,他们的工作也变得即插即用。技术角色(就像技术本身)分散在许多训练有素的专家中,而不是在少数受过高等教育的通才中。找到故障了!原来是一只飞蛾。这发生在所有领域。第一天是为有远见、最有天赋和受过高等教育的人准备的。在早期,只有受过正规教育的人才能拥有,因为每个人都必须对整个领域有扎实的了解。想想汽车行业的早期(在它成为一个行业之前);只有对冶金和工程有深入了解的人才能制造、设计或修理汽车。在1900年代早期建造或修理汽车可能需要锻造、冶金、制造、工程、物理和化学方面的知识和技能。1930-40年代,汽车需求猛增,装配线和模块化零件应运而生。如今,汽车装配线上的普通工人对汽车的工程和冶金几乎一无所知,更不用说控制汽车所需的计算机科学了。同样,我们的汽车技术人员对工程、冶金(或与此相关的计算机科学)几乎一无所知。他们使用诊断设备找出问题所在,并在线订购和更换零件。这些技术人员和流水线工人都经过培训且技术娴熟,但工作方式与机械工程师或冶金学家完全不同。这在计算机科学和软件工程中已经发生,而且必须发生。喷码技术人员与汽车行业一样,喷码行业对技术工人的需求激增。与此同时,计算机和软件变得模块化、打包和产品化。与计算机科学相关的领域,如网络、系统管理、加密、数据库和电气工程,也出现了爆炸式增长。我们根本无法让每个从事计算的人都成为训练有素的计算机科学家和数学家,就像如果每个装配线工人和机械师都必须获得机械工程制造或维修硕士学位,我们就永远无法制造汽车一样。这根本行不通。计算机键盘背后的人越来越像熟练和训练有素的汽车技术人员(而不是经过正规培训的机械工程师)。越来越多的“程序员”或“开发人员”没有接受过正规或广泛的计算机科学教育。相反,这类人接受过编程技能方面的专门培训和一些基本的计算机科学教育。今天,编程不再需要在免费的复杂实验环境中进行的广泛而正式的计算机科学教育。今天的大部分编程都需要类似于汽车修理工的人能够识别所需的零件,知道在哪里找到它们,并正确地插入它们。日常程序员不再需要知道如何设计和构造排序或搜索算法,并在实现它们之前对其性能进行数学分析。程序员只需找到排序或搜索“部分”并将其插入即可。我们没有看到软件工程师或计算机科学家的衰落,我们看到的是程序员技术专家的崛起。这些新技术工作者是那些具有计算机科学基础知识的人,但只是因为它与编程和编程实践培训直接相关。真正的计算机科学和软件工程:充满活力的计算机科学家和真正的软件工程师并没有被“程序员”、“开发人员”和“黑客”所取代,我们只是将职业和职位重新设计成一个成熟的行业。正是由于计算机科学家、工程师和数学家的努力,编程技术人员(现代的“开发人员”或“编码员”)才有了今天的存在。由于计算机科学的进步,软件的构建现在是模块化的,并且大多是预先打包和指定的,引入了广泛的软件存储库、包管理器、依赖管理器、集成开发环境、软件即服务、基础设施作为服务、分布式代码库,当然还有互联网的出现;这一切都始于计算机科学研究实验室的博士和工程师。此外,像Python这样的编程语言已经将细节抽象到如此程度,以至于几乎任何人只要有基本的计算机科学知识就可以做到。计算机科学家仍在努力建立新的理论和技术。受过正规教育并拥有计算机科学学位的软件工程师仍在将这些理论付诸实践。然而,随着这些新技术逐渐渗透到一线,软件开发中的大部分日常工作都由程序员和技术人员完成。受过正规教育的计算机科学家、数学家和拥有计算机科学高级学位的软件工程师今天仍然在这里,而且需求量比以往任何时候都高,只是占该领域总人数的一小部分。正式的工程师和科学家占该行业的100%,现在他们的比例越来越小,不是因为他们被取代了,而是因为那些接受过正式培训的计算机科学家和软件工程师创造了一个新的高需求工作:程序技术员。真正的软件工程师和计算机科学家不仅没有衰落,而且还在这里,做得比以往任何时候都好。我们应该张开双臂欢迎我们的新同事,因为让我们面对现实吧,他们现在正在做大部分的工作。现在是选择的时候了。由于技术的爆炸式增长,以及那些早期软件工程先驱的辛勤工作,整整一代人都可以在过去几乎无法进入的领域拥有有利可图的职业。正如1930年代和1940年代的汽车和制造业革命带来了中产阶级和生活水平的空前提高一样,2000年的IT革命也在做着同样的事情。我们已经看到了计算机科学的民主化,这是一件好事。现在选择权在你。几乎任何人都可以成为正在进行的技术革命的一部分,并在技术领域找到一份高薪职业。现在的选择不是你能不能进入科技行业,而是你想进入哪个行业,处于什么水平,如何进入这个行业。计算机科学的博士们每天都在研究和提出新的理论。那些拥有数学和计算机科学高级学位的人仍在测试理论并将其应用到实际技术中。具有计算机科学学位且受过正规培训和教育的软件工程师是该领域的软件架构师和领导者。编程技术人员(即现代程序员、开发人员和程序员)在第一线,将零件放置到位、组装和维护系统,而分析师和管理员则提供支持。与早期只有受过最高培训和受过高等教育的人才会考虑进入计算领域不同,现在你可以选择你的教育水平,并通过提高你的教育来随意选择或改变你的职位。然而,需要明确的是,如果你想谋生,你仍然需要具备一些计算机科学的基础知识。你需要有很多技能和生活经验。这并不容易。只有现在您才能选择从哪里开始以及要走多远。
