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

作爲一名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篇了。。有幾篇訪問不了的,我也搬運到自己的博客上了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章