不確定“再見理想”是“再見了,理想”還是“再次燃起理想”,稀里糊涂地對(duì)這句話有感覺。作為程序員,總會(huì)有自己的技術(shù)價(jià)值觀和技術(shù)理想。工作七年多,開始癢了。
程序員的生活總是喜憂參半,出入體面的寫字樓,在小小的cubicle里虐殺腦細(xì)胞;偶爾有條件小資一下,常被工作、生活壓力逼得點(diǎn)燈熬油;有時(shí)候想,這么辛苦,不論做什么行業(yè)都會(huì)做的好,是不是入錯(cuò)行了?手放在鍵盤的時(shí)候,又享受投入思考的快感?;蛟S注定是個(gè)程序員,限于天賦,或許注定是個(gè)庸庸碌碌的程序員。
前端時(shí)間因?yàn)榕艿洁l(xiāng)下,沒法上網(wǎng),網(wǎng)癮一上來撞墻流鼻涕,百無聊賴開始勾畫價(jià)值觀和技術(shù)理想。人總追求快樂,每天清醒的十六個(gè)小時(shí)中,——程序員可能有十八個(gè)小時(shí),至少有八小時(shí)花在工作上,所以,為了過得快樂,工作一定要快樂。如果當(dāng)前的工作注定沒法使你快樂,就趕快結(jié)束它。畢竟,多數(shù)時(shí)候,拼命工作不如拼命找工作來得實(shí)在。程序員當(dāng)然不算光鮮的職業(yè),但確實(shí)挺費(fèi)腦子,如果你智商低于110,換個(gè)軟件公司也注定痛苦,還是直接換個(gè)行業(yè)吧。
工作的基本原則是要保持身價(jià),何為身價(jià)?不是你現(xiàn)在月薪多少,而是你現(xiàn)在跳槽,能拿多高的offer。這跟很多因素有關(guān),主要因素包括
1.你當(dāng)前薪水——HR往往參考這個(gè)給你定薪水;
2.你的資歷——畢業(yè)的學(xué)校,工作年限,外企工作年限,你當(dāng)前的title,在當(dāng)前公司工作了已經(jīng)幾年…
3.你在面試中的表現(xiàn)——能發(fā)揮多少技術(shù)水平,英語對(duì)答如何。
像我這種身價(jià)的本來沒資格討論身價(jià),但誰叫這是我的blog,我的地盤聽我的呢.挨個(gè)亂噴一下。
1. 關(guān)于當(dāng)前薪水
假如你跟我一樣笨,沒有別的好辦法,就只能多投入精力工作。在以前的博客 與神對(duì)話 里也提過一個(gè)程序員對(duì)于產(chǎn)品的價(jià)值。每天上班8小時(shí),每天多專注一點(diǎn),日積月累,做的事情會(huì)多很多,對(duì)自己的提高也會(huì)多很多。加薪或許是水到渠成的事,如果不順利,要么跟領(lǐng)導(dǎo)談?wù)劊蛘咧苯娱W人。無論如何,不要抱怨。善于抱怨的人表示他還不夠強(qiáng)。你需要尊重權(quán)利,包括他人的權(quán)利和自己的權(quán)利。
2. 關(guān)于資歷
如果你畢業(yè)于名校,學(xué)歷又好,一畢業(yè)自然就能進(jìn)大公司。如果你還在江湖三流公司混,就得每天想著早點(diǎn)換工作。工作年限不總算是資歷,好公司的工作經(jīng)歷才有用。要記得換工作是有成本的,我工作七年多,現(xiàn)在的工作是第五份工作,所有公司都詬病我不stable,這樣的資歷很難騙取信任,教訓(xùn)啊!聰明的你肯定想到簡歷作假,但好公司都有reference check的,我還是勸你別冒險(xiǎn)。
3. 面試
千萬記住,一定要預(yù)先做好充分的準(zhǔn)備才能參加面試。對(duì)于一個(gè)java程序員來說,面試之前要翻一遍類似于Thinking in Java的書,背一遍設(shè)計(jì)模式,復(fù)習(xí)sql,復(fù)習(xí)mvc框架,復(fù)習(xí)Hibernate,復(fù)習(xí)Spring, 復(fù)習(xí)Servlet spec?;蛟S還有其他的,web service之類的。你可以想象,真要復(fù)習(xí)一遍,起碼要三個(gè)月,這就是我認(rèn)為換工作之前至少要預(yù)留出來的準(zhǔn)備時(shí)間。機(jī)會(huì)有限,僥幸心理出去碰運(yùn)氣純粹是浪費(fèi)機(jī)會(huì)。平時(shí)工作總有局限,看書是最有效準(zhǔn)備面試的途徑。
上面說的都是不登大雅之堂的事情,有熱情的程序員總想成長為高手,我當(dāng)然也有這樣的愿望。問題是你認(rèn)為什么樣的人算是高手,每個(gè)人心里會(huì)有不同的答案,關(guān)鍵是找出你和理想之間的差距并盡量縮短它。高手一定不僅僅是技術(shù)超群的,高手必然有高手的胸懷。
自己有時(shí)候會(huì)考慮一些工作和技術(shù)上的原則,想到哪兒敲到哪兒吧。
關(guān)于工作:
作為程序員,你要關(guān)心產(chǎn)品。這沒什么可說的,這是職業(yè)道德問題。
作為程序員,你要尊重QA。工作越久,就越覺得QA對(duì)產(chǎn)品非常重要,程序員很多時(shí)候陷在具體的技術(shù)問題中,太多精力被牽扯住了。好的QA讓程序員心安,能夠有助于控制風(fēng)險(xiǎn). QA應(yīng)該有做最后決定的權(quán)利,所以QA需要對(duì)產(chǎn)品有很好的insight. 而且好QA需要明白,測試不是找bug的游戲。
關(guān)于技術(shù):
effective java 和 Refactor書都是總結(jié)各種編程原則的書,那些熟為人知的原則不說,我只說我的理解
static: Joshua在effective java里強(qiáng)調(diào)盡量使用static method。這肯定是沒錯(cuò)的[這句話說錯(cuò)了,請(qǐng)看下面T.H.E的評(píng)論。他說的很有道理。我是做應(yīng)用的程序員,不暴露API給其他產(chǎn)品,所以一直都覺得IDE里移動(dòng)static method沒成本。但如果寫Service層給未知產(chǎn)品用的話,耦合class的確有危險(xiǎn)]。太看重這一點(diǎn),就容易轉(zhuǎn)到一個(gè)誤區(qū)——多使用static field. 而static field有時(shí)代表了封裝的問題,需要謹(jǐn)慎。
exception: 包括Thinking in java的Bruce, Martin Fowler等很多人都對(duì)checked exception不感冒。自己也思考了一下,你當(dāng)然能舉出checked exception的應(yīng)用場景。你可以說某個(gè)方法它拋出checked exception是為了讓caller處理exception.但你說的是讓“這個(gè)caller”處理它。從重用的角度說,你并不預(yù)知所有被調(diào)用的情況,所以不能排除一些情況下這個(gè)checked exception并不能得到特別的處理。這個(gè)想法更本質(zhì)的原則是,寫底層程序的時(shí)候,要裝作不知道caller是怎么使用它的,哪怕是你自己調(diào)用它。
重復(fù)代碼:所有程序員都對(duì)重復(fù)代碼表現(xiàn)出深惡痛絕的樣子。但我覺得,重復(fù)代碼不是定性問題,而是個(gè)定量問題??梢赃@樣考慮:三行代碼反復(fù)出現(xiàn)在三個(gè)不同的文件里,甚至在不同的package里,這算重復(fù)代碼么?四行代碼呢?十行代碼呢?曾經(jīng)聽到一個(gè)高手說,編程的核心在于重用。我不反對(duì)這個(gè)說法,但我更傾向于說,編程的核心在于可維護(hù)性。對(duì)于重復(fù)代碼,大段的重復(fù)肯定要消滅的,三五行的重復(fù)不是不可以存在,但是要盡量把它圈在一個(gè)小范圍里,比如一個(gè)包,或者文件,或者方法里。有時(shí)候刻意追求“不重復(fù)”,反而讓程序變得別扭。
技術(shù)存在的價(jià)值在于能夠解決現(xiàn)實(shí)問題。你可以對(duì)技術(shù)狂熱,但不能忘了這個(gè)客觀事實(shí),技術(shù)需要實(shí)現(xiàn)商業(yè)價(jià)值,需要最求投入產(chǎn)出比。最最根本的原則,是pragmatic