为什么感觉在计算机学院和同学差距这么大?(面对陌生事物时应该思考事物的科学性,而不是害怕焦虑而停止不前)

他们只是比你早接触了一些概念一些技术,比你花费多了一些时间。

我想针对你提问里面的一个问题说一下,现在你有时间水群和上知乎来提问,问出“我大概需要多久能从现在这样学习一些数据结构的阶段到真正能够应用,能够去完成一些案例呢?”这个问题的回答,你现在就可以去,没有人说一定要先学完一个数据结构才能去接触具体的项目,就像写作文不需要你先学会字典里所有的字所有的修辞所有的写作技巧。

我不认为编程语言和数据结构能凭纯粹的书本教材等学到脑子里,就像数学或者物理里一个领域里特定的符号,你不是先把符号表背熟了再去看各种证明和解题的,你是不断地去解题,一步一步强化你对这些符号的映像。

具体到数据结构,如果你不知道你学的一个技术(比如一个二叉树,一个B树,一个红黑树,一个哈希表 whatever)他有什么用(你所说的“案例”),他是为了解决什么问题,具体到你感兴趣的 Web 后端,哪里需要用得上他,你不知道,也不去了解,而纯粹地学习他的算法怎么描述,他的底层原理是什么。我想问,你这样学的意义是什么?这样你学完教科书里的数据结构,我问一个快速筛选查询的问题,你能不能想到布隆过滤器?要给你的后端写一个 LRU 缓存,你能不能想到怎么把 map 和链表结合到一起?企业不会没有需求凭空为了应用技术而去创造一款产品,你不会因为手里有一把锤子而去自己卧室墙上铺满定制。

再到 Go ,你知道各种 map、slice,协程,panic recover,反射,你知道他们能用在哪里,解决什么问题吗?我见过很多对协程、GPM 模型、异常处理、反射等原理的东西能说个头头是道的,让写个程序带错误处理不知道怎么写,哪里 err,哪里 panic;写个多线程排序数据分割和聚合分不清楚,连 channel 怎么用都不知道。写个 while 循环纠结特殊处理怎么写……, 复杂逻辑多层循环不知道怎么跳出怎么封装函数,太多太多。我更希望你能够学了链表学了map,就在自己的后端项目里加个LRU缓存,学了优先队列红黑树,就尝试去加个多级时间轮定时器。学了协程 err panic recover 就去写个错误日志落盘模块。当然我都不推荐,我更推荐除了上课的时候跟老师学(或者上课时间你翘课跟b站学,一样)或者你正在学的东西需要用到之外,你放弃那些什么数据结构吧,反正除了考试你根本不会用上,面试也不需要你现实现这些ADT。关键是你用手里的工具能做什么,这一点我认为计算机更像物理而不是数学(请记得,计算机是工科),为了顾及功率你去算一下做功的时候用到了积分,这时候你并不需要在乎积分的背后是根据什么 epsilon-delta 表达出来的,怎么以取代直,每次求导你也不在乎 arctanx 是怎么就搞出个平方,关键是你在解决什么问题,你有什么工具,你恰好清楚这些工具有什么用,这就是编程,非常简单。反正你在用手机刷知乎的时候不会在乎硅片底下电子是怎么流动的,更加不会在乎微观上状态是怎么坍缩的。

还有你评价“我的感觉就像是别人比我多学了好几年”,我不知道你的感觉是怎么来的,你的感觉是什么?特别是好几年这个数,你是怎么判断他们懂这些的技术会耗费好几年去学习,原因是什么,分析过程是什么?还是说你听到 pandas,哇好高级,我不懂?劝你早日养成理性思考的习惯,而不是像一个街边任何一个没有 985 学历的人那样不假思索。要知道,很多 985 等名牌大学的学生,最大的特色就是他的学历,除了这个,真的没别的。我想这就是因为很多人在做题上能思考前因后果,能理性分析一步一步,而到了生活里,或者说到一个没有严格的应试教育环境的课题上,具体到这件事是水群,就丢失了一切科学理性的思考方法。拜托,你学的那些东西并不是只给你用在特定的应试上的。

过于神秘一个东西没有什么好处,你觉得他们聊的东西看不懂听不懂,并不代表他们比你厉害,懂的技术比你高级,不懂的就去学了解到底是什么水平,再来鉴定你是什么水平。

你说你看了他们水群你就迷茫了,我很好奇,你迷茫什么?这个时候你应该做的是,不了解的事物,先调查他是什么水平,他们聊的东西什么水平,而不是惊慌失措到来知乎提问,请问我这样算什么水平(他们是不是比我厉害太多?)。很多时候外行看内行会被吓到,而你作为一个内行的人,有这样的惊讶,我觉得过于不专业了。面对外行你可以凭借这些名词去炫酷招摇拐骗,我见过有朋友圈发心的,朋友圈发图书管理系统的,这当然可以,毕竟总有一天你需要凭借你的技术去找不懂技术的人要钱,这是很正常的事情。但是你作为一个内行,如果被这些东西吓到,那真的不应该。

如果你再这样下去,我很怀疑你后面能不能成功拿到大厂门票,因为我当初见过太多这样的同学,也面试过太多这样的学生了。他们可能一开始在技术上会有一些领先,比如你大一就能学 Go 和数据结构,有的甚至高中就因为好奇接触过编程。(他们甚至很享受这份领先周围同学的优越感,也埋下了地雷)

但是一旦有这种对不了解的陌生事物(尤其自己还是内行)出现,第一想法不是科学理性的看待而是焦虑害怕然后停滞不前。这种人在我看来是没有自我驱动力的,很快他们有的会曾经在狂刷 1+1 ,2+2 想着自己还不够格去做 2×2 9×9, oh come on,2×2 不过是 2 个 2 加起来,为了快去背一个查表法的乘法表,有什么难的,有什么不够格的?一旦你面对新事物第一想法是我是不是不够格,也没有去分析我到底够不够格,那你很有可能要一直输下去了。

回到黑体问题,我不觉得其他回答真正回答了这个问题。为什么感觉在计算机学院和同学差距这么大?我给的答案是,因为你们之间对计算机感兴趣的人的感兴趣程度以及对感兴趣的事物的持续学习有人的自我驱动力的大小不同,决定了你们之间差距悬殊。