计算机科班出身的优势?
我是纯科班出生,项目组有几个改行来的。我的感受有以下几点:1.非科班往往是“实用”导向来安排学习路线。比如先学一门语言,学写一些小项目,然后再去刷刷算法面试题。那些很不实用,但是用来构筑计算机科学体系的课就没怎么学,也没怎么有时间来练习。一方面是数学吧,举个例子,非科班出身很少有人去专门学离散数学。另外一方面是计算机原理,操作系统,体系结构,编译原理这些课,很多非科班出身的没碰过。就算碰,很多也是浅尝则止。没多少非科班的花时间写过内存管理,编译器,去搞懂指令集流水线吧。2.写业务逻辑层面的代码,科班和非科班出身的工作效率差别不大。但是要系统层面优化,找疑难BUG,差距还是能体现的。所以项目技术负责人往往还是科班出生的。最近一个例子,数据库出现了read-after-write的问题。非科班出身的那个小朋友直接两眼一抹黑了,因为在他看来数据库就是个黑盒子,他会用数据库,但是里面原理就没概念了。3.如果知道要学啥,科班非科班都能学会。但是非科班往往需要科班的提示,才知道往哪个方向走。举个没那么恰当的例子,要做个系统去除广告垃圾流量,我一看可以知道可以尝试傅立叶变换把时域转化为频域来解决问题。虽然我这些变换丢老师也很多年了(大三选修课),但是我知道再把书捡回来看看这个就可以搞定。我让组里面非科班出身的去学这个,他们很快也搞定了。但是,我想,最开始定方向时,他们完全没概念应该看啥方向的书来解决这个问题吧。4.以上差距都是可以用时间和经验来弥补的。我见过最厉害的一个程序员,是化学本科硕士博士,但是转行多年,经验丰富,非常牛。我想,前面提到的数据库问题,虽然非科班的第一次不会,第二次可能就懂了。至于傅立叶,要不是我刚好选修了,我可能也不知道。而且,不知道一个问题怎么解决是很正常的,集思广益,总能找好办法的。
1.知道哪些问题是不可判定的(undecidable),遇到了不要浪费时间去试图解决它。如果遇到跟停机问题等价的问题,可以跟老板argue说missionimpossible,如果老板不买账,呃,自求多福吧。2.知道哪些问题是困难的(例如NP-hard类),遇到了不要试图寻找多项式时间算法,除非你打算把图灵奖和菲尔兹奖一并笑纳了。3.知道哪些问题是已经解决的,不要试图去重新发明个方的轮子。要知道天高地厚,ECDHE-RSA这个密钥交换算法有5个图灵奖得主的名字在里边,不是那么容易被你踩在脚下的。4.知道常见术语的含义,portable通常是可移植的,而不是便携的,PDF不是便携式文档格式,classlibrary不是班级图书馆,数据库field是字段不是场。5.知道术语本来的意思,object除了是对象,还可以是“宾语”,verb+object是动词+宾语,不是动词+对象。
科班出身肯定是有优势的,主要在于基本理论知识。基本理论这个东西,对于入门和平均水平程序员来说,可能并不见得有多大用处。但是如果迈向高端、深入,那么这些基本功就显得很重要了。(要是没有用,那本科四年时间岂不白费了)
计算机行业什么时候出现科班出身了,又不是曲艺圈,我们程序猿是凭本事吃饭的,平地抠饼对面拿贼,讲究的就是口条利索,什么报菜名啊,地理图啊,都是基本功……哦,我的意思是,动态规划和递归编程,都是基本功啊,不会不行的。现在有些年轻人啊,以为知道个背包问题,会个FibonacciNumber,就是算法设计师了,会个圣杯布局,懂一点bootstrap,就是前端工程师了,那如果会点Nodejs,会上线个小网站,那可要了亲命了,全栈。你说,这相声哦不,这程序猿能好得了吗?好的程序猿,得从小跟着师傅,七八岁儿长起来,诶~师傅说一就是一,说二就是二。"来,说说,硬币问题是个怎么回事啊~""这是动态规划的经典问题……还有几种延伸……是这么回事师傅……""嗯,说得好,小羊崽子最近很刻苦嘛,内个你,肥头大耳内孙子,一个byte有几个bit啊?""不知道师傅……""今儿晚饭没你份了,继续搬凳子吧~"所以说,所谓的科班根本就没这回事,学校里根本就不教你语言,照这种说法,前端工程师就全都是野路子,因为学校里就没教你前端的,别跟我提培训学校,其他人不知道,反正我觉得那不算数。说了这些话,我的意思是,码农界,都是凭code说话,管你什么学校,写出好code就是角儿……我是说,就是teamleader。
科班出身的优势其实主要是这么几点。1.你知道天高地厚。不要觉得撸撸算法,会写几句helloworld就是什么高手了,真的高手根本就不跟你玩这些东西,我们基础课最后的作业就是用C实现LOGO,语言其实就是一种思想的实现方式。我从不说我精通什么,在老师面前,他用一天的时间了解思想,写出来的code会比外面的人精炼和优雅得多。2.你知道前路方向是什么。也许刚开始初级的时候,这些优势不会显现,但当你到了一定程度,你就会发现,清楚方向是多么重要的事情。对于技术栈的选择,为什么会选择这样的前端框架,为什么后端的配置是这样的,缓存如何处理,流量平衡,数据储存,等等问题,你都会一点点的考虑。如果你对于这些问题的本质有所了解,你会更容易的找到方向。3.自信。这点其实很重要,即使是所谓的蜜汁自信,对于处理一些问题的时候,真的会有帮助。我就一直相信,无论我跌得多惨,我总会爬起来,无论这个bug多复杂,我都可以解决。想当年,我们在61C直接就模拟了一个芯片,就是"我的世界"那个游戏里那种,我们每一个学生都造了一个,从与门,或门,与非门开始,从头开始学汇编,模拟芯片,最后考试就是用自己模拟的芯片做计算器。其实所谓科班二字,有点不妥,因为科班是中国的说法,其实就是从专门学校出来的而已。但如果非要较真儿,科班出来的,有个师承。对我来说,就是内心敬畏,不要给我的学校丢人,仅此而已,但其实这只能是自己对自己,其他人并不在意。所以,简单说,是科班出来的人,在后劲上可能,我是说可能,会比半路出家的人要大一点。但太多半路出家的高手了,其实,人家本来就是高手,只是恰巧选了计算机而已。
回答请先登录