[心得] 软件工程师的幸存者偏差(一) 关于读大学这件事。

楼主: brianhsu (坟墓)   2021-09-06 19:01:42
不知不觉进入纯软这个业界也已经十几年,所以对于在 Soft_Job 版上常常看
到的一些议题也有了自己的想法,想说趁这个机会整理一下自己的看法,和大
家分享一下。这篇主要会先分享一下我对于读大学的看法。
要先说的是,我觉得我自己就是某种程度上的幸存者,所以这边的经验也只是
我自己的经验,但也是我最真实的想法,以及一些我实际上遇到的经历。
先交代一下背景,我自己会进入这行,大概是从小学时候就有的想法,那个时
候家里有台电脑,每天回家都在玩那台电脑,所以那个时候开始就想着长大要
靠这行吃饭,不过当然只是很粗浅的一种概念,那个时候主要还是放学就在打
电动,并没有什么真的实际的作为。
到高中分组的时候,因为逃避自己对于数学没兴趣这件事,以及曾经有一度想
唸中文系或历史系,所以选了文组。但后来还是靠申请入学上了国立暨南国际
大学资管系,在板上我想应该是会被归在后段国立大学?反正非四大四中,而
且是文组的资管系,并且最后直升该校的资管硕班。
不过这样的我,最终现在还是混到了如大家说的,在 150 左右上下挣扎的
WEB 仔,不过是个生活与工作很平衡,觉得可以做自己喜欢的事情还有薪水可
以领很开心的 WEB 仔。
在板上经常会出现的一个议题就是要不要去补大学学历。我想这个大家都很清
楚,一种看法是这行确实你可以不用相关科系也可以来做,这绝对是可行的,
也一堆人靠这种方式转行;另一种看法则是相关科系毕业是进入这行的最快的
方式。
这两种说法我认为都是对的,这行的进入门槛真的很低,只要有心,真的是一
台电脑加上毅力你就有机会进入这行。但另一方面,你有文凭再加上不要太混,
入场劵基本就到手了。
而常常看到的另一个观点,是对于大学科目的质疑,认为大学教的东西都很过
时,出来业界还是要重新学习。
关于这点其实我反而有比较不同的看法,我认为大学教的科目他的价值,正在
于他的“过时”。我认为严格来说,他应该不叫“过时”,而叫做“基础知识
架构”。
举个实际的例子来讲,前后端的 Framework 这十年来都换了几轮了?但网络
的基础架构还是没有变,SQL 的主要核心概念还是没有变。从 Web Browser
上输入网址到显示内容,基本上还是一样的流程。
更别说再更基础的计算机架构、算法和 OS 里的多执行绪等等的概念了,这
些概念性的东西到现在,其实到现在都还是很实际的东西。反而是很多那个
时候我学的 Framework 或各个软件的版本,现在早都不知道被什么取代了。
但电脑程式还是电脑程式,在抽象上基本还是 Von Neumann 架构,底层还是针
对内存中资料的各种操作,各种程式设计典范 (Procedure / Object-oriented /
Functional) 的精神还是长那样。而这东西是我天天在用的,真的是天天在用,
因为这是我对自己写的每一行程式码的理解。而我自己的经验上,遇到过不少
不知道程式为什么会坏,为什么是那样的行为的,其实就是没搞懂程式执行的时
候,抽象上内存里的内容是什么东西而已。
至于这些东西有没有用,我想应该可以用实际的例子来说明。现在做前后端,基
本上算法都是函式库包好好,很少有机会自己写我想这应该是共识了。这十年
几年下来,我真的在工作上实作过,和算法勾得上边的东西,大概也就只有树
的 DFS 或 BFS 而已。
那就代表大学教得算法没有用吗?这么讲吧,我曾经在某个线上的 Java 专案
看过这样神奇的程式码,这个专案主要是一个批次的机制,然后会需要依照顺序,
处理档案系统上的某些资料夹,对应到某个 ID 并进行处理,注意他是有顺序性
的,而且同一批次中 ID 是会重复的。
结果呢,写这个专案的人用了一个 Java 里的 HashMap 来存要处理的 ID 和档案
系统的资料夹的对应……我看到的时候整个黑人问号。HashMap 最基本的特性不就
是一个 KEY 只会对应到一个 VALUE,而且是无序的吗?也就是说,根本就有档案
没有被处理到。我很难想像这是一个有认真上过非常基础的资料结构与算法的人
会写出的程式。
另一个我印象深刻的例子,就是我曾在以前某间公司遇过后端工程师部署程式上去
网页服务器后,发现从自己的机器无法连上网页时 (Connection Refused),却不知
道如何排查问题,重点是他是有 access 服务器的权限的。
但实际上,如果有一点点对于 OS 以及网页似服器的运作原理的理解,应该会很明
确的第一步就去查网页服务器的 process 有没有起来了。
说穿了,我觉得大学最主要的价值,就是在于“有人帮你整理好了整个知识体系,
并帮你安排进度”,而对我而言,从我工作上的经验,我真的认为大学的学习的科
目帮助我很多。特别是工作上要学习完全没接触过的新的东西的时候,因为有这些
基础,所以可以很容易抓到重点,可以透过基础的知识来借境并且理解。
另一个我觉得大学很有用的地方,是他可以让你探索对于不同的领域的兴趣。
因为我自己 Linux Kernel / Andorid BSP / Android APP / Library Design / Web
前后端 / Desktop Application 都碰过一点,所以感觉满深刻的。就是虽然都是纯
软,但每个领域的成就感、有趣的地方、烦人的地方都不太一样,而大学可以让你在
几乎没有额外的成本之下探索自己有兴趣的领域,我觉得这是很棒的一点。
最后我列一下我认为不论是走哪个领域,不管是资工还是资管,在大学都一定要学
好,而且工作上我觉得非常实用(以及面试时也常常考)的几个科目:
1. 程式设计 / 计算机组织与架构
这两个通常会是两门不同的课,但其实是一体的,这两门课是在帮你建立完整的
对于你写的程式的心智模型。
2. 资料结构与算法
不是叫你一定要像刷题达人一样可以看到题目就实作出解法,但对于各种资料结
构和算法的基本特性还是要有个概念。就算人家函式库都帮你包得好好的,你
也总是要知道在什么场合下适合用什么样的资料结构或算法对吧?
3. 关联式数据库概论
这个不用说了吧……即便是现在一堆 Non-SQL DB,但很多时候他们也都是以和
SQL 做比较的,以及在 CAP 定理中他们想要解决哪几个问题以及放弃哪个之类
的。
4. 网络通讯概论
我认为对于各个常用的 Protocl 多少要有些了解,特别是现在几乎各个领域都
离不开网络了,特别是做 WEB 的,HTTP 怎么一回事,和浏览器上输入网址后到
画面显示出来之间发生了什么事,总是要有基本的了解吧。
5. 作业系统
现在愈来愈多 Multi-thread 的程式了,各种经典的 race condition / deadlock
问题等等,这些东西都是真实世界会发生的。
当然不是说我这边没列出来的科目就不重要,而是在十几年做为软件工程师的职崖
中,我认为基本上是常常都会接触到,而且从来没有让我觉得“我在大学学到的知
识是过时并且无用”的东西。
当然这个领域一直在翻新,CPU 里的真实工作情境、指令集可能也早已和我通初学
的计算机组织与架构差异很大,但抽象概念性的东西我认为并没有真的差太多。
关于大学里学的科目,大概是这些想法。我是认为,如果已经确定要走软件这条路,
有机会就去唸大学,基础的科目好好掌握,然后尽可能接触多一点各式各样不同的
领域找找看自己的兴趣在哪。
至于研究所,老实说当年我并没有很强继续往上唸的想法,只是顺势就读上去了。
虽然课上得很开心(我喜欢上课),但论文写得很痛苦。
基本上研究所我是混毕业的,对我来说研究所的价值真的就是那纸文凭而已,虽然
除了我后来有在中研院一段时间是靠那张文凭核薪外,我也不知道那张纸他还有什
么其他的价值。
下一篇,应该会讲一下我真的进到这行后,一路以来对于生活与工作的平衡的一些
心路历程。
作者: yuigahamayui (由比ヶ浜 结衣)   2021-09-06 19:03:00
好文先推
作者: ntpuisbest (阿龙)   2021-09-06 19:17:00
作者: gasbomb (虚空雷神兽)   2021-09-06 19:17:00
作者: owoer (漂流血球)   2021-09-06 19:18:00
暨南老师其实蛮用心的,给推
作者: joshnash (JoshNash)   2021-09-06 19:26:00
写web当码农真的未必需要念大学 研究所更不用说了
作者: alihue (wanda wanda)   2021-09-06 19:36:00
作者: jonyig (是喔喔)   2021-09-06 19:59:00
作者: oopFoo (3d)   2021-09-06 20:01:00
推。学校也是建立人脉的好地方,好同学可以帮你打开视野
作者: jackflu (jackflu)   2021-09-06 20:01:00
推个
作者: akira01 (小吉)   2021-09-06 20:21:00
推 虽然是一些读了就忘记的知识
作者: ttsung2 (宗宗)   2021-09-06 21:30:00
作者: nmns0110 (奶油塔)   2021-09-06 21:47:00
作者: mvpkgmax (mvp)   2021-09-06 22:00:00
作者: zzshcool (台湾人)   2021-09-06 22:19:00
推,好文
作者: inte629l   2021-09-06 22:34:00
作者: kkroy (☆㊣↖煞气ㄟ阿喂↘ξ★)   2021-09-06 22:52:00
作者: chuegou (chuegou)   2021-09-06 23:03:00
不同看法 程式设计的搭配我会拿计概搭计组拿去配系统程式
作者: tennyleaz (tenny)   2021-09-06 23:12:00
作者: kyrie77 (NTU KI)   2021-09-06 23:15:00
作者: viper9709 (阿达)   2021-09-06 23:16:00
推~这也太用心
作者: yehzu (小叶~)   2021-09-06 23:34:00
强者我同事推推XD 觉得读大学让各领域专家来导读各领域,有遇到好的老师真的是很赚的事
作者: mike8469 (mike8469)   2021-09-06 23:46:00
推推
作者: MoonCode (MoonCode)   2021-09-07 00:00:00
网络上资料念一念就知道了 懂怎么google比较实在做web真的不需要学历吧 需要基本的英文能力跟找资料能力 就是一堆工具让你搭起来而已
作者: newhandfun (新手方)   2021-09-07 00:39:00
我比较好奇的是真的会碰到要这些大学基础知识”才能”解决的问题吗?还是其实duck不必?本鲁也有上过算法跟资料结构,但越工作越觉得问题根本不在这些东西上要说时空间复杂度,前人的程式码也是一堆N+1,要说了解数据库,系统一堆反正规化也是活得好好地我才刚下订计算机网络,但还是很迷茫更别说一堆工具的抽象化,像本鲁写的php刚好让开发者不用面对多执行绪的问题......叹,越说越不知道补基础知识到底有没有用
作者: sumsum (simon)   2021-09-07 00:59:00
推分享!
作者: MonkeyCL (猴总召)   2021-09-07 01:41:00
有机会就好好读,半路出家的还是先努力拿到offer要紧
作者: fly19920820 (小欧官)   2021-09-07 01:54:00
分享心得给推
作者: sooge (老衲)   2021-09-07 02:17:00
大学不是资工系的怎么办= =
作者: j355203 (水面上的小草)   2021-09-07 03:20:00
先推了
作者: qrtt1 (有些事,有时候。。。)   2021-09-07 07:27:00
有看有推
作者: BlacksPig (Black Handsome s Pig)   2021-09-07 08:17:00
同newhandfun大大
作者: matyih (mat)   2021-09-07 08:23:00
出国转软的几乎都电机自学..
作者: qrtt1 (有些事,有时候。。。)   2021-09-07 09:04:00
补基础有没有用的问题,在于是否能将知识融入思维而影响选择像我很喜欢看 fcamel 的文: https://bit.ly/2X0BTc3常会让我有一种,某些时候我该模仿他的思维去看待技术以便做出更好的选择。
作者: ClownT (Clown)   2021-09-07 09:46:00
推用心好奇你从业多久了
作者: Kagami3421 (卡加米)   2021-09-07 10:05:00
作者: aaa1234136 (淡水活鱼)   2021-09-07 10:07:00
好奇大大打算写几篇文章XD 很期待下篇
作者: WulinWorks (武林)   2021-09-07 11:19:00
作者: asdkmm5050 (Mr xx)   2021-09-07 11:57:00
谢谢分享
作者: polola6212 (Polo)   2021-09-07 12:08:00
说实在话,在台湾不补基础知识,后果也只是留一堆拉G给后来的人
作者: htury (冰点)   2021-09-07 13:39:00
推,不过其实就是老板无法分辨会动就好跟效率高的差异,导致软工要高薪只能去美中
作者: chyl13579 (阿帅)   2021-09-07 13:52:00
推推
作者: joshnash (JoshNash)   2021-09-07 14:28:00
没有本科大学学历缺点还是比较不好拿面试拉
作者: zenithyoung   2021-09-07 15:01:00
作者: pb2201416   2021-09-07 15:55:00
大推
作者: PerspectiveS (人类行为观察学家)   2021-09-07 16:23:00
作者: viper9709 (阿达)   2021-09-07 18:37:00
推码农跟工程师的差别
作者: brandonron (假嗨)   2021-09-07 20:02:00
跟某楼一样想法,大学认识人跟发掘想触碰的,而硕士磨练自己处事能力跟想法
作者: loadingN (sarsaparilla)   2021-09-07 20:12:00
毕竟是理论和实务并重的工作 有些东西你不懂就很难突破
作者: chen1025 (小陈)   2021-09-07 20:13:00
作者: whatabiggun (奶奶早安)   2021-09-07 21:41:00
作者: shieldsky (Gray wolf)   2021-09-07 21:54:00
推码农跟工程师的差别,继续努力朝工程师迈进 :)
作者: ejnfu ((-. .-)b)   2021-09-08 03:29:00
大部分同意,不过码农与工程师的差别不同意,你举的例子一般码农就要会了,面试都会问的。我觉得主要差异在于background knowledge以及design的能力。
作者: godsparticle (阿粒)   2021-09-08 07:26:00
看来所谓的码农=低薪 XD
作者: shiauji (消極)   2021-09-08 09:59:00
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2021-09-08 10:10:00
或与有些基础知识大家都觉得一般码农应该都要会的,但现实是很多转职甚至本科系CS在解决问题时 完全不知道背后原理HTTP机制 甚至OS防火墙规则都不知道 无法独立解决问题
作者: alihue (wanda wanda)   2021-09-08 11:42:00
不是工作上用不到,是知识不足埋雷而不自知你想一下密医也能活得好好的治疗大部分感冒头痛拉肚子,但就是会误判导致延误就医被爆出来
作者: kevin1ptt (蚁姨椅yee)   2021-09-08 14:55:00
好文推推!
作者: Hsins (翔)   2021-09-08 15:08:00
就是很多人学的不扎实而已,基础知识深深影响系统设计能力。光是查询跟排序这两件事,很多人就都写不好,以为是硬件规格问题。
作者: alan5 (小安)   2021-09-09 15:56:00
hashmap那个特别有感 遇过坚持hashmap就是比较快的
作者: kaiac (kaiac)   2021-09-10 00:58:00
推 工作后对所谓的基础知识认知和你讲得差不多 不过也同时感觉基础知识似乎用不太到 也许是能力所能到的工作环境就到这种水平吧...
作者: lou01 (lou01)   2021-09-10 11:02:00
推 期待下一篇
作者: johnny719top (AngelGod)   2021-09-11 13:10:00
推推
作者: bbkhdh (bbk.hdh)   2021-09-13 11:01:00
推 暨大大学长
作者: swich45314 (swich)   2021-09-13 17:23:00
我是念资工的 在IT业 我必须说理解大学课程的内容 会让你比同行高一个等级 再找问题等方面都比资管的同事强 当然不会说你就不能做相关工作了只是能力会差一些

Links booklink

Contact Us: admin [ a t ] ucptt.com