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