零經驗素人,怎樣找到一份軟件開發(fā)的工作?(零經驗素人,怎樣找到一份軟件開發(fā)的工作呢)
找開發(fā)工作都要求有經驗的,怎么破?
記得我初到京城開始找工作時,最痛苦的莫過于,看到所有的軟件開發(fā)崗位都要求有工作經驗。甚至我在有一次失敗的面試之后,對著面試官絕望地問道:“想找工作要有經驗,可是不工作哪來的經驗,您說我應該怎么辦?”
當時那位面試官只是推了推鼻梁上的眼鏡,沉默了一會兒,有些同情地說:“回去等我們通知吧,再多學習學習?!?/p>
時至今日,我已然明白找不著工作這個問題,并不是出在公司的招聘要求上,而是出在了我自己當時的認知水平上。因為公司開門做生意,要在激烈的市場競爭中生存下來,肯定是希望以有限的成本找到最合適的人才。
而自己卻抱著“進了公司,我肯定能學會怎么工作”這樣的想法,錯誤地把責任歸咎于公司的招聘政策,這顯然是本末倒置的。
當然,我后來也找到了軟件開發(fā)的工作,開啟了職業(yè)生涯。只是繞了不少彎路,回過頭看,有些事情我懂得更早的話,或許命運會有所不同。
因此,我打算結合自己的體會,說一說一位零經驗素人,如何為自己創(chuàng)造經驗,找到一份軟件開發(fā)的工作。
學會一套技術體系
在這里我想明確一個前提,那就是求職者是零經驗,而不是零知識。假如說求職者從來沒有接觸過計算機的理論知識,只是羨慕軟件開發(fā)者的光環(huán),那本文是不適合的。求職者還是應該花時間,先將基礎理論學好,并掌握一門編程語言。
我想大多數(shù)有志于軟件開發(fā)的求職者,一定都已經掌握了一門編程語言。求職者已經可以用編程語言解決一些特定的數(shù)學或者算法問題。但對于想找一份工作來說,這還是遠遠不夠的。
還要再學習什么?應該學會一套技術體系,解決一類問題。
記得我那會兒為了找工作,把一本厚厚的java語言程序設計給啃了下來,里面的知識點也都認真上機操作了。但這些知識儲備僅夠用于筆試,在面試環(huán)節(jié),人家問的多是體系化的內容。
例如什么是MVC架構、使用過哪些框架、數(shù)據(jù)如何存儲,緩存如何設計等。坦白說,第一次被問的懵圈還情有可原,但如果第三次、第四次還張口結舌,答非所問,那就不應該了。
那么,沒有經驗,我們就要給自己創(chuàng)造出經驗了。一個很好的辦法就是實踐“做中學”的理念。微軟的資深技術人鄒欣老師,他多年以來一直堅持利用自己的業(yè)余時間在高校中傳播、講授“做中學”,并著有《構建之法》一書,系統(tǒng)地論述如何實踐“做中學”,這本書是一個相當好的參考。
臨淵羨魚,不如退而結網。求職者要去實踐開發(fā)一個完整的系統(tǒng),功能簡單一些都沒問題,“小而全”就可以。之所以要強調完整性,是因為這樣的工程實踐不是做一個課堂作業(yè),而是要可用。
在工程中要從系統(tǒng)全局來思考問題,這樣才會將目光放在如何運用一套技術體系來解決問題。做這樣的實踐時,求職者不必一個人埋頭苦干,可以找同學好友一起研究琢磨。如果能找到有經驗的專業(yè)人士給予指導,則是效果最好的。
九步法做一套系統(tǒng)出來
選取什么樣的系統(tǒng)去實現(xiàn),這個可以根據(jù)個人的喜好來。例如微信式的通信軟件、單機游戲、信息管理工具等。甚至就做一個大學里最常見的工程作業(yè):學籍管理系統(tǒng)。
選好了要做的工程,接下來最重要的就是一定要自己完成。有太多的理由不去做完這件事了,例如我就想去多面試幾次碰碰運氣;爸媽催得急,家里坐不住;看到別的同學順利入職,心里著急,于是就拿別人做的項目過來看上幾眼,自認為是學會了……
對于這一點,我也沒有別的好辦法。我只知道一字一字地手敲一萬行代碼之后,比沒這么做之前要踏實得多,面試時應對各種細節(jié)問題也都有把握得多。
下面我就以學籍管理系統(tǒng)為例,分成九個步驟,說明怎么把這個系統(tǒng)做出來。
第一步:分析需求。就是自己想學籍管理應該包含哪些功能,例如可以登記學生信息,可以查詢信息,可以修改數(shù)據(jù);考試后記錄考分,學期末老師填寫評語;記錄學生的獎懲情況等。
第二步:簡單設計。之所以說是簡單,因為對于零經驗求職者來說,也不可能進行太深入的思考。例如就思考學生信息會包括哪些內容,將這些內容整合到一起形成一個結構。再思考這個結構會具備怎樣的行為,這樣對數(shù)據(jù)的操作就出來了。
第三步:技術選型。這時候求職者要對BS或者CS結構有基本的了解,知道實現(xiàn)BS需要web server db的方式;而cs則是client(PC/Mobile) server db。這一步往往需要求職者進行大量地學習,但不必學到100%,對每一種技術學到核心的20%就可以動手工作了。
至于開發(fā)語言,可以是java、php、python、C#等,甚至就用C語言做一個命令行界面的程序也沒關系。在這一步里也還要學會使用IDE開發(fā)工具,能夠編譯、調試程序。
第四步:定義核心對象。不要一上來就奔著畫UI界面去了,這個工作很吸引人,但對于一套完整的系統(tǒng)來說,并不是最重要的工作。這一步我們已經確定了開發(fā)語言,那么就可以在代碼編輯器里為系統(tǒng)的核心對象進行定義了。例如學號字段用長整型;姓名字段用字符串;性別用字符型等。
第五步:增加對象的操作。核心對象定義出來了,那必然要對它施加操作,系統(tǒng)才能得以運行。例如學生信息對象有了,那么要增加一個叫張三的學生,代碼應該怎么寫呢?順著這樣的思路,就可以把新增方法給實現(xiàn)出來了。
接下來還要思考,數(shù)據(jù)雖然有了,但都在內存里,程序一退出數(shù)據(jù)就沒了,數(shù)據(jù)怎么保存呢?這樣又可以將數(shù)據(jù)庫引入進來了,再編寫與數(shù)據(jù)庫通信的代碼。
第六步:編譯自測。不要寫了很多代碼之后再去編譯并運行看結果。一定要剛好寫完一個功能就立即編譯并調試結果。代碼少的時候,問題也容易排查,這樣對增強自己的信心很有好處。
如果求職者會使用單元測試來覆蓋業(yè)務代碼,那就更是加分項了。軟件開發(fā)的世界里有許多理論與工具,對于零經驗者來說可能頭緒太過于復雜,所以暫時不會使用單元測試也沒關系。不過起碼要能通過運行結果判斷功能是否正常。
第七步:迭代。當功能一個一個被開發(fā)出來時,會發(fā)現(xiàn)需要定義新的對象了,這時候就要繼續(xù)新增對象并增加操作。實際上就是重復第四步到第六步的工作,這也是開發(fā)人員在工作時的實際狀態(tài)。
第八步:繪制UI。這時候終于可以畫界面了,之所以將這一步放在最后,是因為所有的核心操作都已經定型。業(yè)務邏輯在實現(xiàn)過程中已經得到了反復確認,UI只需要呈現(xiàn)已有的業(yè)務邏輯就可以。
第九步:系統(tǒng)測試。所有代碼全都寫完,這的確是一件值得慶賀的事,但還遠未到結束的時刻。求職者要鼓起勇氣來不斷地測試自己開發(fā)的系統(tǒng),而且要邀請同學或者老師來試用自己的系統(tǒng)。
因為自己的目光里總會有盲區(qū),別人也許很容易就發(fā)現(xiàn)系統(tǒng)存在的問題。遇到問題并解決問題,往往是技術成長的捷徑。而一套自己開發(fā)的系統(tǒng),能夠經受試用檢驗并被認可,“做中學”的目的也就達到了。
結語
軟件開發(fā)是一項智力密集型的勞動,要進入這個職業(yè)確實存在一定的門檻。如今我在公司面試新人的時候,也不止一次聽到他們抱怨說“沒經驗就沒工作,可沒工作哪來的經驗?”
我總會想起當年自己也發(fā)出這樣怨言的時候,所以我都會耐心地給他們說一些如何獲得經驗的方法。雖然不知道我當時的話能給他們提供多大的幫助,但我想他們也應該會思考并做出行動吧。時至今日,我想這些新人們也一定都走上了工作崗位,有了很好的職業(yè)發(fā)展。
上述的九步法也許并不是很完善,它只是出自于我的個人思考。如果能有人補充完善并提出更好的辦法,那真是功德無量的事情。但對于迷茫中的求職者來說,不妨先去嘗試一下,起碼比不知道做什么而只是抱怨要強。
我也希望能有更多喜愛軟件開發(fā)的求職者,能夠順利獲得機會并大展鴻圖!