每個程式設計師都必讀的10篇文章

deepinmind發表於2014-05-15

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

  程式設計師必知之記憶體篇

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

  每個電腦科學家都必知之浮點數運算

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

  每個程式設計師必知之Unicode篇

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

  每個程式設計師必知之時間篇

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

  每個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開發人員必讀的文章 。

  每個程式設計師必知之WEB開發

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

  每個程式設計師必知之SEO

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

  C程式必知的未定義行為

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

  程式設計師必知之網路

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

  Java程式設計師必知之String

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

  程式設計師必知之安全

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

  程式設計師必知之延遲時間

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

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

  譯註:我覺得還有一個必讀的,就是數數,這裡一共是12篇了。。有幾篇訪問不了的,我也搬運到自己的部落格上了。

  原文連結:10-articles-every-programmer-must-read

相關文章