原文恕删
其实这个问题还满有趣的,最近的确是一堆文组首选都是学写Code
我想最大的根源还是Programmer的需求缺口太大 + 程式入门的门槛降低
/*
这篇有点长,有点讲古的感觉,最后会提一下学程式的两三事,不想看讲古的推荐跳最
后一Part看就好。很多是个人的经验和感受,如有不对的地方也欢迎各位前辈多多指教。
*/
// 正文开始
首先来说说Programmer的需求,主要还是随着时代的演进,几乎近代的产业大变革都与
程式相关,像是工业4.0 / IoT / AI / ML / 大数据等等... 这几项带动了科技业的大幅
发展,自然也需要大量的Programmer来进行开发,但问题Programmer的产出科系CS其实是
近10多年才热门起来的,这也导致供给严重不足,在美国最缺人力的时期,甚至是只要有
一点名气的学校,CS还没毕业的就一堆公司在抢。但人力还是不够,怎么办呢? 既然国内
填不满,那就抢国外的吧~ 于是美国就开始狂抢海外的软工菁英,后来中国发展起来了,
自己也是狂抢人。
到后来外商又觉得把人抓到自己国内太麻烦又量少又贵,反正软件开发的特性就是不用实
体,干脆把研发也设在台湾方便招人,此外对于很多新创来说,台湾的工程师更是配合度
高又便宜好用,于是这几年可以看到外商/新创疯狂在台湾设点与扩编,但台湾自己产业
一样在经历变革的浪潮(只是比较晚),自己也有很大的人力缺口,大家也知道依照台湾企
业的尿性,薪水上要尬赢外商很难,就算开出差不多的薪水,也因为传统的加班凹人得过
且过的文化导致很难抢赢外商,这就导致人才外流严重,但缺口还是要想办法补,怎么办
? 于是就只能降低标准来招募,对于一些中小企业来说甚至只能找一些非本科但好歹有点
经验的慢慢去养成,这就是大家目前看到的景象。
再来程式入门门槛的降低是怎么回事呢?
其实一开始程式语言的入门并没有那么简单,像是早期一开始学C或JAVA,可能变量型态
就可以让一堆初学者像是在看天书一样,光是一个字串切Token就可以搞爆一堆初学者,
更不用说后面的控制逻辑、指标、作业系统特性再到物件导向特性等等...
但程式语言毕竟是人虚拟出来的东西,背后并没有像是传统电子学电路学是需要遵守许多
定律或物理性质的,加上程式的人力需求大增后,为了让程式能开发得更为迅速+扩增企
业影响力,越来越多的公司投入开发Open Source的Libary、Module,同时也鼓动开发人
员加入Open Source的行列,后来就演变成Framework的形式,让程式开发人员省去大量从
基础做起的时间,同时也帮忙Handle好许多在以前需要很小心的地方(例如Thread的排程
、内存的Locate或是Http CRUD的底层处理等等),快速就能产出对应的程式。
再加上新式程式语言的兴起,像是Python,简化了大量的复杂语法与Script式的语言特性
更是让程式入门变得更为容易,而这种类型的语言最被为诟病的效能问题也随着同等价位
的硬件效能快速提升后也慢慢变成没那么严重。
除此之外,程式码具有非常高的可携性与延伸性,伴随着程式人力的扩增,网络上的教学
资源丰富程度也随之急遽提升,学习程式变得看似十分简单。
简而言之,程式的门槛降低就真的是因为站在巨人的肩膀上,前人种树后人乘凉。
// 跳过上面讲古的,欢迎从这边开始看
Q. 所以学程式真的相对简单又好找工作吗?
我的答案是Yes,就像上面说的,程式入门已被前人简化许多,加上大量的人力缺口,
所以学程式后转职相较其他专业来说没那么难,待遇相较起来也不会太差。
Q. 那这样学程式转行后会有什么问题吗?
问题其实是中长期的职涯问题,虽然程式入门简单,但要写得好却是需要大量的知识与经
验累积,这部分其实比很多专业的提升还难不少,一个经验丰富的Programmer跟新入门的
Programmer差距是夸张的大,举例来说Programmer新人De一个bug要2周还不见得搞得定,
但强者可能一小时就解决... 而在程式开发与品质更是难以估计强者与新人的差距。
再来,程式的技术日新月异,改朝换代的速度快得吓人,你必须要一直不断地学习新的东
西,适应新的理论甚至是新的语言,这对很多人来说其实很累。
最后则是最麻烦的,程式并非你学了就能胜任任何跟程式有关的行业,更为接近现实的是
程式就只是一个工具,犹如画画时用的画笔,你可以用画笔画出任何画,但问题是如果你
想画出能卖的画,就不是只有拿画笔起来画那么简单,你需要有很多的知识、理论甚至是
灵感才有办法画出好看能卖的画,程式也是一样的道理,程式可以人人都会写,但要把
程式应用在各个领域上是需要很多知识观念与思考逻辑的结合才有办法做得出好的成品。
一旦你没办法在某个领域成长或是跟上技术的脚步,那就意味着未来职涯的成长空间将会
十分有限,可以预期的是也许未来有一天相关的人力需求会饱和,这时候会被淘汰的会是
谁呢?
Q. 常常听到写程式是需要天分的,是真的吗?
答案是Yes也是No
其实写程式的思考逻辑和学数学不太一样,在我看来学数学是讲究因果逻辑,也就是从A
导到B从而证明C,而程式的思考逻辑更偏向所谓的抽象化思考,像是资料输入A经过流程B
中的格式转换最终产出C资料结果,这整个过程能在脑袋中构思组合出来这类的抽象化思
考能力才是所谓的程式天分。
那么写程式到底需不需要天分呢? 一般来说程式入门时,天分只是反映在学习的速度快慢
,有天分的人总是学得超快,没天分的人就注定要花更多时间学习,但最终不论有无天分
都还是能学会写程式,时间长短而已。若是以学程式的角度来看,天分是加分但非必要,
所以答案是No,当然学习时的痛苦程度也会有差XD 很多人中途放弃就是学太久太累太烦。
但若是以要把程式写得更好,更漂亮,迈向我们口中的强者之路,那天分就非常重要,具
强悍的抽象化思考能力注定天花板会更高,没有天分的人在学到某个程度后想要再有大幅
度的进步会十分的困难,所以以这角度来看答案是Yes,这同时也会反映在专业职涯发展
上,当然职涯发展的因素很多,只是若是以专业为主要发展基础,那么有没有天分影响程
度就会很大。
// 学习杂谈
最后谈谈常常有人在讨论学习是否倚靠CSDN会快很多,我认为毕竟CSDN大多是中文,对于
阅读和学习来说会简单很多,但CSDN有很大的问题是太过速成,里面很多就单纯是快速
翻译原文的片段,或是东凑西凑的缝合怪,甚至是单纯搬运工抄别人的加上自己一点无关
紧要的注解,很多东西的原理连作者都一知半解而已。
所以如果是要追求快速做出东西,能动就好,多看点CSDN应该可以满快就弄出来的,但如
果真的认真想要学习真正的原理和完整的技术我还是建议英文学好一点,多看一下
Stack Overflow 之类的问答网站和官方的API说明文件与论坛会比较有用。
// 大概是这样,希望以上能给对于想入门程式或是刚入门程式的人有一点帮助。