隨著互聯(lián)網(wǎng)行業(yè)的蓬勃發(fā)展,市場(chǎng)對(duì)于程序員的需求激增,這個(gè)職業(yè)也不再囿于計(jì)算機(jī)科學(xué)或軟件工程等個(gè)別專(zhuān)業(yè)的畢業(yè)生,非計(jì)算機(jī)專(zhuān)業(yè)出身的程序員為數(shù)不少,他們的主業(yè)曾是物理、數(shù)學(xué)、自動(dòng)化,甚至英語(yǔ)、藝術(shù)或歷史,但都出于對(duì)編程這一事業(yè)的青睞,投身成為程序員。
什么是非科班出身的程序員
顧名思義,并未出身于計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的程序員,在行業(yè)中普遍被認(rèn)為是非科班選手。
在編程領(lǐng)域里,除非天資超群,否則童子功越早打下越好。接觸編程時(shí)間過(guò)晚,不僅是編程技術(shù)上處于劣勢(shì),也意味著在思維方式、解題經(jīng)驗(yàn)方面的落后。這也是為何科班出身的程序員在面對(duì)非科班選手時(shí),往往具備壓倒性?xún)?yōu)勢(shì)的原因。
他們面臨的困難
作為一門(mén)技術(shù)工種,半路出家當(dāng)程序員談何容易。對(duì)于一個(gè)希望轉(zhuǎn)型成為程序員的求職者,留給他學(xué)習(xí)技能的時(shí)間窗口通常極為緊湊,而知識(shí)積累的欠缺導(dǎo)致他們往往在一開(kāi)始只能以速成的方式謀求技術(shù)熟練,這往往加固了外界對(duì)他們技術(shù)不扎實(shí)、「流于表面」的印象。
尤其對(duì)于一些專(zhuān)業(yè)跨度巨大的程序員,他們的轉(zhuǎn)型壁壘更是常人難以想象。有的人在轉(zhuǎn)型前對(duì)于編程的理解近于白紙,即便是在內(nèi)行人看來(lái)通過(guò)自學(xué)足以達(dá)成的技術(shù)工具,在這些轉(zhuǎn)型者面前仍如無(wú)法逾越的大山。他們只好通過(guò)培訓(xùn)機(jī)構(gòu)實(shí)現(xiàn)從 0 到 1 的技術(shù)入門(mén)。
但培訓(xùn)機(jī)構(gòu),在程序員一行中始終毀譽(yù)參半,100 offer 的一位受訪者曾經(jīng)公開(kāi)聲稱(chēng),自己拒絕接受任何曾在編程培訓(xùn)機(jī)構(gòu)報(bào)班的程序員求職者。
即便如此,仍有許多這樣的案例發(fā)生在各個(gè)公司之中,這些技術(shù)轉(zhuǎn)型者懷著對(duì)事業(yè)的目標(biāo),克服了一個(gè)個(gè)技術(shù)學(xué)習(xí)和思維方法上的障礙,抵御住了周遭那些質(zhì)疑自己選擇的聲音,面對(duì)工作中或明或暗的不信任,埋頭于編程語(yǔ)言和企業(yè)業(yè)務(wù),最終以不錯(cuò)的職業(yè)發(fā)展回?fù)袅送饨缃o予他們的刻板印象。
非科班程序員如何彌補(bǔ)技術(shù)優(yōu)勢(shì)
本周我們搜集并采訪了一系列擁有轉(zhuǎn)型經(jīng)驗(yàn)的候選人,他們均非編程科班出身,如今都成為了不錯(cuò)的程序員,成為各自企業(yè)的技術(shù)骨干。他們將分享自己是如何從半路出家者走到今天的經(jīng)驗(yàn)。
小羽:數(shù)學(xué)系出身的理科女,閱讀源碼
2014 年的時(shí)候,小羽還壓根沒(méi)想過(guò)自己未來(lái)會(huì)和代碼發(fā)生化學(xué)反應(yīng)。她那時(shí)剛剛從中國(guó)最好的大學(xué)畢業(yè),專(zhuān)業(yè)是數(shù)學(xué)系。幾個(gè)月后,一心想著未來(lái)出國(guó)深造的她進(jìn)入了一家互聯(lián)網(wǎng)金融公司,職位是產(chǎn)品經(jīng)理。
「當(dāng)時(shí)也不知道自己適合做什么,想著這份工作經(jīng)歷就算 Gap Year 吧,就被派去負(fù)責(zé)產(chǎn)品了?!箶?shù)學(xué)系出身的小羽此前并未接觸過(guò)任何產(chǎn)品相關(guān)的知識(shí),一切都只能靠她現(xiàn)學(xué)。九個(gè)月后,一個(gè)機(jī)會(huì)降臨到小羽面前,某金融類(lèi)央企的認(rèn)證部門(mén)需要一名產(chǎn)品經(jīng)理,小羽投遞的簡(jiǎn)歷被對(duì)方人事部門(mén)看中,很順利便錄用了她。
在與新領(lǐng)導(dǎo)的溝通中,對(duì)方得知小羽原本的專(zhuān)業(yè)是數(shù)學(xué)系,「要不你來(lái)試試寫(xiě)代碼?」面對(duì)建議,小羽稍一考慮就答應(yīng)了下來(lái)。
早在大學(xué)一年級(jí)時(shí),小羽就在公共課程上學(xué)習(xí)到了關(guān)于 C++ 的基礎(chǔ)知識(shí)。但那時(shí)她對(duì)編程還沒(méi)有特別的興趣,答應(yīng)從產(chǎn)品經(jīng)理轉(zhuǎn)型技術(shù)崗,更重要的原因來(lái)自小羽本身覺(jué)得寫(xiě)代碼這事更符合她理工科的偏好。
「一開(kāi)始,人家是給我一個(gè)別的項(xiàng)目,讓我照著寫(xiě)照著抄?!贡绕甬a(chǎn)品經(jīng)理,程序員的身份對(duì)技術(shù)要求更高,留給小羽的速成期不算太長(zhǎng),而她成長(zhǎng)的方式也比較直接粗暴,那就是看源碼。
「不停地看,有不懂的地方就去搜,去查,一點(diǎn)點(diǎn)拼湊出來(lái)?!购迷诮邮苓^(guò)多年的數(shù)學(xué)訓(xùn)練,小羽對(duì)于強(qiáng)調(diào)邏輯的代碼工作逐漸得心應(yīng)手。一個(gè)月后,小羽上手了 Java。
2016,小羽開(kāi)始接觸 Python、Pascal 以及 C++,對(duì)于編程語(yǔ)言和數(shù)據(jù)庫(kù)的嘗試也越來(lái)越多。Spring、MySQL、Redis 等框架或數(shù)據(jù)庫(kù)逐漸開(kāi)始被納入知識(shí)體系,由于工作內(nèi)容涉及前端開(kāi)發(fā),小羽又學(xué)習(xí)了 Angular、React 等框架。甚至對(duì)于數(shù)據(jù)挖掘、svm、神經(jīng)網(wǎng)絡(luò),她也有了一定涉獵。
回憶自己從入門(mén)到上手的經(jīng)驗(yàn),小羽認(rèn)為最有意義的工作就是閱讀源碼。「我技術(shù)提升最快的那段時(shí)間,就在閱讀大量源碼,包括 JDK 的源碼。那個(gè)階段后,我就感覺(jué)自己真的已經(jīng)邁過(guò)了剛?cè)腴T(mén)的狀態(tài)了。」
「源碼能夠直觀、系統(tǒng)地為學(xué)習(xí)者描繪這門(mén)編程語(yǔ)言是如何工作的?!谷缃瘢∮鹪谝患抑浖髽I(yè)擔(dān)任架構(gòu)師,盡管進(jìn)入職場(chǎng)僅僅三年,小羽早已完成了從編程新人到技術(shù)骨干的轉(zhuǎn)型。
曹?。撼錾砉た频某绦騿T,強(qiáng)化學(xué)習(xí)還得看書(shū)
曹巍是工科生,2009年本科專(zhuān)業(yè)時(shí),他的身份是一名「材料成型機(jī)控制工程專(zhuān)業(yè)」的學(xué)生,這個(gè)名字對(duì)非工科生無(wú)疑相當(dāng)拗口。
畢業(yè)后,曹巍來(lái)到了北京,已然成型的互聯(lián)網(wǎng)氣氛打動(dòng)了曹巍。回頭審視自己的專(zhuān)業(yè)技能,曹巍心想,用接下來(lái)的生命繼續(xù)和數(shù)控機(jī)床打交道,太乏味了。
好在他還有其他的技能。大一時(shí),曹巍的室友是一位迷戀計(jì)算機(jī)文化的工科男,在室友的帶動(dòng)下,曹巍自己也早早自學(xué)了 Java。
「Java 這個(gè)語(yǔ)言,它有個(gè)特色是面向?qū)ο?,這在不接觸編程的普通人那里,是很難去理解的概念。所以我花費(fèi)在思維轉(zhuǎn)換上的時(shí)間很多。為了在腦海里弄明白它究竟是個(gè)什么東西,剛開(kāi)始花了一個(gè)多星期的時(shí)間?!?/p>
2010年1月,曹巍進(jìn)入一家軟件企業(yè),擔(dān)任元數(shù)據(jù)產(chǎn)品開(kāi)發(fā)。從新人開(kāi)始,曹巍一邊工作一邊積累自己的技術(shù)經(jīng)驗(yàn),3年后,曹巍進(jìn)入某數(shù)碼集團(tuán)負(fù)責(zé)技術(shù)架構(gòu),從 Java 到 Spring MVC、MyBatis/Hibernate、Dubbo 等服務(wù)端框架技術(shù), 再到 HTML、JSP、Servlet、JavaScript 等應(yīng)用技術(shù),曹巍逐一涉獵。
回顧自己從不相干的專(zhuān)業(yè)轉(zhuǎn)型成為程序員的過(guò)程,艱辛是必不可少的感覺(jué),但曹巍認(rèn)為那總是存在的。好在自己是一個(gè)耐得住寂寞的人,當(dāng)技藝打磨到足夠優(yōu)秀時(shí),旁人的閑言閑語(yǔ)自然會(huì)終止。
對(duì)于從0學(xué)習(xí)一套編程語(yǔ)言,曹巍頗有心得:「我的理解,任何東西都是碎片化的,一個(gè)技術(shù)點(diǎn)可以發(fā)散到其他碎片點(diǎn),最終就弄明白了整個(gè)的脈絡(luò)。所以我的學(xué)習(xí)路徑是從每個(gè)技術(shù)點(diǎn)開(kāi)始,摸清楚技術(shù)脈絡(luò),最后需要深入了解技術(shù)原理,就去看書(shū)。」
盡管對(duì)于一個(gè)程序員而言,網(wǎng)上有大量現(xiàn)成的技術(shù)博客,每天都在分享精巧的代碼思路,但在有關(guān)編程技術(shù)的深度和準(zhǔn)確性上,曹巍認(rèn)為書(shū)本依然重要。
「對(duì)我?guī)椭畲蟮臅?shū)是周志明的《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》,每個(gè)學(xué)習(xí) Java 的人都應(yīng)該看。學(xué)習(xí)緩存的時(shí)候,可以看看黃建宏的《Redis設(shè)計(jì)與實(shí)現(xiàn)》。數(shù)據(jù)庫(kù)方面,《高性能MySQL》非常好.....」
在代碼中摸爬滾打 8 年以后,曹巍如今在一家互聯(lián)網(wǎng)企業(yè)擔(dān)任技術(shù)總監(jiān),回想自己技術(shù)身份的轉(zhuǎn)型,他覺(jué)得其實(shí)只要是足夠耐心,以及主動(dòng)學(xué)習(xí),是否科班出身的話題終究會(huì)在周?chē)娜俗炖锵А?/p>
馬越:地理專(zhuān)業(yè)的技術(shù)達(dá)人,靠培訓(xùn)機(jī)構(gòu)入門(mén)
馬越是南京人,早在大學(xué)里,馬越就以技術(shù)手段活絡(luò)著稱(chēng)。他讀得是南京本地一所知名高校,專(zhuān)業(yè)是地理信息系統(tǒng)。在一項(xiàng)地理信息整理工作時(shí),他獨(dú)立完成了地理信息系統(tǒng)網(wǎng)頁(yè)搭建任務(wù)的最初版本。
「我從小就喜歡玩電腦,也愛(ài)看IT名人的傳記?!乖诰攀甏袊?guó)的商業(yè)傳記中,最受歡迎的當(dāng)屬比爾·蓋茨,馬越對(duì)于 IT 的概念大部分也來(lái)源于此。
盡管對(duì) IT 有興趣,但馬越一直沒(méi)想過(guò)學(xué)習(xí)編程,他在地理信息專(zhuān)業(yè)的課程得心應(yīng)手,將來(lái)的出路被寄托于研究所或者交通企業(yè)。但是,為學(xué)院搭建網(wǎng)頁(yè)的那幾個(gè)月真正改變了他,為了完成這個(gè)任務(wù)。馬越開(kāi)始潛心學(xué)習(xí)編程語(yǔ)言,他選擇的第一款語(yǔ)言是 Python。
「豆瓣最早就是阿北在咖啡店里用 Python 寫(xiě)出來(lái)的。我玩豆瓣,我也用 Python?!鬼樌Y(jié)束了學(xué)院的任務(wù)后,馬越突然意識(shí)到了自己在技術(shù)板塊的潛力。
畢業(yè)后,馬越應(yīng)聘進(jìn)入某大型交通企業(yè),并在其中自告奮勇承擔(dān)一部分 IT 技術(shù)工作。在那同時(shí),他決定為自己的編程技能充電。
為了真正入門(mén),馬越在公司附近報(bào)了一個(gè)軟件編程速成班。在培訓(xùn)班里,馬越接觸到了 CSS 和 JavaScript,也系統(tǒng)性地了解了數(shù)據(jù)結(jié)構(gòu)、算法與數(shù)據(jù)庫(kù)。
「培訓(xùn)只能算入門(mén)工具,我當(dāng)時(shí)作為非科班出身的人,這是適合我的途徑。」馬越明白,在編程行業(yè),培訓(xùn)班出身一直處在鄙視鏈的下游,他能做的只有屏氣積蓄實(shí)力。
在交通企業(yè),馬越的工作逐漸受到上層認(rèn)可,工作也徹底調(diào)整為技術(shù)崗位。Intellij IDEA,oracle,kafaka,cucumber,sonar,Jekins,馬越用到的技術(shù)工具越來(lái)越多,承擔(dān)的工作責(zé)任也逐漸核心。
與小羽一樣,他也意識(shí)到了閱讀源碼的好處?!副绕瓞F(xiàn)在很多線上培訓(xùn)用的視頻教學(xué),閱讀源碼要直接得多,進(jìn)步也快得多?!?/p>
工作3年后,馬越離開(kāi)了國(guó)企,目前已入職一家互聯(lián)網(wǎng)企業(yè),擔(dān)任 Java 工程師。在用人單位的反饋中,馬越的計(jì)算機(jī)基礎(chǔ)、業(yè)務(wù)經(jīng)驗(yàn)均是上乘,唯一的短板在于上一份工作在國(guó)有單位,因其技術(shù)站與互聯(lián)網(wǎng)不同。但在馬越眼里,這實(shí)在算不上難對(duì)付的問(wèn)題。
后記
總的來(lái)說(shuō),非科班出身的程序員在市場(chǎng)上基數(shù)不算小,其中大多數(shù)的確面臨編程水平有限、知識(shí)分布不平衡、技術(shù)經(jīng)驗(yàn)存在短板等現(xiàn)實(shí)困難。而行業(yè)對(duì)于非科班出身者的偏見(jiàn)也幾乎是普遍存在的。
那么對(duì)于一個(gè)希望轉(zhuǎn)型成為程序員的非計(jì)算機(jī)科班出身人員,有哪些值得重視的經(jīng)驗(yàn)?zāi)?通過(guò)以上案例, 歸納如下:
快速建立知識(shí)體系 獲取程序員式的思維方式
尋找合適的途徑實(shí)現(xiàn)技術(shù)入門(mén) 比如報(bào)名參加一個(gè)口碑良好的短期培訓(xùn)課程
找一門(mén)語(yǔ)言入手,精通之后再學(xué)其他 C、C++、PHP、Python、Java 都是強(qiáng)大且普世的入門(mén)語(yǔ)言
大量閱讀源碼 根據(jù)多數(shù)受訪者的經(jīng)驗(yàn),閱讀源碼是最快的成長(zhǎng)途徑
初學(xué)者應(yīng)該積極發(fā)問(wèn) 依靠別人的經(jīng)驗(yàn)并不可恥,關(guān)鍵在于用最少的時(shí)間獲取最多的收益
依靠書(shū)本進(jìn)行深入學(xué)習(xí) 盡管技術(shù)博客或者社區(qū)論壇上的大神很多,但閱讀一本書(shū)仍是系統(tǒng)習(xí)得知識(shí)的最好途徑
轉(zhuǎn)型要趁早 對(duì)程序員這份工作而言,越晚轉(zhuǎn)型的代價(jià)越大。