1. 程式人生 > >非科班出身的程式設計師,該如何彌補技術差距?

非科班出身的程式設計師,該如何彌補技術差距?

隨著網際網路行業的蓬勃發展,市場對於程式設計師的需求激增,這個職業也不再囿於電腦科學或軟體工程等個別專業的畢業生,非計算機專業出身的程式設計師為數不少,他們的主業曾是物理、數學、自動化,甚至英語、藝術或歷史,但都出於對程式設計這一事業的青睞,投身成為程式設計師。

什麼是非科班出身的程式設計師

顧名思義,並未出身於計算機相關專業的程式設計師,在行業中普遍被認為是非科班選手。

在程式設計領域裡,除非天資超群,否則童子功越早打下越好。接觸程式設計時間過晚,不僅是程式設計技術上處於劣勢,也意味著在思維方式、解題經驗方面的落後。這也是為何科班出身的程式設計師在面對非科班選手時,往往具備壓倒性優勢的原因。

他們面臨的困難

作為一門技術工種,半路出家當程式設計師談何容易。對於一個希望轉型成為程式設計師的求職者,留給他學習技能的時間視窗通常極為緊湊,而知識積累的欠缺導致他們往往在一開始只能以速成的方式謀求技術熟練,這往往加固了外界對他們技術不紮實、「流於表面」的印象。

尤其對於一些專業跨度巨大的程式設計師,他們的轉型壁壘更是常人難以想象。有的人在轉型前對於程式設計的理解近於白紙,即便是在內行人看來通過自學足以達成的技術工具,在這些轉型者面前仍如無法逾越的大山。他們只好通過培訓機構實現從 0 到 1 的技術入門。

但培訓機構,在程式設計師一行中始終譭譽參半,一位 100offer 曾經的受訪者公開聲稱,自己拒絕接受任何曾在程式設計培訓機構報班的程式設計師求職者。

即便如此,仍有許多這樣的案例發生在各個公司之中,這些技術轉型者懷著對事業的目標,克服了一個個技術學習和思維方法上的障礙,抵禦住了周遭那些質疑自己選擇的聲音,面對工作中或明或暗的不信任,埋頭於程式語言和企業業務,最終以不錯的職業發展回擊了外界給予他們的刻板印象。

非科班程式設計師如何彌補技術優勢

100offer 本週蒐集並採訪了一系列擁有轉型經驗的候選人,他們均非程式設計科班出身,如今都成為了不錯的程式設計師,成為各自企業的技術骨幹。他們將分享自己是如何從半路出家者走到今天的經驗。

小羽:數學系出身的理科女,閱讀原始碼

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年後,馬越離開了國企,目前已通過 100offer 入職一家網際網路企業,擔任 Java 工程師。在用人單位的反饋中,馬越的計算機基礎、業務經驗均是上乘,唯一的短板在於上一份工作在國有單位,因其技術站與網際網路不同。但在馬越眼裡,這實在算不上難對付的問題。

100offer說

總的來說,非科班出身的程式設計師在市場上基數不算小,其中大多數的確面臨程式設計水平有限、知識分佈不平衡、技術經驗存在短板等現實困難。而行業對於非科班出身者的偏見也幾乎是普遍存在的。

那麼對於一個希望轉型成為程式設計師的非計算機科班出身人員,有哪些值得重視的經驗呢?通過以上案例,100offer 歸納如下:

快速建立知識體系 獲取程式設計師式的思維方式
尋找合適的途徑實現技術入門 比如報名參加一個口碑良好的短期培訓課程
找一門語言入手,精通之後再學其他 C、C++、PHP、Python、Java 都是強大且普世的入門語言
大量閱讀原始碼 根據多數受訪者的經驗,閱讀原始碼是最快的成長途徑
初學者應該積極發問 依靠別人的經驗並不可恥,關鍵在於用最少的時間獲取最多的收益
依靠書本進行深入學習 儘管技術部落格或者社群論壇上的大神很多,但閱讀一本書仍是系統習得知識的最好途徑
轉型要趁早 對程式設計師這份工作而言,越晚轉型的代價越大