如何成為優(yōu)秀的程序員

優(yōu)秀的程序員應(yīng)該具備兩方面能力:

良好的程序設(shè)計(jì)能力:

掌握常用的數(shù)據(jù)結(jié)構(gòu)和算法(例如鏈表,棧,堆,隊(duì)列,排序和散列);

理解計(jì)算機(jī)科學(xué)的核心概念(例如計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)、操作系統(tǒng)、編譯原理和計(jì)算機(jī)網(wǎng)絡(luò));

熟悉至少兩門(mén)以上編程語(yǔ)言(例如C++,Java,C#,和Python);

專業(yè)的軟件開(kāi)發(fā)素養(yǎng):

具備良好的編程實(shí)踐,能夠編寫(xiě)可測(cè)試(Testable),可擴(kuò)展(Extensible),可維護(hù)(Maintainable)的代碼;

把握客戶需求,按時(shí)交付客戶所需要的軟件產(chǎn)品;

理解現(xiàn)代軟件開(kāi)發(fā)過(guò)程中的核心概念(例如面向?qū)ο蟪绦蛟O(shè)計(jì),測(cè)試驅(qū)動(dòng)開(kāi)發(fā),持續(xù)集成,和持續(xù)交付等等)。

和其它能力一樣,程序設(shè)計(jì)能力和軟件開(kāi)發(fā)素養(yǎng)源自項(xiàng)目經(jīng)驗(yàn)和書(shū)本知識(shí)。項(xiàng)目經(jīng)驗(yàn)因人而異(來(lái)自不同領(lǐng)域的程序員,項(xiàng)目差異會(huì)很大);但書(shū)本知識(shí)是相通的——尤其是經(jīng)典圖書(shū),它們都能夠拓寬程序員的視野,提高程序員的成長(zhǎng)速度。

在過(guò)去幾年的學(xué)習(xí)和工作中,我閱讀了大量的程序設(shè)計(jì)/軟件開(kāi)發(fā)書(shū)籍。隨著閱讀量的增長(zhǎng),我意識(shí)到:

經(jīng)典書(shū)籍需要不斷被重讀——每一次重讀都會(huì)有新的體會(huì);

書(shū)籍并非讀的越多越好——大多數(shù)書(shū)籍只是經(jīng)典書(shū)籍中的概念延伸(有時(shí)甚至是照搬);

意識(shí)到這兩點(diǎn)之后,我開(kāi)始思考一個(gè)很功利的問(wèn)題:如何從盡可能少的書(shū)中,獲取盡可能多的關(guān)鍵知識(shí)?換句話說(shuō):

優(yōu)秀的程序員應(yīng)該掌握哪些關(guān)鍵概念?

哪些書(shū)籍來(lái)可以幫助程序員掌握這些關(guān)鍵概念?

這即是這篇文章的出發(fā)點(diǎn)——我試圖通過(guò)程序員必讀書(shū)單這篇文章來(lái)回答上面兩個(gè)問(wèn)題。

標(biāo)準(zhǔn)

進(jìn)入必讀書(shū)單之前,我先介紹下書(shū)單里的書(shū)籍選擇標(biāo)準(zhǔn)和領(lǐng)域選擇標(biāo)準(zhǔn)。當(dāng)然你也點(diǎn)擊這里直接跳轉(zhuǎn)到書(shū)單開(kāi)始閱讀。

書(shū)籍選擇標(biāo)準(zhǔn)

必讀:什么是必讀書(shū)籍呢?如果學(xué)習(xí)某項(xiàng)技術(shù)有一本書(shū)無(wú)論如何都不能錯(cuò)過(guò),那么這本書(shū)就是必讀書(shū)籍——例如Effective Java于Java,CLR via C#于C#;

注意我沒(méi)有使用“經(jīng)典”這個(gè)詞,因?yàn)?b>經(jīng)典計(jì)算機(jī)書(shū)籍往往和計(jì)算機(jī)科學(xué)聯(lián)系在一起,而且經(jīng)典往往需要10年甚至更長(zhǎng)的時(shí)間進(jìn)行考驗(yàn);

注重實(shí)踐,而非理論:所以這個(gè)書(shū)單不會(huì)包含過(guò)于原理性的書(shū)籍;

入門(mén)—必讀—延伸:必讀書(shū)籍的問(wèn)題在于:1. 大多不適合入門(mén);2. 不夠全面??紤]到?jīng)]有入門(mén)閱讀和延伸閱讀的閱讀列表是不完整的——所以書(shū)單中每個(gè)關(guān)鍵概念都會(huì)由一本入門(mén)書(shū)籍,一本必讀書(shū)籍(有時(shí)入門(mén)書(shū)籍和必讀書(shū)籍是同一本),和若干延伸閱讀書(shū)籍所構(gòu)成。

概念選擇標(biāo)準(zhǔn)

全面:全面覆蓋軟件開(kāi)發(fā)中重要的概念;

通用:適用于每一個(gè)程序員,和領(lǐng)域特定方向無(wú)關(guān);

注重基礎(chǔ),但不過(guò)于深入:優(yōu)秀的程序員需要良好的計(jì)算機(jī)科學(xué)基礎(chǔ),但程序員并沒(méi)必要掌握過(guò)于深入的計(jì)算機(jī)科學(xué)知識(shí)。以算法為例,每個(gè)程序員都應(yīng)該掌握排序、鏈表、棧以及隊(duì)列這些基本數(shù)據(jù)結(jié)構(gòu)和算法,但計(jì)算幾何、線性規(guī)劃和網(wǎng)絡(luò)流這些算法可能就不是每個(gè)程序員都需要掌握的了;

通過(guò)這幾個(gè)標(biāo)準(zhǔn),我把程序員應(yīng)掌握的關(guān)鍵概念分為程序設(shè)計(jì),軟件開(kāi)發(fā),以及個(gè)人成長(zhǎng)三大類(lèi),每一大類(lèi)均由若干關(guān)鍵概念組成。

點(diǎn)個(gè)關(guān)注不迷路~C語(yǔ)言/C++/Linux服務(wù)器開(kāi)發(fā)等技術(shù)點(diǎn) 持續(xù)為大家分享~私信我回復(fù)“資料”有驚喜小彩蛋~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 又是一年畢業(yè)季,每每到這個(gè)時(shí)候小編就會(huì)感慨時(shí)間過(guò)得真快,不知不覺(jué)我已經(jīng)變成當(dāng)初我剛畢業(yè)那會(huì)眼中的一群“老前輩”了。...
    易懂程序猿閱讀 235評(píng)論 0 0
  • 回顧我的職業(yè)生涯,從事編程工作將近5年。剛開(kāi)始感覺(jué)很充實(shí)很快樂(lè),因?yàn)榭偸怯凶霾煌甑捻?xiàng)目,總是接觸新的技術(shù),操作數(shù)據(jù)...
    奶茶007閱讀 347評(píng)論 0 2
  • 咱們接著“谷歌小哥出品程序員必讀書(shū)單1.0(上)”繼續(xù)說(shuō)。 軟件開(kāi)發(fā) 1. 編程實(shí)踐 Brian Kernigha...
    圖靈教育閱讀 71,168評(píng)論 1 124
  • 1、來(lái)自網(wǎng)易:為了找到自己滿意的工作,牛牛收集了每種工作的難度和報(bào)酬。牛牛選工作的標(biāo)準(zhǔn)是在難度不超過(guò)自身能力值的情...
    取名廢同學(xué)閱讀 561評(píng)論 0 0
  • 夜深人靜時(shí),最適合思考,更適合回憶。 此時(shí),你們?cè)诟墒裁矗?孩子可否睡了?還在忙著明天的數(shù)據(jù)嗎?還在餐桌上應(yīng)酬嗎?...
    澍芽?jī)?/span>閱讀 330評(píng)論 0 0

友情鏈接更多精彩內(nèi)容