程式設計師必讀的十篇文章

Elaine發表於2016-12-23

作為一個Java程式設計師和軟體開發者,我從許多『關於某某每個程式設計師必知』這類文章中學到了很多東西,它們會就一個特定的話題給出很多有用有深度而且難以被發現的資訊。我在求知的過程中遇到過一些很有用的文章,並將它們存為書籤用於日後參考和重複閱讀。

個人認為所有程式設計師都能從中受益,這也是我寫這篇文章和跟大家分享所有這些文章的原因。這些都是從我個人書籤裡挑出來的。你將在本文中看到每個程式設計師都應該知道的經典話題,諸如記憶體、Unicode、浮點運算、網路、面對物件設計、時間、URL編碼、字串等等。因為初學者和新手的實際經驗匱乏,所以本清單對他們來說非常重要。由於大部分文章其實是從實踐中來的,所以初學者和中介軟體程式設計者可以從中獲得很多知識。同時在職業生涯早期獲得基礎知識也有助於避免犯錯,這些錯誤其他程式設計師和軟體開發者在他們學習過程中都已經解決過了。

儘管僅僅通過一次閱讀並沒那麼容易就汲取這些文章中給出的知識。你可能並不能理解浮點數的一些細節,或者被記憶體那些微妙的細節搞得頭很大,但是手頭留有這些文章列表並時不時聯絡上下文用作參考還是非常重要的。所以祝你們好運並希望你們可以享受閱讀的樂趣。同時,請記得分享其他不在這個列表中的《關於某某,每個程式設計師必知》的文章。

關於記憶體,每個程式設計師必知

這是一篇很經典的文章,它展示了關於記憶體的方方面面,老的、新的、已知的、未知的。儘管記憶體問題相當普遍無處不在,也並不是每個程式設計師都足夠了解它。如果你正在寫高效能應用,關於現代系統中記憶體的知識尤顯重要。硬體設計者會遇到更多複雜的記憶體處理和加速技術,比如CPU快取,但是這些在沒有程式設計師幫助的情況下並不能得到最優效能。我還在閱讀這篇文章,我也無法告訴你從中我學到了多少關於諸如RAM、CPU快取之類的知識。L1快取和L2快取、不同型別的記憶體、DMA、記憶體控制器涉及和通用記憶體。簡而言之,這是一篇所有經驗層次程式設計師都必讀的文章。

關於浮點運算的每個電腦科學家必知

浮點運算是一個很微妙的東西,且並不容易掌控。甚至很多Java程式設計師都不知道當使用==運算子來做float或double型別的數值比較時會出什麼錯。我們中的很多人在用float和double型別做貨幣運算時都經常搞錯。本文是此類文章中另一篇佳作,也是所有軟體開發者和程式設計師必讀文章。隨著經驗增長,你期望瞭解普通問題的細節,而浮點運算就是這些細節中的一個。作為一個高階Java程式設計師,你必須知道怎麼用float、double或是BigDecimal類做貨幣運算,怎麼對浮點數取整,等等。即使你知道浮點運算的基礎,通過閱讀本文你也會學到一些新的東西。

關於Unicode的每個開發者必知

字元編碼是另一個讓很多程式設計師糾結的領域,《每個軟體開發者絕對必須要無理由知道的關於Unicode和字符集的最基本常識》一文旨在填補這個領域知識的空白。附註一下,沒錯,這就是這篇文章完整的標題。它的作者是statckoverflow.com的建立者之一————Joel Spolsky。Joel差不多在十年前就發表了這篇博文,而今看來它仍然適用於當前情況。本文將告訴你什麼是Unicode,什麼是字元編碼,字元是如何用位元組表示的,以及其他許多許多。這篇文章最讚的部分是它的表達方式(語言和流暢性),即使你對Unicode一無所知,你也可以無障礙閱讀。總之,這是一篇對所有程式設計師、程式設計者和軟體工程師而言更重要的必讀文章。

關於時間,每個程式設計師都應瞭解的》(伯樂線上 2013年1月翻譯)

在字元編碼以外,時間和日期又是另一個讓包括我自己在內的很多程式設計師糾結的領域。即使是高階開發者都會被GMT、UTC和夏令時,以及閏秒搞暈。坦白說,很難做到在處理時區問題時完全不犯錯誤,處理夏令時差以及它帶來的影響同樣也不容易。如果你用試錯的方法時問題會更糟,因為這個辦法永遠無法幫你解決這個問題。有多少可能出錯的地方,就有多少會發生誤解的事。不管日期是否包含時區可以像地獄般把你搞混,將UNIX時間轉化為其他時區會讓你崩潰,從而忘記時鐘同步和延時。我希望通過閱讀這篇經典的文章可以消除你們對於時間的很多誤解,可以打好關於時間的基礎。

關於 URL 編碼,每個開發者必須知道的

本文描述了一些大家對於URL編碼的一般誤解,在給出常見的問題及其解決方案前,先講了HTTP的url編碼。雖然本文並非針對某一具體的程式語言,它還是以Java來說明問題,並解釋瞭如何在不同層次的Java web應用中解決URL編碼的問題。你回學到URL語法基礎,HTTP以及其他協議的通用URL語法。本文還闡述了URL的常見陷阱,比如字元編碼、URL不同部分中的保留字元,以及URL編解碼問題。如果你是一個Java程式設計師,你也將學會如何在Java應用中正確處理URL,如何構造URL和使用Apache CommonsHTTP客戶端庫。最後它還給出了最好的練習和處理URL的建議,比如應該在建URL的時候對URL編碼,保證URL重寫濾波器可以正確處理URL,以及其他很多很多。總之,這事一篇任何web開發者和程式設計師必讀的文章。

關於Web開發的每個程式設計師必知

程式設計師和軟體開發者必讀文章。本文來自 stack exchange,是一篇每個程式設計師在釋出站點前關於web應用需要學會的技術細節的文章。文章涉及介面設計、使用者體驗、安全、web標準、效能、搜尋引擎優化、相關技術,還包含了一些重要資源。由於當今世界強烈依賴於網際網路,程式設計師有個人網站和部落格的現象很普遍,本文提供的經驗不僅僅只對你的職業有幫助,也有助於你的私人工作。你將學到所有關鍵的技術,比如HTTP、HTML、XML、CSS、JavaScript、瀏覽器相容性、降低網站載入時間的tips、XML地圖、W3C規範和一些其他的關鍵細節。

關於SEO的每個程式設計師必知

這是另一篇對web開發者、程式設計師和博主來說非常重要的文章。SEO如此重要無法被忽視,因為很多程式設計師同時也是部落格撰寫者,所以學些搜尋引擎優化基礎來讓Google搜到他們的文章並將文章展示給其他程式設計師很重要。在當今這個內聯的世界,每個公司都必須將自己展示在網上才得以倖存,由此看來,SEO顯得極其重要。如果你開辦一個公司並開始銷售商品,那麼SEO就是你需要關心的東西。所有程式設計師,尤其是web開發者,都能從本文中受益良多。記住,搜尋引擎優化是一個涉獵很廣且變化迅速的課題,而且針對不同的搜尋引擎差異很大,比如Google、Yahoo以及其他搜尋引擎。所以為了掌握這門技術你將需要經常學習新知識。

關於未定義行為的每個C程式設計師需知

C語言有一個“未定義行為”的概念。未定義行為是一個有很多細微差別的很廣泛的課題,這也是我喜歡Java語言的其中一個原因,Java的未定義行為少得多,混淆也很少,而且更加穩定和太平。C中很多看上去很合理的東西都有未定義行為,這也是程式裡出bug的常見原因。此外,C中的任一未定義行為都允許實現方式(編譯器和執行)來生成執行得很痛苦的程式碼,做一些完全不期望其發生的事,甚至更糟。這篇精彩的文章將帶你在未定義行為的海洋中遨遊。

關於網路,每個程式設計師需知

文中寫道:“你是一個程式設計師,你是否曾想知道多人遊戲是怎麼執行的?這看起來似乎很神奇:兩個以上的玩家通過網路分享同一段經歷就像是在同一個虛擬世界裡真正在一起一樣。但是作為程式設計師,我們知道事實上發生的和看到的完全不一樣。所有一切都是錯覺。”

這是一篇關於網路的趣文,目標讀者是遊戲開發者,但我認為每個程式設計師和開發者都能從中受益。

關於String,每個Java開發者需知

這是我寫的一篇關於java.lang.String的文章,我個人認為是每個Java程式設計師都需要了解的東西。String在每日的Java程式設計中很重要,所以任何Java開發者都必須瞭解這些。本文涉及了String的很多重要領域,包括string pool、string literal、用==和equals()比較String的區別、將位元組轉換為String、為什麼String是不可變的、正確拼接String,等等。高階程式設計師可能已經知道所有這些情況,但是即使這樣複習一下這些也是好的。

程式設計師都應該瞭解哪些安全知識》伯樂線上 2012年3月翻譯

這個問題是StackOverFlow上的一個電腦程式設計的學生問的。就像我們學了很多常見的程式設計概念(比如作業系統、演算法、資料結構、計算機架構等)一樣,學一下安全相關的知識也很重要。雖然安全是一個很大的課題,它涉及加密/解密、SSL、網路安全、模糊處理、身份驗證、證照授權等等,一些最基本的常識對每個程式設計師而言都是必需的。剛開始工作的時候,我個人對安全知之甚少,當開始寫基於Java web應用的Servlet/JSP的時候,才開始瞭解網路安全和一些類似SQL隱碼攻擊、拒絕服務、XML注入、跨站指令碼攻擊等的安全威脅。作為一個Java開發者,現在我開始跟一些fortify、PMP和其他靜態程式碼分析工具提供的安全Java程式設計經驗。本文是非常好的安全主題集和連結集,不管你是否在程式設計,你肯定可以從中受益。

每個程式設計師都應知的延遲數字

這是一篇額外獎勵的文章,但也是每個程式設計師必讀之文。無論用哪種程式語言,如Java或C++,為了寫出高效能的應用程式,你都應該瞭解基本的耗時數問題,比如,從記憶體、L1快取、L2快取、SSD隨機讀、硬碟中讀取變數分別需要耗費多少時長。對互斥鎖加解鎖需要花多長時間,城市間傳輸一個資料包或是同一個資料中心迴圈傳輸一次需要花多長時間。這些耗時數與程式語言無關,屬於核心知識的一部分,開發者必須寫出高效能低耗時的應用。這篇文章好在它還提供了這些耗時數在多年來演變的對比分析。你可以看到這些耗時數在2006年和今天分別是什麼樣子的。

後話

以上是所有每個程式設計師必讀文章清單。坦白說,程式設計師要學的東西太多了,學習一門程式語言,如Java,僅僅是冰山一角,但我們不都對學習充滿熱情的嗎?程式設計是一項很有挑戰的工作,在你的整個職業生涯中唯一能幫到你的就是基礎知識,如記憶體、Unicode、浮點數、時間、安全相關對任何程式設計師都很重要。很少有什麼是與特定的程式語言相關的,比如我那篇關於Java String和關於未定義行為每個C程式設計師需要些什麼的文章,但對於初學者和開發者而言仍然是很好的學習材料。

相關文章