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