不管你是剛?cè)腴T的新手,還是已經(jīng)有了一定經(jīng)驗(yàn)的程序員,你一定早晚會(huì)意識(shí)到,在某一個(gè)崗位上干了多長(zhǎng)時(shí)間,并不是一個(gè)評(píng)判程序員是否優(yōu)秀的好指標(biāo)——因?yàn)檫@既不能反映出一個(gè)人的真實(shí)水平,也不能真正體現(xiàn)出ta工作經(jīng)驗(yàn)的多少(是,這句話該說給hr聽??)。 一個(gè)人能否在編程領(lǐng)域獲得成功,最具有決定性的因素,其實(shí)就隱藏在你業(yè)余時(shí)間所做的事情中,隱藏在你如何主動(dòng)學(xué)習(xí)新知識(shí)的過程中。 要想提高你的編程技術(shù),有許多很棒的辦法,比如結(jié)對(duì)編程、在線學(xué)習(xí)、線下聚會(huì),以及額外的工作經(jīng)驗(yàn)、項(xiàng)目構(gòu)建經(jīng)驗(yàn),還有找一個(gè)好導(dǎo)師。 我個(gè)人最喜歡的學(xué)習(xí)方式,是翻開一本好書,品味字里行間閃爍著的智慧光芒,吸收多年經(jīng)驗(yàn)積淀而成的寶貴知識(shí)。 以下的九本書,是我個(gè)人強(qiáng)烈推薦給每一位開發(fā)者(特別是新手)值得一讀的好書。這些書在業(yè)內(nèi)都已經(jīng)產(chǎn)生了強(qiáng)烈的反響,有著廣泛的好評(píng),有可能對(duì)你的工作、學(xué)習(xí)都產(chǎn)生深遠(yuǎn)的影響。 和你想的不一樣,這些書并不都是專注在紛繁復(fù)雜的技術(shù)細(xì)節(jié)上,而是更多地傾向于提供一些實(shí)用的引導(dǎo),幫助你處理好人際關(guān)系、提升專業(yè)水平,最終成為一名優(yōu)秀的開發(fā)者。 譯注:原作者 Khalil Stemmler 推薦的書籍均為英文版,為方便國(guó)內(nèi)讀者,譯者在亞馬遜等站尋找評(píng)分較高的對(duì)應(yīng)中文譯本,但還是鼓勵(lì)有能力的讀者閱讀原版。 1. 代碼整潔之道Clean Code 中文版: amazon.cn/dp/B0031M9GHC 在克服了編程的基本挑戰(zhàn)并熟悉如何編寫代碼來解決問題之后,看看這本書是個(gè)好主意。事實(shí)證明,第一次讓代碼正常工作實(shí)際上只是最容易的那部分。而困難的部分是讓你的代碼容易閱讀,以便其他人能夠理解它并在將來對(duì)它進(jìn)行改進(jìn)。 想想看,如果你不得不閱讀像下面這樣的代碼,那是一種什么體驗(yàn)? function calculateIt (a, b) { if (a.delta < b.element.x) { var x = b.element.x; return x - b.delta.x } else { var y = b.next.y; var h = b.element.y * 2; return y - h } } 源碼見:hell-code.js 誰知道它到底是做什么的。像這樣的代碼可能會(huì)起作用,但是當(dāng)我們需要修改它時(shí),我們不得不希望代碼的原作者既沒有跳槽,也沒有進(jìn) ICU,并祈禱他們能夠以某種方式“破譯”自己多年前寫下的東西。 如果不小心注意編寫易于閱讀和維護(hù)的代碼,我們最終會(huì)得到像這樣“讓人不敢碰”的代碼。如果某天它不工作了,那我們就會(huì)有大麻煩了。 鮑勃大叔的《代碼整潔之道》將教你認(rèn)識(shí)干凈的代碼,鑒別出“壞”的代碼,并教你如何將其轉(zhuǎn)換為優(yōu)秀的代碼。像這樣的任務(wù)對(duì)大多數(shù)人來說聽起來微不足道,但當(dāng)你將這幾條簡(jiǎn)潔的軟件設(shè)計(jì)原則轉(zhuǎn)化為工作習(xí)慣之后,這些習(xí)慣能讓你更加高效地編寫出更專業(yè)和可擴(kuò)展的代碼。 你知道,我們就是軟件行業(yè)的手工匠人。構(gòu)建軟件的原則,和建設(shè)房子的原則沒有什么太大差別——我們都需要注意細(xì)節(jié),否則如果第一次沒有做好,將來都要花費(fèi)昂貴的代價(jià)去修復(fù)之前犯下的錯(cuò)誤。 2. 代碼整潔之道:程序員的職業(yè)素養(yǎng)The Clean Coder 中文版:amazon.cn/dp/B01LZJ8L9J 這本書其實(shí)并不算是一本技術(shù)書籍,因?yàn)樗且槐窘棠闳绾纬蔀檫@個(gè)行業(yè)專業(yè)人士的書。專業(yè)人士在面對(duì)挑戰(zhàn)、不確定性和壓力時(shí),將繼續(xù)將軟件開發(fā)視為一種手工藝,并將不懈地堅(jiān)持他們的專業(yè)價(jià)值觀。 這本書在評(píng)估、重構(gòu)、測(cè)試、處理沖突、時(shí)間表、避免職業(yè)倦怠等方面提供了大量實(shí)用建議。這些都是來自幾十年來一直在做這些事情的人的,值得信賴的建議。 它教給我們的最棒的東西之一,就是如何做一名誠(chéng)信的開發(fā)者,何時(shí)該說“不”以及如何去說。 亞馬遜網(wǎng)站的編輯推薦語是:“匯聚編程大師40余年編程生涯的心得體會(huì)”。 3. 重構(gòu):改善既有代碼的設(shè)計(jì)Refactoring 中文版: amazon.cn/dp/B07PKP87K5 馬丁·福勒是我最喜歡的作家之一。原因之一是他很搞笑,他編寫的軟件書籍無疑有著個(gè)人的強(qiáng)烈風(fēng)格。另一個(gè)原因是他非常擅長(zhǎng)用簡(jiǎn)單的方式來解釋復(fù)雜的主題,而不會(huì)讓你疲憊不堪。 Ruby on Rails 的作者曾經(jīng)說過,你應(yīng)該“在寫下另一行代碼之前先閱讀”《重構(gòu)》這本書。在書中,福勒會(huì)指導(dǎo)你重構(gòu)一個(gè)簡(jiǎn)單的應(yīng)用程序,以此向你介紹他在多年的職業(yè)生涯中積累和歸納出的一些技巧。 福勒在書中展示了如何在寫代碼和重構(gòu)代碼之間進(jìn)行切換,應(yīng)該多久提交一次代碼以及何時(shí)編寫測(cè)試等經(jīng)驗(yàn)之談。強(qiáng)烈推薦。本書的最新版本已更新,添加了大量 JavaScript 的范例,這對(duì)我來說是一個(gè)額外的加分項(xiàng),因?yàn)?JavaScript 是我最喜歡的語言。 4. 設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)Design Patterns: Elements of Reusable Object-Oriented Software 中文版: amazon.cn/dp/B001130JN8 這是關(guān)于設(shè)計(jì)模式的開創(chuàng)性著作。你問什么是設(shè)計(jì)模式?設(shè)計(jì)模式是針對(duì)軟件開發(fā)中的常見問題,提出廣為人知的解決方案。如果你熟悉這些模式,你將能夠大大減少為這些問題提出解決方案所需的時(shí)間。 如果你熟悉設(shè)計(jì)模式,你還能與其他開發(fā)人員更加有效地溝通這些問題的解決方案。 “沒錯(cuò),我就是用一個(gè)門面對(duì)象覆蓋了數(shù)據(jù)庫適配器從策略模式中載入的東西。” 對(duì),這本書是有點(diǎn)年頭了。但它仍然是最棒的參考書籍之一。如果你希望閱讀一些關(guān)于這個(gè)主題的更新、更友好的書籍,我也推薦你閱讀 Eric Freeman 的《深入淺出設(shè)計(jì)模式》(Head First Design Patterns: A Brain-Friendly Guide)。 5. 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):軟件核心復(fù)雜性應(yīng)對(duì)之道Domain-Driven Design: Tackling Complexity in the Heart of Software 中文版:amazon.cn/dp/B01GZ6T12K 為了使大型代碼庫得以繼續(xù)擴(kuò)展,我們需要在邏輯上將代碼分成不同的部分。我們的想法是以某種方式對(duì)代碼進(jìn)行分區(qū),使得單獨(dú)的團(tuán)隊(duì)可以在不影響其他任何人的情況下處理系統(tǒng)的不同部分。 能夠讓代碼庫往這個(gè)方向發(fā)展,其基本概念被稱作“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”(Domain-Driven Design,DDD)。這是一種軟件開發(fā)方法,我們將存在于“問題域”(現(xiàn)實(shí)世界)中的問題建模到若干個(gè)解決方案域之中。 當(dāng)代碼庫大到一定程度的時(shí)候,DDD 就顯得尤為重要了。許多大型企業(yè)公司采用 DDD 的方法,以便分配不同的團(tuán)隊(duì)到公司代碼庫的某些部分。 貧血模型很快就變得臃腫而繁瑣。(圖片來自 Vladimir Khorikov 的課程《將貧血領(lǐng)域模型重構(gòu)成富有模型》) 埃里克·埃文斯創(chuàng)造了“無所不在的語言(Ubiquitous Language)”這一術(shù)語,這個(gè)詞用于在開發(fā)人員、領(lǐng)域?qū)<乙约邦I(lǐng)域中的任何其他用戶或參與者之間建立一種通用的、全覆蓋的“語言”。通過使用這種無所不在的語言進(jìn)行溝通,就可以確保最重要的領(lǐng)域概念得到很好的理解,并在軟件中得到實(shí)現(xiàn)。 這本書比我要介紹的其他書更具技術(shù)性,也更有挑戰(zhàn)。但如果你能熟悉這些概念,就將充分了解當(dāng)今最大的那些企業(yè)是如何保持代碼庫的可管理性和可擴(kuò)展性。 最后,這本書是因?yàn)榉饷媸撬{(lán)色的,往往被人稱為藍(lán)皮書。如果你覺得它對(duì)新手來說過于艱深,你也可以試試弗農(nóng) (Vaughn Vernon) 的《實(shí)現(xiàn)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》——這本書在業(yè)內(nèi)被稱為“紅皮書”,它用更加簡(jiǎn)明易懂的方式描述了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的概念及其實(shí)現(xiàn)方式。 6. 軟技能:代碼之外的生存指南Soft Skills: The Software Developer’s Life Manual 中文版:amazon.cn/dp/B01IB086H4 作為軟件開發(fā)人員,我們應(yīng)該努力保持一種完美的平衡狀態(tài)。不幸的是,大多數(shù)人并沒有把“平衡”這種特質(zhì)和軟件開發(fā)者聯(lián)系在一起。而事實(shí)上,這種身心的平衡對(duì)一個(gè)人的學(xué)習(xí)、健康和整體狀態(tài)都是非常重要的。 “軟技能”是關(guān)于實(shí)際編程技術(shù)之外的重要能力,比如創(chuàng)造力、職業(yè)目標(biāo)和個(gè)人理財(cái)?shù)?。作者還討論了個(gè)人投資,如何在 33 歲退休,健身中的額外技巧,以及如何維持人際關(guān)系——這些可不是你在編程社區(qū)里能得到解決的問題。 它獨(dú)特的章節(jié)編寫方式使得每章的內(nèi)容相對(duì)獨(dú)立,你可以任意選擇適合你的章節(jié)開始閱讀。 7. 架構(gòu)整潔之道Clean Architecture 中文版:amazon.cn/dp/B07HN66S4D 啥?鮑勃大叔寫的書就是好,不行嗎? 在學(xué)校里,我們往往過份關(guān)注算法,而不太關(guān)注軟件設(shè)計(jì)原則。我認(rèn)為這可不是件好事,因?yàn)閷?shí)際上,你并不會(huì)經(jīng)常遇到那么多算法挑戰(zhàn)。相反,更常見的是,你將面對(duì)的是用模塊化、靈活、可讀的方式來構(gòu)建代碼,以及在需求變化時(shí)快速添加新功能的種種挑戰(zhàn)。 而《架構(gòu)整潔之道》中介紹的基本軟件設(shè)計(jì)原則和模式,正是你能夠用來應(yīng)對(duì)這些挑戰(zhàn)的制勝秘籍。 本書中提出的原則中,最棒的幾點(diǎn)是關(guān)于依賴產(chǎn)生的成本,穩(wěn)定代碼與非穩(wěn)定代碼的對(duì)比,以及“SOLID”原則:編寫代碼以使其更易理解,更靈活也更易維護(hù)的方法。 本書的其他部分中,非常有用的是“尖叫的架構(gòu)”和“按組件打包”這幾個(gè)概念,它們將教會(huì)你如何更有效地組織你的模塊,這樣當(dāng)別人閱讀你的項(xiàng)目代碼時(shí),這個(gè)架構(gòu)在某種意義上會(huì)向讀者“尖叫”出項(xiàng)目的全部情況。 本書與“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”密切相關(guān),通過使用“分層架構(gòu)”或鮑勃大叔稱之為“整潔”的架構(gòu)(也就是所謂“端口”和“適配器”)來實(shí)現(xiàn)。對(duì)于那些想要提升自己架構(gòu)知識(shí)體系,學(xué)習(xí)如何有效地在高層對(duì)系統(tǒng)進(jìn)行設(shè)計(jì),同時(shí)又能在細(xì)節(jié)層面上優(yōu)雅地處理依賴的人來說,這是一本很棒的書。 8. 高效的工程師The Effective Engineer 本書未找到中譯本。 時(shí)間是我們生命中最寶貴的資產(chǎn),我們應(yīng)該將不斷提高時(shí)間利用率作為目標(biāo)。但在現(xiàn)實(shí)中,我們往往很容易陷入困境,花費(fèi)大量時(shí)間去修復(fù)錯(cuò)誤、浪費(fèi)精力、做重復(fù)的工作,等等。而《高效的工程師》就是教你如何在更短的時(shí)間內(nèi)完成更多工作,并避免重復(fù)勞動(dòng)。 我們可以通過一個(gè)名為“杠桿(leverage)”的機(jī)制來減少在重復(fù)性任務(wù)上浪費(fèi)的時(shí)間和精力。 “杠桿”可以幫助你鑒別日常的各項(xiàng)事務(wù),挑出那些投入產(chǎn)出比例最差的工作。它是一個(gè)可以應(yīng)用于任何事情的機(jī)制,無論是學(xué)習(xí)、編程、調(diào)試……沒錯(cuò),任何事情! 9. 程序員修煉之道:從小工到專家The Pragmatic Programmer 中文版:amazon.cn/dp/B004GV08CY 《程序員修煉之道》是一本應(yīng)該放在各級(jí)開發(fā)人員桌面上的書,它以深入淺出、易于理解而著稱。 安德魯和大衛(wèi)都是程序員,他們不僅在自己的事情上花了很多年時(shí)間,還不斷地關(guān)注他們正在做的事情,并努力確定是否可以做得更好。 本書凝聚了他們多年的經(jīng)驗(yàn)和總結(jié),介紹了程序員職業(yè)生涯中要遵循的一些基本哲學(xué)理念,比如“程序員應(yīng)該有‘要么只做一次,要么將它自動(dòng)化’的理念”。 它包括了許多簡(jiǎn)明又詳盡的建議,在編寫另一行代碼或啟動(dòng)新項(xiàng)目之前,你應(yīng)該隨身攜帶,并謹(jǐn)記在心。 結(jié)語作為新手程序員或初級(jí)開發(fā)者,書籍確實(shí)是提高知識(shí)和技能的最佳工具,還往往具有很高的投資回報(bào)率——你知道學(xué)好編程可以賺很多錢嗎??? 這些只是我個(gè)人認(rèn)為 2019 年最好的一些書籍。它們并不是最新的,但那不過是因?yàn)椤熬幊獭边@件事多年來一直保持著相同的一般哲學(xué)和最佳的實(shí)踐做法。作為一名教授,我曾經(jīng)不得不說,“你只需閱讀這些該死的手冊(cè),就可以在這個(gè)行業(yè)賺很多錢”。 那么,親愛的讀者,你讀過這些書嗎?有沒有什么看法可以跟我們分享?如果你發(fā)現(xiàn)了其他未提及的好書,歡迎留言告訴我! 拓展閱讀除了上面的 9 本書之外,這里還有一些關(guān)于類似主題的額外文章。如果你沒有辦法騰出時(shí)間精讀上面的這些書籍(我強(qiáng)烈建議你讀一讀),那你也可以通過下面這些文章對(duì)這些重要概念有所理解,希望這在你的程序員之路上能有所助益。
繼續(xù)努力,繼續(xù)成長(zhǎng),并祝你時(shí)刻樂在其中!加油! 原作: Khalil Stemmler 投稿:歐剃 原作: Khalil Stemmler 投稿:歐剃
來源: medium.freecodecamp.org |
|