給新程序員的10條建議
我最開始不是做軟件開發(fā)的,是一個售后技術(shù)支持工程師,你懂的,就是公司賣出的設(shè)備壞了,我就到現(xiàn)場去鼓搗兩下,換個零件,重啟下系統(tǒng)什么的。后來我轉(zhuǎn)行做軟件開發(fā),頗經(jīng)歷了一些曲折,遇到了很多實(shí)際的困難,再后來我成了程序員,干上了手藝活兒,就這么一路過來了,還出了兩本書,《Qt on Android核心編程》和《Qt Quick核心編程》。
后來我也和一些剛?cè)胄械拈_發(fā)人員共事過,有的朋友可以很快度過適應(yīng)期,有的朋友則會花費(fèi)比較長的時間,遇到各種不那么酸爽的事兒。你知道,我是一個愛瞎琢磨的程序員,根據(jù)我的個人經(jīng)驗(yàn)和我觀察別人的結(jié)果,我發(fā)現(xiàn),如果一個新手可以堅持并實(shí)踐這么幾點(diǎn),就能夠很快從青澀變成熟,完成最初的角色轉(zhuǎn)變,融入到讓你歡喜讓你憂的軟件開發(fā)工作中來。
接納自己是一張白紙這個事實(shí)
我覺得這是一個首要的前提。也許你很優(yōu)秀,有很強(qiáng)的學(xué)習(xí)能力,有強(qiáng)大的信念,有超強(qiáng)的小宇宙,有百折不撓的韌性……但是,你沒做過,你確實(shí)是一張白紙。這是一個客觀事實(shí),我們必須要要承認(rèn)。我們所做的一切,都是在接納現(xiàn)實(shí)的前提下展開的,唯有承認(rèn)這一點(diǎn),其它美好的事情才有可能。
我們平靜的看待這一點(diǎn),不要妄自菲薄,也不要好高騖遠(yuǎn),從一條線開始,慢慢繪制自己的藍(lán)圖,一切可能就會慢慢變成現(xiàn)實(shí)。
關(guān)注自己能做到什么
我們是一張白紙,但我們還是可以做很多事情,我們通過學(xué)習(xí),將能做更多事情。我們會遇到各種各樣的問題,會產(chǎn)生自己這個不會、那個不會,可能安裝一個IDE都會出問題,可能三行代碼都會遇到10個編譯錯誤,可能Run起來你不知道結(jié)果是對是錯是否符合預(yù)期……這都沒關(guān)系。
我們要看自己今天做到了什么,明天又能做到什么,一周后能做到什么,一月后能做到什么。我們關(guān)注積極的方面,不要因?yàn)楦鞣N挫敗而將自己陷在不良情緒的泥潭里,自怨自艾、自我否定、羨慕嫉妒恨、失望、沮喪……這些情緒都是我們的敵人,都是有不良居心的魔鬼,它們只會壞我們的事兒。我們要逃離它們,不給它們機(jī)會,我們的對策就是,看我能做什么,看我將來能做什么,看我需要做哪些事情才可以達(dá)到明天、下一周、下一個月的目標(biāo)。這樣我們就能積極行動起來,就會把時間花在有價值的地方,我們也會慢慢更有價值。
如饑似渴地學(xué)習(xí)
我們是一張白紙,就要如饑似渴地學(xué)習(xí),抓住一切機(jī)會學(xué)習(xí),讀書,求人,讀代碼,上班8小時,下班還有更多時間,我們可以把一切可以利用的時間都投入到相關(guān)知識和技能的學(xué)習(xí)中來。
當(dāng)你連一個DEMO都不知道如何創(chuàng)建,當(dāng)你連一個Hello World都跑步起來,當(dāng)你弄不懂變量、操作符、函數(shù)、對象、類、實(shí)例、控制語句,當(dāng)你不知道那些被老手們當(dāng)做常識的遞歸、鏈表、單例、觀察者、MVC、CRUD、RBAC……你唯一能做的,就是把自己變成一塊干燥的海綿,持續(xù)不斷地去吸收各種知識。
這個過程是快樂的,幸福的,你會發(fā)現(xiàn)隨著你掌握的知識越來越多,隨著你能解決的問題越來越多,你會發(fā)現(xiàn)今天的自己和昨天的自己不同,這個月的自己和上個月的自己不同,每一天、每一周、每一月都是一種驚喜。就讓自己變成一個小孩,收獲簡單的快樂。
別怕犯錯
很多新手怕犯錯,其實(shí)不必。犯錯不等于失敗,犯錯也是一種學(xué)習(xí)。
我們不必?fù)?dān)心別人因?yàn)樽约悍稿e而看輕自己,要知道,此時此刻我就是一張白紙啊,我沒有經(jīng)驗(yàn)啊,我什么都不會啊,我不犯錯才是奇怪的事情。
就像小孩子蹣跚學(xué)步,跌倒是很正常的事情。可是它會在跌倒中收獲寶貴的經(jīng)驗(yàn),摔幾次,摔幾天,它就學(xué)會了。
犯錯一點(diǎn)兒也不可怕,可怕的是不總結(jié)、不歸納、不吸取教訓(xùn)。
迎難而上
我遇到一些新入行的朋友,面對一個任務(wù)時會畏縮,說這個我不會啊,說這個我從來沒弄過啊,說我搞不定啊……
當(dāng)然會遇到困難!作為新手,你遇不到困難才是見了鬼呢。要把困難當(dāng)做機(jī)會,只有做你眼下搞不定的事情,你才能提升,你明天才能搞定更多的爛事兒。
所以,要迎難而上,把困難當(dāng)做獵物,當(dāng)做鍛煉的機(jī)會,要見獵心喜,用于挑戰(zhàn)自己。
記錄問題和心得
我覺得這一點(diǎn)非常重要。在初始階段,記錄遇到的問題,記錄學(xué)習(xí)心得,總結(jié)解決問題的經(jīng)驗(yàn),將會對我們后來的進(jìn)步提供非常大的幫助。我們要模仿牛的反芻,不斷從有限的實(shí)踐經(jīng)驗(yàn)中總結(jié)、消化,獲得更多的營養(yǎng)。
同時這也會幫助我們養(yǎng)成良好的工作習(xí)慣,良好的習(xí)慣,會讓我們終身受益。
適時求助
有些人喜歡悶頭黑搞,搞不定也吭聲,要么把困難扔在那里不管,自己也停在那里,要么繼續(xù)黑搞,東搞搞西搞搞始終搞不定,停在那里。
我覺得應(yīng)該給自己設(shè)定一個期限,在期限到達(dá)時還搞不定,就向別人求助。
向別人求助是正常的事情,每個人都可能會求助別人,一個人不可能搞定所有事情。不要擔(dān)心別人太忙沒時間幫你,也不要擔(dān)心欠別人的人情。要知道“幫助別人”這件事本身,就是一件快樂的事。在幫助別人的過程中,提供幫助的人會收獲快樂。多數(shù)程序員都很樂意幫助別人。真的。你獲得了幫助,你在遇到別人的求助時也樂于提供幫助,這就夠了。別的不用想太多。
提前告知上級你真的不能搞定
沒錯。就是這樣,一旦你經(jīng)過了種種努力,確信自己不能搞定手頭的事情,一定要盡早告知你的上級和小伙伴。
一個軟件項目的周期,通常是由最晚結(jié)束的那個任務(wù)決定。
假如你是一個新手,碰巧Take了一個任務(wù),你當(dāng)然不希望自己的任務(wù)是最晚結(jié)束的那個??蓪?shí)際情況表明,你有很高幾率扮演那個角色。我要說的是,你需要清楚判斷自己手上的任務(wù)的狀況,如果你真的不可能搞定(或者不可能按期搞定),一定要提前告知你的上級,把你的狀況、任務(wù)的狀況都說明白,這樣你的上級才可能有時間做必要的調(diào)整(比如分配新的資源、延長時間等)來應(yīng)對可能的項目延期。如果你在***一刻才告訴別人,那就沒有補(bǔ)救的機(jī)會了。真的。
別擔(dān)心別人看輕你,即便經(jīng)驗(yàn)豐富的優(yōu)秀程序員,也會碰到搞不定的事情。軟件開發(fā)的性質(zhì)就是如此,永遠(yuǎn)會有超越你能力邊界的問題蹦出來。這很正常的,讓別人知道,讓大家能想辦法補(bǔ)救,這就是很好的措施。
向優(yōu)秀的同伴學(xué)習(xí)
三人行必有我?guī)煛?/strong>
想讓自己變優(yōu)秀的一個好辦法就是和優(yōu)秀的人走在一起。
你一定要知道(自己觀察、別人告訴你、上級告訴你)你所在的團(tuán)隊中的哪些程序員在哪方面比較優(yōu)秀,比如張三代碼簡潔能自解釋,比如李四設(shè)計能力強(qiáng),比如王五總能搞定技術(shù)難題,比如趙六具有卓越的影響力,比如錢八善于分析問題,比如趙十能深入淺出的講解技術(shù)問題,諸如此類,如果你能夠清楚,一方面可以在自己遇到問題時向正確的人求助,另一方面,你也可以主動學(xué)習(xí)。
見賢思齊,自古就是這個道理。有時很多變化是在潛移默化中發(fā)生的,你所處的環(huán)境、你交往的人,往往會以潤物無聲的方式影響你。孟母三遷,只為擇鄰,就是這個道理。
讓上級為自己指定導(dǎo)師
如果可能,讓你的項目經(jīng)理或者領(lǐng)導(dǎo)為你指定一個導(dǎo)師(mentor),讓導(dǎo)師來幫助你制定你的階段目標(biāo),并且讓他來指導(dǎo)你達(dá)到目標(biāo)。
有個實(shí)踐,叫OJT培訓(xùn)(On the Job Training)。不過不一定每個公司都運(yùn)用這種機(jī)制。如果你所在的公司沒有,那可以讓上級給你找一個導(dǎo)師,或者自己找一個。
有經(jīng)驗(yàn)的導(dǎo)師,既能引導(dǎo)你少走一些彎路,又不會越俎代庖直接幫你把事情搞定。這樣你就會自己走在正確的方向上,在節(jié)省不必要的精力浪費(fèi)的同時,又能自己收獲實(shí)作的經(jīng)驗(yàn)。