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