随着互联网行业的蓬勃发展,市场对于程序员的需求激增,这个职业也不再囿于计算机科学或软件工程等个别专业的毕业生,非计算机专业出身的程序员为数不少,他们的主业曾是物理、数学、自动化,甚至英语、艺术或历史,但都出于对编程这一事业的青睐,投身成为凯发游戏入口官网。
什么是非科班出身的程序员
顾名思义,并未出身于计算机相关专业的程序员,在行业中普遍被认为是非科班选手。
在编程领域里,除非天资超群,否则童子功越早打下越好。接触编程时间过晚,不仅是编程技术上处于劣势,也意味着在思维方式、解题经验方面的落后。这也是为何科班出身的程序员在面对非科班选手时,往往具备压倒性优势的原因。
他们面临的困难
作为一门技术工种,半路出家当程序员谈何容易。对于一个希望转型成为程序员的求职者,留给他学习技能的时间窗口通常极为紧凑,而知识积累的欠缺导致他们往往在一开始只能以速成的方式谋求技术熟练,这往往加固了外界对他们技术不扎实、「流于表面」的印象。
尤其对于一些专业跨度巨大的程序员,他们的转型壁垒更是常人难以想象。有的人在转型前对于编程的理解近于白纸,即便是在内行人看来通过自学足以达成的技术工具,在这些转型者面前仍如无法逾越的大山。他们只好通过培训机构实现从 0 到 1 的技术入门。
但培训机构,在程序员一行中始终毁誉参半,100 offer 的一位受访者曾经公开声称,自己拒绝接受任何曾在编程培训机构报班的程序员求职者。
即便如此,仍有许多这样的案例发生在各个公司之中,这些技术转型者怀着对事业的目标,克服了一个个技术学习和思维方法上的障碍,抵御住了周遭那些质疑自己选择的声音,面对工作中或明或暗的不信任,埋头于编程语言和企业业务,最终以不错的职业发展回击了外界给予他们的刻板印象。
非科班程序员如何弥补技术优势
本周我们搜集并采访了一系列拥有转型经验的候选人,他们均非编程科班出身,如今都成为了不错的程序员,成为各自企业的技术骨干。他们将分享自己是如何从半路出家者走到今天的经验。
小羽:数学系出身的理科女,阅读源码
2014 年的时候,小羽还压根没想过自己未来会和代码发生化学反应。她那时刚刚从中国最好的大学毕业,专业是数学系。几个月后,一心想着未来出国深造的她进入了一家互联网金融公司,职位是产品经理。
「当时也不知道自己适合做什么,想着这份工作经历就算 gap year 吧,就被派去负责产品了。」数学系出身的小羽此前并未接触过任何产品相关的知识,一切都只能靠她现学。九个月后,一个机会降临到小羽面前,某金融类央企的认证部门需要一名产品经理,小羽投递的简历被对方人事部门看中,很顺利便录用了她。
在与新领导的沟通中,对方得知小羽原本的专业是数学系,「要不你来试试写代码?」面对建议,小羽稍一考虑就答应了下来。
早在大学一年级时,小羽就在公共课程上学习到了关于 c 的基础知识。但那时她对编程还没有特别的兴趣,答应从产品经理转型技术岗,更重要的原因来自小羽本身觉得写代码这事更符合她理工科的偏好。
「一开始,人家是给我一个别的项目,让我照着写照着抄。」比起产品经理,程序员的身份对技术要求更高,留给小羽的速成期不算太长,而她成长的方式也比较直接粗暴,那就是看源码。
「不停地看,有不懂的地方就去搜,去查,一点点拼凑出来。」好在接受过多年的数学训练,小羽对于强调逻辑的代码工作逐渐得心应手。一个月后,小羽上手了 java。
2016,小羽开始接触 python、pascal 以及 c ,对于编程语言和数据库的尝试也越来越多。spring、mysql、redis 等框架或数据库逐渐开始被纳入知识体系,由于工作内容涉及前端开发,小羽又学习了 angular、react 等框架。甚至对于数据挖掘、svm、神经网络,她也有了一定涉猎。
回忆自己从入门到上手的经验,小羽认为最有意义的工作就是阅读源码。「我技术提升最快的那段时间,就在阅读大量源码,包括 jdk 的源码。那个阶段后,我就感觉自己真的已经迈过了刚入门的状态了。」
「源码能够直观、系统地为学习者描绘这门编程语言是如何工作的。」如今,小羽在一家知名软件企业担任架构师,尽管进入职场仅仅三年,小羽早已完成了从编程新人到技术骨干的转型。
曹巍:出身工科的程序员,强化学习还得看书
曹巍是工科生,2009年本科专业时,他的身份是一名「材料成型机控制工程专业」的学生,这个名字对非工科生无疑相当拗口。
毕业后,曹巍来到了北京,已然成型的互联网气氛打动了曹巍。回头审视自己的专业技能,曹巍心想,用接下来的生命继续和数控机床打交道,太乏味了。
好在他还有其他的技能。大一时,曹巍的室友是一位迷恋计算机文化的工科男,在室友的带动下,曹巍自己也早早自学了 java。
「java 这个语言,它有个特色是面向对象,这在不接触编程的普通人那里,是很难去理解的概念。所以我花费在思维转换上的时间很多。为了在脑海里弄明白它究竟是个什么东西,刚开始花了一个多星期的时间。」
2010年1月,曹巍进入一家软件企业,担任元数据产品开发。从新人开始,曹巍一边工作一边积累自己的技术经验,3年后,曹巍进入某数码集团负责技术架构,从 java 到 spring mvc、mybatis/hibernate、dubbo 等服务端框架技术, 再到 html、jsp、servlet、javascript 等应用技术,曹巍逐一涉猎。
回顾自己从不相干的专业转型成为程序员的过程,艰辛是必不可少的感觉,但曹巍认为那总是存在的。好在自己是一个耐得住寂寞的人,当技艺打磨到足够优秀时,旁人的闲言闲语自然会终止。
对于从0学习一套编程语言,曹巍颇有心得:「我的理解,任何东西都是碎片化的,一个技术点可以发散到其他碎片点,最终就弄明白了整个的脉络。所以我的学习路径是从每个技术点开始,摸清楚技术脉络,最后需要深入了解技术原理,就去看书。」
尽管对于一个程序员而言,网上有大量现成的技术博客,每天都在分享精巧的代码思路,但在有关编程技术的深度和准确性上,曹巍认为书本依然重要。
「对我帮助最大的书是周志明的《深入理解java虚拟机:jvm高级特性与最佳实践》,每个学习 java 的人都应该看。学习缓存的时候,可以看看黄建宏的《redis设计与实现》。数据库方面,《高性能mysql》非常好.....」
在代码中摸爬滚打 8 年以后,曹巍如今在一家互联网企业担任技术总监,回想自己技术身份的转型,他觉得其实只要是足够耐心,以及主动学习,是否科班出身的话题终究会在周围的人嘴里消失。
马越:地理专业的技术达人,靠培训机构入门
马越是南京人,早在大学里,马越就以技术手段活络著称。他读得是南京本地一所知名高校,专业是地理信息系统。在一项地理信息整理工作时,他独立完成了地理信息系统网页搭建任务的最初版本。
「我从小就喜欢玩电脑,也爱看it名人的传记。」在九十年代,中国的商业传记中,最受欢迎的当属比尔·盖茨,马越对于 it 的概念大部分也来源于此。
尽管对 it 有兴趣,但马越一直没想过学习编程,他在地理信息专业的课程得心应手,将来的出路被寄托于研究所或者交通企业。但是,为学院搭建网页的那几个月真正改变了他,为了完成这个任务。马越开始潜心学习编程语言,他选择的第一款语言是 python。
「豆瓣最早就是阿北在咖啡店里用 python 写出来的。我玩豆瓣,我也用 python。」顺利结束了学院的任务后,马越突然意识到了自己在技术板块的潜力。
毕业后,马越应聘进入某大型交通企业,并在其中自告奋勇承担一部分 it 技术工作。在那同时,他决定为自己的编程技能充电。
为了真正入门,马越在公司附近报了一个软件编程速成班。在培训班里,马越接触到了 css 和 javascript,也系统性地了解了数据结构、算法与数据库。
「培训只能算入门工具,我当时作为非科班出身的人,这是适合我的途径。」马越明白,在编程行业,培训班出身一直处在鄙视链的下游,他能做的只有屏气积蓄实力。
在交通企业,马越的工作逐渐受到上层认可,工作也彻底调整为技术岗位。intellij idea,oracle,kafaka,cucumber,sonar,jekins,马越用到的技术工具越来越多,承担的工作责任也逐渐核心。
与小羽一样,他也意识到了阅读源码的好处。「比起现在很多线上培训用的视频教学,阅读源码要直接得多,进步也快得多。」
工作3年后,马越离开了国企,目前已入职一家互联网企业,担任 java 工程师。在用人单位的反馈中,马越的计算机基础、业务经验均是上乘,唯一的短板在于上一份工作在国有单位,因其技术站与互联网不同。但在马越眼里,这实在算不上难对付的问题。
后记
总的来说,非科班出身的程序员在市场上基数不算小,其中大多数的确面临编程水平有限、知识分布不平衡、技术经验存在短板等现实困难。而行业对于非科班出身者的偏见也几乎是普遍存在的。
那么对于一个希望转型成为程序员的非计算机科班出身人员,有哪些值得重视的经验呢?通过以上案例, 归纳如下:
快速建立知识体系 获取程序员式的思维方式
寻找合适的途径实现技术入门 比如报名参加一个口碑良好的短期培训课程
找一门语言入手,精通之后再学其他 c、c 、php、python、java 都是强大且普世的入门语言
大量阅读源码 根据多数受访者的经验,阅读源码是最快的成长途径
初学者应该积极发问 依靠别人的经验并不可耻,关键在于用最少的时间获取最多的收益
依靠书本进行深入学习 尽管技术博客或者社区论坛上的大神很多,但阅读一本书仍是系统习得知识的最好途径
转型要趁早 对程序员这份工作而言,越晚转型的代价越大。