我周围大多数人都是软件工程师或计算机科学家,大多经验丰富且接受过严格的计算机科学教育。当然,这只能成就一个计算机科学,却不一定能成就编程。许多经验丰富的同事都痛惜年轻同事技能和教育水平的下降。
同时我也发现,入门级编程学习者在工作和课堂上的技能和教育方面有所转变。似乎软件工程作为一门学科和职业已经让位给了“黑客”和“牛仔”开发人员,但他们对实际的计算机科学知之甚少。事物发生变化了吗?如果有,怎么办?
历史101
如果追溯到计算机科学的起源,它还不叫计算机科学,学校甚至还没有设置计算机科学系。计算机科学作为一门学科是数学和(或)工程学的一个下设学科。第一个计算机科学系于1962年在普渡大学成立,15年后,大学计算机科学系才相继推出。在20世纪80年代,计算机科学在很大程度上仍被认为是数学或一般工程的一个子领域。然而,早在20世纪40年代,我们就有了计算机程序员。这些早期的开拓者是谁,他们做过什么的呢?
最早的程序员是数学家。那时通常不称为程序员,而称作分析员、工程师、数学家,或者被称作“冰箱里那些真正聪明的女人”(最早的程序员大多是女性,大多数电脑都在“冷库”里)。这些“程序员”必须在数学和(或)工程方面受过广泛的正规教育。与我们今天所认为的程序员相比,早期的程序员更像科学家。随着时间的推移,到20世纪60年代末,这一领域发展壮大,进行计算机编程的人们被称为软件工程师。这些人接受过高等教育(仍然主要是女性),通常拥有数学高级学位。这种情况持续了一段时间。
到了20世纪80年代,计算机科学系和学位开始在各个高校中崭露头角。有人认为这是计算机科学的黄金时代。私人电脑出现在美国各地的家庭中,像《战争游戏》(Wargames)这样的电影引起了人们的兴趣,使他们想更多地了解电脑,而传说中的“互联网”又在挑战人们的认知。在此期间,我们见证了正式而又的传统软件工程师的崛起。该头衔令人垂涎,同时也让人肃然起敬,只有那些在数学、计算机科学和(或)电子工程方面受过正规教育的人才能获得该头衔。这也发展了一段时间。
开始转变
到了90年代末,我们现在简单地称之为“程序员”、“码农”和“开发人员”的人开始涌现,他们不是正规大学毕业,而是拥有军事技术培训学位或动手编程副学位等证书的人,或者仅仅是通过互联网自学的人。渐渐地,这个新的团队以新的头衔进入软件工程领域,比如“程序员”或“开发人员”,而不是“工程师”,我们也见证了网络专家和系统管理员等计算机相关技术领域的爆炸式发展。
即使到了2000年初,作为一名招聘经理,我看到过任何申请软件工程职位的人几乎都有相关的四年学位。如果我看到这样的简历,我会不假思索地跳过。快到2010年末,我看到的申请中至少有一半来自没有正式学位的人。现在作为一名计算机科学教授,经常有学生在一两堂课后辍学,因为他们得到了一份类似程序员的工作(通常不是一份好工作,也不是他们理想中的工作,而是一份名为“开发人员”的工作)。
“软件工程师”这个头衔要么不受欢迎,要么专属于大型科技公司的传统和高级职位。现在,通常是以“开发人员”或“程序员”作为一个职位,或者不幸的话,荒谬和滑稽的“黑客”、“码农”或“代码大师”成为职业。我们也看到了荒谬的“全堆栈开发人员”的标题到处乱扔,似乎这有一些特殊的意义(但其实没有)。学位不再是衡量程序员工作适合与否的必要条件,事实上也不一定需要正规教育。标准似乎在急剧下降,以至于任何能打字的人都能叫“程序员”。
发生了什么?
对于保守派来说,典型的结论和论据是标准下降了。很明显,对任何一个能编程的人(甚至是初级的)的需求都急剧上升。典型的论点是必须有人这样做,所以我们降低了标准杆,只是为了藏在键盘后面。表面上看这是有道理的,很少有人适合攻读四年制的数学、工程和计算机科学等学科的高级学位。
很明显,它变成了简单的数字。对开发人员的需求高得离谱,能够获得计算机科学四年学位的人数相对较低,我们现在需要这个领域的程序员。不管怎样,我们必须该满足需求,所以我们只是降低了标准。显然,现在人人都能成为“工程师”,我们盲目地希望得到最好的。表面上,真正的软件工程正在消失,而几乎没有正规教育的“编码”和“黑客”正在取代它。这是一个简单的答案,许多受过正规培训的工程师(包括我)都愿意相信。然而,和大多数简单的答案一样,我们应该在下结论之前深入研究。
真正改变的是计算机技术的成熟化、模块化和产品化。我们过去要求在计算机各个方面都是训练有素、受过正规教育的软件工程师,因为一个企业或机构中的计算机数量是…一台。一台非常大,非常复杂,非常昂贵的计算机。那时也没有如今所谓的“互联网”。在这些机器上工作的人必须是一体化的科学家、工程师和数学家。这些早期工作的严格程度令人难以置信,因为这项技术本身还不成熟,大部分是实验性的。随着计算机技术的成熟,它变得模块化、产品化和包装化(就像任何技术一样)。不再需要一个集数学家、工程师、程序员、网络管理员和数据库管理员于一体的人。技术变成了即插即用,他们的工作也变成了即插即用。技术角色(如技术本身)在许多受过重点培训的专家中被分解,而不是在少数受过高等教育的通才中。
这在所有领域都会发生。第一天是属于那些具有远见、最具天赋和受过高等教育的人。在早期,只有受过正规教育的人才能拥有,因为每个人都必须对整个领域有充分的了解。想想汽车工业的早期(在它成为一个工业之前);只有那些对冶金和工程有着深刻理解的人才能制造、设计或修理汽车。在1900年初建造或修理一辆汽车可能需要铁匠、冶金、制造、工程、物理和化学方面的知识和技能。在1930-40年代,汽车需求猛增,装配线和模块化零件出现。如今,生产汽车流水线上的普通工人对汽车的工程和冶金知识几乎一无所知,更不用说控制汽车所需的计算机科学了。同样地,我们的汽车技术人员对工程、冶金(或计算机科学)也几乎一无所知。他们使用诊断设备来找出问题所在,在线订购和交换零件。这些技术人员和装配线工人受过培训,技术娴熟,但工作方式与机械工程师或冶金学家完全不同。这已经在计算机科学和软件工程领域发生了,也是必须发生的。
编程技术人员
正如汽车行业的例子一样,编程行业对熟练工人的需求激增。同时,计算机和软件变得模块化、包装化和产品化。网络、系统管理、加密、数据库、电气工程等与计算机科学相关的领域也出现了爆炸性的增长。让计算机领域的每一个人都成为训练有素的计算机科学家和数学家,我们根本负担不起,就像如果每一个装配一线工人和机械师必须要求具有机械工程硕士学位,我们永远不可能实现汽车制造或修理。这样根本行不通。
电脑键盘背后的人越来越类似于熟练和训练有素的汽车技术人员(而不是正式培训的机械工程师)。越来越多的“程序员”或“开发人员”没有接受过正规或广泛的计算机科学教育。相反,这类人接受过编程技能的专门训练,也有一些基础的计算机科学教育。如今,编程不再需要广泛而正规的计算机科学教育,在免费的复杂实验环境中进行。今天的许多编程都需要类似于汽车技师的人,有能力识别所需零件、知道在哪里找到零件并将其正确插入。日常程序员不再需要知道如何设计和构造排序或搜索算法,并在实现之前对其性能进行数学分析。程序员只需找到排序或搜索“部分”并将其插入。
我们看到的不是软件工程师或计算机科学家的衰落,我们看到的是程序员技术人员的崛起。
这些新技术工人是那些具有计算机科学基础知识的人,但这只是因为它与编程以及编程方面的实际培训直接相关。
真正的计算机科学与软件工程:生机勃勃
计算机科学家和真正的软件工程师并没有被“程序员”、“开发人员”和“黑客”所取代,我们只是重新规划职业和职位,进入一个成熟的行业。正是由于计算机科学家、工程师和数学家的努力,编程技术人员(即现代的“开发人员”或“编码人员”)才在如今得以出现。由于计算机科学的进步,软件的构建现在已经模块化,并且大部分是预先打包和指定的,这迎来了广泛的软件库、软件包管理器、依赖关系管理器、集成开发环境、软件即服务、基础设施即服务、分布式代码库,当然还有因特网的出现;所有这些开始于计算机科学研究实验室的博士和工程师。此外,像Python这样的编程语言已经把细节抽象到了某种程度,几乎任何人都可以只用基本的计算机科学知识来做到这一点。
计算机科学家仍在努力建立新理论和新技术。受过正规教育的拥有计算机科学学位的软件工程师仍在将这些理论付诸实践。然而,随着这些新技术逐渐渗透到一线,软件开发中的大部分日常工作都是由程序员技术人员来完成的。
接受正规教育、获得计算机科学的高级学位的计算机科学家、数学家和软件工程师现在仍然在这里,对他们的需求比以往任何时候都高,只是在这个领域中占总人数的比例有点难以确定。正式的工程师和科学家在这个行业中占了100%,现在他们所占的比例越来越小,不是因为他们被替换了,而是因为那些受过正规训练的计算机科学家和软件工程师创造了一个新的高需求工作:程序技术员。
真正的软件工程师和计算机科学家不仅没有衰落,并且还依然坚守,做得比以往任何时候都好。我们应该张开双臂欢迎新同事,因为我们要面对现实,他们现在正在战壕里做大部分工作。
现在是做选择的时候了
由于技术的爆炸性增长,以及那些早期软件工程先驱的辛勤工作,让整整一代人都可以在过去几乎无法进入的领域拥有有利可图的职业生涯。正如20世纪30-40年代的汽车和制造业革命导致中产阶级的产生和生活水平的空前提高一样,2000年的IT革命也在做同样的事情。我们见证了计算机科学的民主化,这是件好事。
现在选择权在于你。几乎每个人都可以成为持续技术革命的一部分,并在技术领域获得高薪的职业。现在的选择不是你是否能进入科技行业,而是你想进入哪个行业,达到什么水平,如何进入这个行业。计算机科学博士仍然每天都在研究和提出新的理论。那些拥有数学和计算机科学高级学位的人仍在测试这些理论,并将其应用到实际技术中。受过正规培训和教育的具有计算机科学学位的软件工程师是该领域的软件架构师和领导者。编程技术人员(即现代的程序员、开发人员和程序员)站在第一线,将部件放置到位,组装和维护系统,而分析师和管理员则为其提供支持。
与早期只有受过最严格训练和高等教育的人才会想着进入计算机领域不同,现在你可以选择你的教育水平,通过提高你的教育水平来随意选择或改变你的位置。然而,要清楚的是,如果你想谋生,你仍需掌握计算机科学的一些基础知识,需要有丰富的技能和生活经验。这并不容易。只是现在你可以选择从哪里开始,走多远。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、精品Python学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、Python练习题
检查学习结果。
七、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。