聊聊程序員的自我修養(yǎng)
聊到程序員的自我修養(yǎng),不少同學(xué)可能會想到一本講述編譯與鏈接的書,這本書的名字也叫<<程序員的自我修養(yǎng)>>,是國人難得寫的比較不錯(cuò)的一本計(jì)算機(jī)技術(shù)書籍,不過本文要討論的內(nèi)容和這本書可以說沒有一點(diǎn)關(guān)系。
今天的話題面向的程序員,就是所有的正在寫代碼或者曾經(jīng)寫過代碼的程序員,也包括廣義上的程序員,例如項(xiàng)目經(jīng)理、架構(gòu)師等等。
在中國,寫程序,我相信對于大多數(shù)程序員來說不僅僅是一種興趣,更多的時(shí)候,更是一種養(yǎng)家糊口的技能,畢竟,程序員的高薪已經(jīng)是家喻戶曉的事情了。
對于大多數(shù)程序員來說,能成為Linus Torvalds等這些大神這樣的人幾率確實(shí)小的幾乎可以忽略不計(jì),但是,在普通人當(dāng)中,程序員的水平也是良莠不齊,大公司有厲害的程序員,優(yōu)秀的架構(gòu)師,不少公司也有一些工作很多年的“bug工程師"。
那么問題來了,同樣是工作若干年,為什么差距就出來了,我想,這些優(yōu)秀的程序員肯定是有一些“自我修養(yǎng)”,是最基礎(chǔ)的,是普世的。如果你能從這些修養(yǎng)開始約束自己,我想比讀幾本技術(shù)書籍管用很多。
好了,掰扯了那么多廢話,下面進(jìn)入正題。
何為程序員的自我修養(yǎng)?
何為程序員的自我修養(yǎng)?從正面回答這個(gè)問題可能很難說清楚,反向描述可能更通俗易懂一些,自我修養(yǎng)的對立面是“沒有修養(yǎng)”,那么我說說這么多年的工作、學(xué)習(xí)中,遇到的一些我認(rèn)為“沒有修養(yǎng)”的程序員形態(tài):
2、程序員小張進(jìn)公司3個(gè)月了,覺得代碼寫完能通過測試就OK了,在寫代碼的時(shí)候能省就省,客戶反饋有問題也不主動(dòng)解決,敷衍為主。
3、程序員小張正在寫一個(gè)功能模塊,需要進(jìn)行某種加密,到百度搜到了一個(gè)編碼模塊,看不明白具體寫了什么,但是放到程序里剛好適用,于是就這么原封不動(dòng)放進(jìn)去了。
4、程序員小張要對某個(gè)功能進(jìn)行研發(fā),項(xiàng)目經(jīng)理對他說,這個(gè)功能應(yīng)該能搜索到,你去搜搜看,小張就在百度搜啊搜,一天過去了啥都沒找到,項(xiàng)目經(jīng)理來到小張身邊坐下,換了個(gè)關(guān)鍵詞,1分鐘就搜到了解決方案。
我想,有些人可能已經(jīng)明白我要說什么,有些人可能還不明白,具體的話我也說不出來,只能用一句話來概括就是:在編寫代碼的過程中,善于學(xué)習(xí)、掌握方法、勤加思考、勤奮努力、持之以恒,長此以往,你的成長是非常快的。
以上這些還是比較抽象,那么說點(diǎn)實(shí)際的,程序員具體如何達(dá)成“較高的修養(yǎng)”,每個(gè)人各有自己的辦法,一兩句話是說不清楚的。我多年工作過程中,和騰訊最年輕的T4專家共事過,和百度92年的的T8曾經(jīng)是一個(gè)團(tuán)隊(duì)同事,只能通過觀察這些大牛的行為舉止來講述自己的觀點(diǎn)。主要從以下四個(gè)大的方面入手:
? 1.程序員基礎(chǔ)
? 2.搜索方法
? 3.英語能力
? 4.編程習(xí)慣
程序員基礎(chǔ)的基礎(chǔ)
一個(gè)好的開發(fā)人員,僅能夠熟練的進(jìn)行代碼編寫是完全不夠的,需要深刻的理解技術(shù)原理和業(yè)務(wù)邏輯,能夠全面、高效、嚴(yán)謹(jǐn)?shù)娜ヌ幚砣魏诬浖绦蚝蜆I(yè)務(wù)問題,而要做到這點(diǎn),扎實(shí)的個(gè)人基礎(chǔ)和技術(shù)基礎(chǔ)是必不可少的。
扎實(shí)的計(jì)算機(jī)基礎(chǔ)才是決定程序員發(fā)展的上限關(guān)鍵因素,而不是你今天學(xué)了什么語言,明天又學(xué)了xx框架。下面說的一些基礎(chǔ),需要我們重點(diǎn)對待和提高。
? 數(shù)據(jù)結(jié)構(gòu)
? 操作系統(tǒng)
? 數(shù)據(jù)庫
? 編譯原理
? 算法
? 體系結(jié)構(gòu)
上面說的每一項(xiàng)都是搭成一個(gè)優(yōu)秀的軟件的基石,市面上也有很多相關(guān)的經(jīng)典書籍,其實(shí)大家特別是畢業(yè)沒幾年的同學(xué)可以在平時(shí)多積累,不要丟了這些技能。
搜索方法
面向谷歌編程,這并不是一句戲言,事實(shí)上,任何一個(gè)開發(fā)人員,都應(yīng)當(dāng)具備搜索能力,甚至是一定要具備搜索能力。
同樣水平的程序員,會不會用搜索,可能會在程序開發(fā)質(zhì)量、效率上出現(xiàn)數(shù)倍的差異,這絕不是危言聳聽。因此,掌握高效、先進(jìn)、靈活的搜索方法和技巧,是非常重要的。提高搜索能力,主要的方法介紹如下:
? 搜索源選擇:選擇百度還是谷歌,或是選擇專業(yè)的程序員論壇,這里給出我的一個(gè)順序僅供參考:StackOverFlow網(wǎng)站 > 谷歌 > 百度。
? 關(guān)鍵詞構(gòu)造:總體遵循的原則是,準(zhǔn)確和簡潔,這個(gè)搜索多了自然就知道了。
? 聯(lián)想搜索:舉一個(gè)通俗的例子,比如想使用C#,利用某個(gè).NET類處理一種HTTP通訊,但是一直搜索不到完美的結(jié)果,不過換個(gè)思路,考慮到VB.NET也是.NET體系,和C#完全相通,那么也可以試著用VB.NET關(guān)鍵詞進(jìn)行搜索,搜索到完美代碼后再臨摹成C#代碼。
英語能力
計(jì)算機(jī)這個(gè)學(xué)科是從美國發(fā)展起來的,決定了編程語言一定是基于英語的,在編程過程中,從語言的關(guān)鍵詞到文檔的內(nèi)容又或是搜索引擎的搜索結(jié)果,都不可避免的會遇到英文。另外每出現(xiàn)一種新技術(shù),其一手資料一般都是英文,等到對應(yīng)的翻譯版本出來后,這個(gè)技術(shù)可能已經(jīng)流行好幾年了。
但是,作為程序員,也不需要太高的英語水平,只要能達(dá)到以下幾個(gè)點(diǎn)就夠用了:
? 1.在自己技術(shù)知識范圍內(nèi)的任何的英文的技術(shù)手冊、文檔、文章或是問題描述,能夠讀懂8成的內(nèi)容含義,能夠讀懂完整的技術(shù)含義。
? 2.對常見的編程邏輯和核心關(guān)鍵詞,能夠用英文組織問題的描述,最簡單的也行,只要能被搜索引擎讀懂就可以。比如如何在C#中把整形轉(zhuǎn)換為字符串類型這個(gè)問題,最簡易的英文描述就是 C# Integer Covert To String。
編程習(xí)慣
? 快捷鍵的使用
? 好的代碼注釋
? 好的命名規(guī)則
? 數(shù)據(jù)備份
? 不將就的編程邏輯,甚至于要有一點(diǎn)代碼潔癖
? 郵件工作方式
是不是這些習(xí)慣其實(shí)很簡單,其實(shí)今天提到的這些提升程序員修養(yǎng)的幾個(gè)點(diǎn)看起來都很簡單,而且大部分同學(xué)其實(shí)應(yīng)該也是知道的,但是捫心自問,平時(shí)能真正去認(rèn)真思考并實(shí)踐的有多少同學(xué)?或許,堅(jiān)持才是程序員最大的自我修養(yǎng),101%和99%的365次方的故事、1萬小時(shí)的道理大家都聽過,以此和各位共勉!
— 完 —
