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