计算机专业本科到底该学什么?
The following article is from 程序员cxuan Author cxuan
第一时间收到文章更新
本文转载自微信公众号:程序员cxuan(ID:cxuangoodjob)
逛了两天知乎发现给我推送的都是些什么东西,我就想看看关于计算机相关的问题和回答,给我推荐的都是"能看看你手机里封神的照片吗?","植发大概需要多少钱?","30 岁还没对象丢人吗?"这还是我保守的选了几个。
还是这个问题和回答稍微靠谱点,"计算机本科阶段应该学哪些东西?"
我打算写一个稍微普世一点/适合大多数毕业生的回答,精英同学可以把这篇文章关了。
我最近接触到一些高校教师和同学,也跟他们聊过本科所学的东西,然后结合我自己的亲身经历,聊聊我的看法:
大多数高校所教的东西其实都跑偏了,所教授的内容并不适合社会所需,但是学生却为了所谓的成绩和绩点在不需要的学科上投入了大量的时间,严重的甚至影响毕业。有些科班上所学的几大基础课,侧重点不是讲如何实现之类的工程论概念,而是划重点 --- 什么 tcp 报文头有哪些,Java 11 有哪些新特性,C++ 17 引入了什么东西,这种只要动动手指上网就能查到的东西,而且检索出来结果的准确性比你记这些东西要高多了。
而且大学里面教的一些内容稂莠不齐,很多其实都是上班拿钱混日子,他们的主要目的并不是为了教书育人。我最近还了解到有个学校导员教了十几年 Java 之后,学生问他一个 Java 中 transient 关键字的用法她都不知道。如果碰到这类的老师,我想说同学们,还是靠自己吧。
所以最近互联网上一直充斥着一道辩论:大学到底应不应该扩招。
很多人说大学阶段应该掌握一些抽象的、概念化的、核心的东西,比如操作系统原理,Linux 内核的调度策略等,我并不否认这些东西很重要,对培养一个程序员的底层功力大有裨益,但是对于普通大学生来说,学这些东西对你现阶段的帮助太小了。而且如果你不是计算机专业科班专业的同学,在课余时间要修炼这些"内功",难度很大,因为这些是需要投入大量时间静下心来学好的东西。
一个可以预料到的事实是,你花了大量的时间在操作系统、计算机网络、算法上面,同时你的同寝室友花了大量时间在研究 Java、多线程、SpringBoot、Cloud 之类的框架上,那么他会比你成长更快,更容易产生对编程的兴趣,更容易进入编程行业,因为这些框架能够更容易让你做出来实质性的东西,获得正向反馈,而且你的室友还有时间参加各种竞赛、获得名次,结交各路朋友,结识各类资源,等秋招的时候他的简历会比你丰富很多很多,找工作会有更多机会,甚至没准人家已经直接保研了。
千万不要觉得学计算机基础这些知识会让你有优越感,让你觉得能够更接近世界的本源,让你能够像计算机一样思考问题,让你像一片硅片一样参与计算工作,这是一种错误的观念。大多数开发的日常工作都是流水线式的 CRUD,不排除大多数互联网大厂也是这样。所以能干活是一件至关重要的事情,企业把你招进来,只是想给你最低的薪资并榨取你的剩余价值,残酷但很真实。
再退一步来讲,如果你没接触过数据库,你要怎么理解数据库事务机制呢?如果你没写过 Java 和 C ,你要怎么理解面向对象和面向过程呢?说到底,还是你要学了个大概才能渐渐明白这些东西。互联网上那些关于核心、本质概念的一类思想,无非是你的前辈们花了很长时间、写了很多代码之后悟出来的,总结出来的经验,如果你没有经历这样的学习路径,你很难真正领悟。学习没有捷径,这也是人与人之间差距越来越大的原因,一个有学习习惯的人和一个没有的人他们的脾性有很大的差别。热衷于学习的更喜欢思考,就像点亮技能一样把知识树填满,而不喜欢学习的人总想着一步登天。
所以,如果你不是喜欢钻牛角尖,或者有严重的精神洁癖,一定要把一项技能的前置铺垫全部弄清楚的话,实用主义一点拿来即用其实没什么问题,开源的出现也是为了让我们更快的提高生产效率,而不是倡导每个人都自己造个轮子用自己的。不排除自己造个轮子能对个人技能和内功修炼有极其重要的作用,但要衡量现阶段对你适不适合。如果你是个急需上岸找工作的大学生,你业余时间研究这些底层内功真没什么用(还是那句话,我说的是普通的大部分人),因为企业要求你能创造价值,而你研究这些底层技术无法创造短期价值。如果你保研上岸或者做技术研究,研究这些底层是可以的。知识没有对错,只有适不适合,工具也是如此。
其实写下来这些话蛮悲观的,但是我们不得不应对大环境的冲击,效率为先,能创造价值的人会获得更多的嘉奖,这种功利性的拿来即用主义无疑是丑恶的,但是却能创造价值。
抽象是美的,工程化也是美的,当你啃了很多大头书之后,你会发现这些抽象的理论概念虽不能马上创造经济价值,但却是逻辑清晰的,也是很干净的,然后你就会明白为什么很多人会写出来这么多屎山代码,你突然有一种想要重构他的冲动,然而你看了一下上个季度的绩效是 C ,你说算了吧,活着要紧。
所以回到主题上来说,本科阶段到底应该学什么?其实你想学什么就能学什么,这要看你的计划和预期是否一致,如果你想要找工作上岸,就要学企业需要你掌握的技能,提高简历的丰富程度,不断精进,精进 cv 技术,精进轮子技术,精进拿来即用主义,精进和面试官扯皮的技术。如果你觉得抽象很美,你可以考研,做研究,找到某一个研究方向不断深入下去。知识没有对错,只有适不适合你,工具也是一样。
Anyway,很遗憾这篇文章没有像平常一样写太多关于书籍推荐、技术总结之类的硬核内容,但我也希望这篇文章能给部分同学提供一下思想指导,好让同学们不再那么迷茫。
最后用一个我觉得比较有意义一段话来作为结束语吧。