每個程序員都必讀的12篇文章

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

  英文原文:10 Articles Every Programmer Must Read

  作為一名 Java 程序員和軟件開發人員,那些每個程序員都應該知道的 XXX 的文章教會了我不少東西,它們提供了某個特定領域的一些實用的并且有深度的信息,這些東西通常很難找到。在我學習的過程中我讀到過許多非常有用的文章,我把它們添加到了書簽里,方便以后閱讀或者引用。我個人認為所有開發人員都能從這些文章中受益,因此我也寫了篇“每個程序員都應該了解的”文章,準備分享給你們。這是我的個人收藏。在這篇文章中,你會看到每個程序員都應該了解的一些經典文章,涵蓋了內存,unicode,浮點數,網絡,面向對象設計,時間,URL 編碼,字符串等話題。這個列表對初學者和新手來說非常重要,因為他們現在缺的正是實戰的經驗。而這些文章正好是實踐相關的,他們可以從中學到很多東西。在職業生涯的初級,早點了解一些基礎的知識有助于今后避免犯錯,這些坑已經被其他的程序員和軟件開發人員在他們學習的過程中踩過了。你可能還搞不明白浮點數的一些細節,或者被內存的細節弄得暈頭轉向,不過將這份列表保留在手邊還是很有必要的,在適當的時候可以時不時的參考下。祝你好運,希望你能喜歡這些文章。順便提一句,如果有任何的程序員必讀系列的文章沒在這個列表中,別忘了分享一下。

  1、程序員必知之內存篇

  這是篇非常經典的文章,它將會帶領你走入內存的各個方面,有老的,也有新的,有知道的,也有不知道的。盡管內存十分常見,無處不在,但并不是每個程序員都足夠了解它。如果你正在編寫高性能的應用程序的話,了解現代系統中的內存尤為重要。硬件設計師們帶來了更復雜的內存處理及加速的技術,比如說 CPU 緩存,但如果離開了程序員它們也無法發揮出最大的價值。我仍在閱讀這篇文章,很難說清楚我到底從中學到了多少關于隨機訪問內存(RAM),CPU 緩存,包括 1 級,2 級緩存,不同類型的內存,直接內存訪問,內存控制器設計及普通內存的知識。簡而言之,它是各個層次的程序員都必讀的文章。

  2、每個計算機科學家都必知之浮點數運算

  浮點數運算是一個非常有技術含量的話題,不太容易掌握。許多 Java 程序員都不清楚使用==操作符比較 float/double 類型的話到底出現什么問題。許多人在使用 float/double 進行貨幣計算的時候經常會犯錯。這篇文章是這一系列中的精華,所有的軟件開發人員都應該讀一下。隨著你經驗的增長,你肯定想去深入了解一些常見的東西的細節,浮點數運算就是其中之一。作為一名 Java 高級開發人員,你必須了解如何進行貨幣運算,何時使用 float,double 或者 BigDecimal,如何對浮點數進行舍入運算等等。就算你知道了浮點數運算的一些基礎知識,讀下這篇文章,你肯定還會學到一些新的東西。

  3、每個程序員必知之 Unicode 篇

  字符編碼是另一個許多程序員痛苦掙扎的領域,”每一個程序員都絕對絕對應該了解 Unicode 以及字符集(不許找任何借口!)“填補了這一空白。標注一下,是的,這就是這篇文章的標題。它是由 stackoverflow.com 的創始人之一,Joel Spolsky 所寫的。Joel10 年前就在他的博客上發表了這篇文章,不過對于現在而言仍然適用。這篇文章會告訴你什么是 Unicode,什么是字符編碼,字符是如何通過字節來表示的等等。這篇文章最贊的一點就是它的語言及行文,盡管你根本不知道什么是 Unicode,你也能夠很容易地看懂。一句話,這又是一篇程序員,碼農,軟件工程師必讀的文章。

  4、每個程序員必知之時間篇

  除了字符編碼外,時間和日期又是另一個程序員經常栽倒的領域,包括我自己在內。甚至是高級開發人員也會被格林尼治標準時間(GMT),世界標準時間(UTC),夏令時,閏秒這些東西搞的死去活來。坦白地說,在處理時區這個問題上,很難不踩一些坑,更別說再加上夏令時什么的。如果你想要試錯法的話則更糟糕,因為這么做永遠也解決不了你的問題。這里有許多可能出錯或者產生誤解的地方。比方說,日期是否包括時區可能就會困擾到你,將 UNIX 時間轉化成其它的時區可能會讓你崩潰,你還是忘了時鐘同步和延遲這些事吧。我希望讀完這篇經典的文章后,你的許多關于時間的誤解都能夠消除,自己能夠鞏固一些關于日期的基礎常識。

  5、每個 WEB 開發人員必知之 URL 編碼篇

  這篇文章介紹了 Uniform Resource Locator (URL)編碼中的一些常見的誤解,然后試圖闡明什么是 HTTP 的 URL 編碼,最后列舉了一些常見的錯誤及解決方案。盡管這篇文章的內容并不特定于某種編程語言,但它是用 Java 來進行問題的描述,并修復 URL 編碼中存在的問題。你會學習到 URL 的基礎語法,HTTP 及其它協議中通用的 URL 格式。這篇文章還介紹了 URL 中的一些常見錯誤,比如字符編碼,URL 不同部分的保留字符,以及 URL 編解碼問題。如果你是一名 Java 開發人員,你會學習到如何在 Java 中正確地處理 URL,如何構造 URL,以及如何使用 Apache Common Http client 庫。最后它還提供了一些最佳實踐的建議,比如你應該在構建 URL 的時候進行編碼,確保你的重寫 URL 的過濾器正確地處理了 URL,等等。這是任何 WEB 開發人員必讀的文章 。

  6、每個程序員必知之 WEB 開發

  這是 programmers.stackexchange.com 上的一篇非常有趣的文章,它講的是程序員在將網站對外發布之前需要實現的技術細節。這包括接口設計及用戶體驗,安全性,WEB 標準,性能,搜索引擎優化(SEO),以及一些重要的資源。當今世界嚴重地依賴于互聯網,很多程序員都有自己的網站,通常是一個博客。這篇文章中學到的東西可能對你的專業沒有幫助,但它對你個人的事情肯定會有所幫助。你會了解到一些關鍵的技術,比如 HTML,HTTP,XML,CSS,JavaScript,瀏覽器兼容性,減少網站加載時間的技巧,XML 站點地圖,W3C 規范,以及許多其它的關鍵的細節。

  7、每個程序員必知之 SEO

  這對 WEB 開發人員,程序員,博主而言又是一篇很重要的文章。由于很多程序員同時也是博主,你無法對 SEO 視而不見,學一個搜索引擎優化的基礎知識還是非常重要的,這能幫助 Google 檢索到你的內容并推薦給其它程序員。在今天這個網絡互聯的時代,沒有任何公司可以脫離 WEB 而存在,SEO 變得尤為重要。如果你有一家初創企業在賣一些產品,那么 SEO 就是你要關注的事情。所有程序員,尤其是 WEB 開發人員,都可以從這篇文章中受益良多。記住,SEO 是一個很寬泛變化的題目,不同的搜索引擎,比如 Google,Yahoo 等,它們的 SEO 都各不相同。因此,要想掌握這項技能你得經常更新你的知識庫。

  8、C程序必知的未定義行為

  C 語言有一個未定義行為的概念。未定義行為是一個很寬泛的主題,它有許多細微的差別,這就是為什么我喜歡 Java 的一個原因,沒有這么多的未定義行為,沒有這么多的困惑,更穩定也更消停。很多人看起來很自然的事情在C里其實是未定義的行為,這也是程序 BUG 的一個常見的來源。除此之外,C中的任何未定義行為都由具體實現來決定(編譯器和運行時),它們生成的代碼會格式化你硬盤,做一些意想不到的事情,甚至更糟。讀下這篇文章,到未定義行為的海洋里遨游吧。

  9、程序員必知之網絡

  這段話摘自這篇文章,”你是一個程序員。你有想過多玩家的游戲是如何實現的嗎?從外面看起來它是:兩個或多個玩家通過網絡共享相同的經驗,就像他們在同一個虛擬世界中一樣。不過作為程序員,我們知道底下的真相和你看到的東西是有所區別的。事實上這都只是一個錯覺“。這是篇關于網絡的非常有趣的文章,它是為游戲開發人員而寫的,不過我認為每個程序開發人員都能從中受益。

  10、Java 程序員必知之 String

  這是我自己關于 java.lang.String 的一篇文章,我個人認為每個 Java 開發人員都應該了解一下。String 在日常的 Java 開發中非常重要,這就是為什么每個 Java 程序員都應該對它非常了解。這篇文章涉及到了 String 的許多重要的領域,包括 String 池,字符串常量,使用==和 equals 比較字符串,將字節數組轉化成 String,為什么字符串是不可變的,如何正確拼接字符串,等等。高級程序員應該都知道這些東西了,不過回顧一下也是不錯的。

  11、程序員必知之安全

  有一個計算機系的學生在 StackOverFlow 上問了這個問題。就像我們了解到的一些常見編程概念比如操作系統,算法,數據結構,計算機體系結構,以及其它東西一樣,了解安全也同樣重要。安全是一個很大的話題,包括加密解密,SSL,WEB 安全,混淆,認證,授權,等等,它是每個程序員都應該了解的基礎知識。剛進這行的時候,我個人對安全這塊還不是很了解,這時候我就開始基于 Servlet/JSP 寫一些的 Java WEB 程序,后來我才了解到 EWB 安全性以及一些安全威脅比如 SQL 注入,拒絕服務,XML 注入,跨站腳本,等等。作為一名 Java 開發人員,我現在遵循 fortify, PMP,以及其它一些靜態代碼分析器提供的 Java 安全編碼規范進行編碼。這篇文章是關于安全這個主題的一個很好的合集,不管你現在還寫不寫代碼,這些資源對你來說都非常有用。

  12、程序員必知之延遲時間

  這篇文章是一份額外的福利,但也是每個程序員都應該讀的。不管用的是什么語言,Java 還是 C++ 都好,要寫出高性能的應用程序,你都得了解延遲時間的基礎常識,比如從內存中讀取一個變量需要多久,從一級緩存中讀取又需要多久,二級緩存呢,SSD 硬盤中隨機讀又需要多久,還有要是從磁盤中讀呢?互斥鎖的加鎖解鎖需要多長時間,從一個城市發送一個數據包到另一個城市需要多長時間,在同一個數據中心又需要多久?這些延遲的數字是獨立于任何編程語言的,開發人員必須要想寫高頻低延遲的應用程序,它們是核心知識庫中的一部分。這篇文章還有一個好消息就是,它會告訴你這些年以來這些延遲時間的變化。你可以看到 2006 年的延遲時間是多少,而現在又是多少。

  這就是所有程序員必讀文章的列表。看到這些文章的標題,每個程序員都應該知道的 XXX,你能了解到關于某個主題的一些比較有深度的知識。坦白說程序員有太多東西要學了,像學習 Java 語言這種只是冰山的一角,但并不是所有人都有熱情去學習。寫程序是一份很有挑戰的工作,在你的職業生涯中,能幫忙到你的就是這些基礎知識,比如,內存,Unicode,浮點數,時間,安全,這些對任何程序員來說都非常重要。有些文章是和語言相關的,比如我自己那篇關于 String 的文章,還有每個C程序員都應該了解的未定義行為,不過對于許多初學者來說學習一下也有好處。

  譯注:我覺得還有一個必讀的,就是數數,這里一共是 12 篇了...有幾篇訪問不了的,我也搬運到自己的博客上了。


網載 2014-07-03 12:12:51

[新一篇] 不朽傳奇-云計算技術背后的那些天才程序員:Qemu的作者法布里斯貝拉

[舊一篇] 你的意識到底來自哪里?
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表