第一篇:程序員修身之道
? 找其他開發人員合作開發。我們正處在科技歷史上第一個絕好的時代,你幾乎不用在意在哪工作、為誰工作。只要你有一個還過得去的網絡,你就可以和另外一個在世界任何角落里的人一起來完成某段程序。我知道,越來越多的有經驗的開發人員開始把他們的一部分時間投入到這種知識共享里。我的朋友Evan Light特地留出了時間來開發一個幫助Ruby愛好者合作行動的網站。我從事這樣的事情也有一段時間了。你想開發一些FLOSS程序嗎?發郵件給我,我們會幫你準備些東西。
?
?
?
?
? 閱讀經典著作:《代碼大全(第二版)》,《程序員修煉之道》,《程序設計實踐》,《設計模式》等。閱讀WikiWiki(有時也被稱作WardsWiki)。這一條怎么強調也不為過。經常我會感覺到所有我學到的真正關于編程的知識都是在瀏覽這些網站的過程中慢慢的學到的。學習別人的代碼。GitHub萬歲!如果你會一點Ruby,想從別人整理好的現成經驗入手,你可以讀一下《Best of Ruby Quiz》。參與開發者論壇。如果沒有這樣的網站,創建一個。討論問題。我不在意你認為自己是一個多么菜的菜鳥。沒有任何一種形式能比通過討論一個問題來學習這個問題更有效的方法了。寫博客。不要在意是否是原創。互聯網上很多非常有用的博客都是廣泛的搜集程序員的經驗和錯
誤,以及如何克服這些問題的博客。反省是學習過程中最重要的一件事情,寫博客能幫助你反省。會出乎你的意料,你不久就會收到你的讀者的反饋。
?
?
? 我相信你之前聽說過這一條:參與開源項目,修改其中的bug或捐獻代碼。丟硬幣。是頭像就選擇Vim,否則選擇Emacs。學習使用這些編輯器。應該讓這兩種編輯器伴隨你余下的編程生涯。強大靈活的編輯器會讓好程序員更好。多學習幾種編程語言。但起初應該先學一種語言。你應學習一種重要的語言,它能讓你對編程語
言有個大致的認識,讓你第一天就愛上編程,你需要花大量的時間去學習這種語言中的各種知識,否則你漏掉知識點或不久就會忘記。一旦你掌握了這種語言,你需要學習新的語言來驗證在第一種語言中學到的知識。盡量選擇風格迥異的語言。我曾看過Seven Languages in Seven Weeks這本書,它讓我認識了各種各樣的編程模式,很好的書。
?
具。訂閱跟你使用的語言和平臺相關的郵件新聞。人們有時會忘了,在各種博客,Hacker News,以及Twitter里,還有一個精彩的充滿討論的世界。郵件列表是一個很通用、很有用的來比較各種討論觀點的工
?
? StackOverflow是你的朋友。不要花太多的時間去研究所謂的“最好的“工具。我曾經愚蠢的花上數天或數周去為某個項目找出
一種”最好“的框架來提高開發效率。不要落入這種陷阱。當你還是一個不太熟練的程序員時,選一種大家都在用的語言和框架。重要的是當你遇到瓶頸是你知道如何處理。之后你才可以去尋找一種完美的… ?
? 尋找實習機會。以及最基本的:練習,練習,練習。在班上練,在家里練。鍛煉編程基本功。編程跟其它技術一
樣:最終,一切歸結于練習。
第二篇:程序員修身之道筆錄
程序員修身之道
第一章:
關于編程的各種話題:個人責任,曳光彈開發,調式策略,源程序設計,按合約設計,重構,無情測試。
編程是一種技藝,一種需要用心學習的技藝。
在所有的弱點中,最大的弱點就是害怕暴露弱點。
注重實效的程序員對他或她的職業生涯負責,并且不害怕承認無知和錯誤。
我們可以為我們的能力自豪,但是對于我們的缺點-----還有我們的無知和我們的錯誤----我們必須誠實。
破窗戶的故事
一扇破窗戶,只要那么一段時間不修理,就會漸漸給建筑的居民帶來一種廢棄感-------一種職權部門不關心這座建筑的感覺。于是又一扇窗戶破了。人們開始亂扔垃圾。出現了亂涂亂畫。嚴重的結構損壞開始了。在相對較短的一段時間里,建筑就被毀得超出了業主愿意修理的程度,而廢棄感變成了現實。(不要容忍破窗戶(低劣的設計、錯誤的決策、或是糟糕的代碼))
不做井里之蛙,更不做鍋里之蛙。(井里之蛙看不到外面的世界,鍋里之蛙被慢慢煮熟卻還不知道怎么死的)
早起的鳥兒有蟲吃,但是早起的蟲呢?
簡單而得體地阻止你的問題。記住你是在請求幫助,不要顯得好像是在要求對方回答。除非你能夠與他人交流,否則就算你擁有最好的主意、最漂亮的代碼、或者是最注重實效的想法,最終會毫無結果。沒有有效的交流,一個好想法就只會是一個無人關心的孤兒。
鼓勵大家通過提問來交談,或是讓他們總結你告訴他們的東西。
盤書焱 第 1 頁 2014/1/3
第三篇:中國it程序員長生不老之道
才智尚招聘網
中國it程序員長生不老之道
大學里學完計算機專業后,畢業后從事了近20年的IT。這期間每次大學同學聚會都會聽到這樣的詰問:“還在寫代碼哪?”似乎畢業后一直在寫代碼是一件丟人的事情。這個月參加了大學同學畢業20年的聚會,到會的14位計算機系的老同學,有做測試的,有做硬件維修的,有做售前的,有做售后的,有做金融的,有做國企高管的,就是沒有一個還在做編程的。雖然就我一個做軟件開發顧問,還在寫點代碼,但已經沒有一個真正意義上的程序員了??梢赃@樣說,在中國,無論是企業還是個人,都普遍認為程序員是吃青春飯的,程序員的職業生涯是很短暫的,一般也就是10年之內。
相比之下,美國就不是這樣。一個美國人,出生于1961年,從23歲開始做程序員,39歲做軟件咨詢師,43歲做公司董事,49歲做首席科學家,從50歲(即2011年1月)開始至今在Facebook做程序員,開發和優化一個用于處理消息傳輸的C++的服務器。他就是發明極限編程XP和測試驅動開發TDD的美國程序員Kent Beck。
才智尚招聘網
是什么力量驅使Kent Beck在做過了公司董事之后,還在50多歲的高齡繼續做程序員呢?這個問題還是等找機會我問問Kent本人吧。另外一方面,即使Kent回答了這個問題,對于我們的幫助也很有限,因為他是美國人,咱們是中國人,文化不同,觀念不同,環境不同,無法效仿。
那么,在中國這樣的環境下,中國程序員就不能像Kent那樣能保持程序員職業生涯“長生不老”嗎?
7歲的兒子喜歡聽小布丁里單田芳爺爺講的評書《西游記》,其中有一段美猴王尋訪長生不老之道的一段,在《西游記》第一回中,原文如下:
美猴王享樂天真,何期有三五百載。一日,與群猴喜宴之間,忽然憂惱,墮下淚來。眾猴慌忙羅拜道:“大王何為煩惱?”猴王道:“我雖在歡喜之時,卻有一點兒遠慮,故此煩惱?!北姾镉中Φ溃骸按笸鹾貌恢?!我等日日歡會,在仙山福地,古洞神州,不伏麒麟轄,不伏鳳凰管,又不伏人間王位所拘束,自由自在,乃無量之福,為何遠慮而憂也?”猴王道:“今日雖不歸人王法律,不懼禽獸威服,將來年老血衰,暗中有
才智尚招聘網
閻王老子管著,一旦身亡,可不枉生世界之中,不得久住天人之內?”眾猴聞此言,一個個掩面悲啼,俱以無常為慮。
只見那班部中,忽跳出一個通背猿猴,厲聲高叫道:“大王若是這般遠慮,真所謂道心開發也!如今五蟲之內,惟有三等名色,不伏閻王老子所管。”猴王道:“你知那三等人?”猿猴道:“乃是佛與仙與神圣三者,躲過輪回,不生不滅,與天地山川齊壽?!焙锿醯溃骸按巳呔佑诤嗡??”猿猴道:“他只在閻浮世界之中,古洞仙山之內?!焙锿趼勚?,滿心歡喜,道:“我明日就辭汝等下山,云游海角,遠涉天涯,務必訪此三者,學一個不老長生,常躲過閻君之難?!编?!這句話,頓教跳出輪回網,致使齊天大圣成。
你看,在中國傳統文化里,有三種人是能長生不老的,他們分別是“佛”、“仙”和“神圣”,分別對應著“釋”、“道”和“儒”。
中國的程序員們,如果能夠按照儒釋道闡釋的方法,在自己的程序員職業生涯中,不斷修行軟件開發的心法和手法,最后達到“佛”、“仙”和“神圣”的境界,不就成為像Kent Beck那樣長生不老的程序員了嗎?
第四篇:Java程序員修煉之道
從2002開始接觸Java學會HelloWorld這么經典的程序到如今不知不覺已經十年啦,十年中
親耳聽到過不少大牛的演講,見到過項目中的神人在鍵盤上運指如飛的編程速度,當時就
被震撼了。當編程越來越成體力活,我們還能有自己的思想,還能修煉為Java系統級別的
程序員嘛?學習與修煉以下知識與技能,幫你早日達成愿望。
一:Java語言學習
對線程(thread),串行化,反射,網絡編程,JNI技術,容器(Map,List, Iterator), 類加載器
(ClassLoader),輸入輸出流,垃圾回收機制,有比較深入的了解,最起碼做過項目應用。有
過Java項目的性能優化經驗,最起碼掌握一種性能監視工具的使用,熟悉JVM參數,最起
碼知道可以在JVM啟動時指定不同垃圾回收機制,以及不同垃圾回收機制之間的
差別,熟悉JVM參數優化。
二:J2EE方面
最好知道JDBC規范是怎么回事情,面對Oracle數據庫如果告訴你JDBC驅動不能用了,你
還知道有OCI驅動可以。掌握常見的SQL語句,熟悉JMS,JNDI等組件,掌握一套web開
發模式,從前臺到后臺,有能力整合好這樣的框架。理解并掌握MVC思想,像SSH已經實
現了MVC的分層,幾乎不需要你自己再實現,假設你開發一個簡單的Swing程序,你能MVC
就說明你真的掌握了MVC的精髓。有能力在J2EE前端開發中構建自己的MVC模式,知道
什么是WEB2.0,知道什么是SOA,SaaS,SaaP等含義
三:理解并能合理運用設計模式,UML建模
知道并理解設計模式中蘊含的幾種基本原則如:里氏替換原則,開閉原則,合成復用原則,依賴倒置原則有很好的理解,并能舉例說明。對常用的設計模式如工廠模式,單例模式,觀
察者模式,責任鏈模式,橋接模式等知道靈活運用,明白什么是回調(Callback)。最后用一位
高人話來總結設計模式,它是為了讓軟件更容易被別人讀懂,更容易維護而產生,設計模
式本質是程序員之間的交流,如果A用工廠模式設計一個模塊B來接替,A只要說該模塊是
工廠模式實現,B維護起來應該容易得多,所以設計模式是關于交流,不關于代碼。切忌濫
用設計模式。學會使用UML建模工具至少熟悉一種URL建模工具。
四:注重用戶體驗,掌握KISS原則,知道歐卡姆剃刀原則
顧客就是上帝這個口號我們已經喊了N年了,程序員的勞動成果最終也需要轉換為服務提
供給客戶,用戶體驗至關重要,常常看到的場景是功能實現了,軟件很難使用,程序員有個
很充足的理由我不是美工,其實注重用戶體驗跟美工八桿子也打不到一起,FoxMail的成功
在很大程度是用戶體驗的成功,友好,清晰的用戶提示,強的容錯與糾錯設計是獲得好的
用戶體驗的不二法門。傻瓜相機顧名思義傻子都會使用,這個就著名的KISS原則(Keep it
simple and stupid)意思是UI設計要簡單明了,傻子一看就知道怎么用,想想我們做出來的
東西,對照說明書都不知道怎么用。另外一個就是最著名的例子IPhone手機外觀設計,是 典型的歐卡姆剃刀設計原則來完成人機交互。
五:自動測試與軟件配置管理(SCM)實現
知道什么是軟件配置管理,知道Hudson微機原理鬧危機,匯編語言不會變,實變函數學
十遍。計算機基礎知識被大家普遍忽視。從今天開始好好學習吧……
十一:Java代碼反編譯與代碼保護
Java編譯產生字節碼,因而可以被輕松的逆向工程(反編譯),微軟的C#生產的DLL也一樣可
以被輕松反編譯。正式由于這個原因產生了許多Java開源的代碼保護工具,而Proguard是
其中佼佼者,已經被google集成在android之中用于Java代碼保護,訪問這里了解更多:
http://proguard.sourceforge.net/
十二:努力成為某個行業或者領域骨干
面對漫長的職業生涯,要想不被淘汰,必須具備一招鮮吃遍天下的能力,選擇自己感興趣的
方向,努力而深入的研究,計算機技術發展到今天已經細分很細,努力研究一種Java開源
框架或者開源HTTP服務器源碼或者研究過網絡爬蟲源碼或者WEBKIT內核,不愁沒有人要
你。如果你是非常了解金融,企業ERP,證券,保險,移動應用行業的應用開發業務的人,一樣不用愁工作。這些知識不隨語言而改變,努力做一個有核心競爭力的Java程序員。
十三:提高語言與書面表達能力,掌握基礎的項目管理知識
文檔與語言表達能力是最好的向外界展現自己能力的方式,很多程序員編程能力很高,表達
能力一般,Linux能夠成功,除了歸功于網絡社區的力量之外,也得益于Linux作者本人給各
大基金會寫信,宣傳推廣,試想如果沒有良好的書面語言表達能力,即使Linux系統再優秀,卻無法被準確表達,失去各大基金會的支持,Linux還會像今天這么好的局面嘛。所以重視
文檔,重視提升溝通與表達能力,才有可能成為Java系統程序員。掌握基本的2/8原則,學
會將模塊細化分配給不同的人,預見并控制項目風險,把握項目進度,優化流程,合理的時
間管理,了解TDD,熟悉敏捷開發模式,常規軟件開發模式。
十四:掌握英語,良好的讀寫能力
英語是計算機的母語,掌握好英語對于閱讀英文資料學習新技術大有幫助,我的建議是盡量
讀英文原版書,如果是算法方面的可能會困難一點,但是其它像設計模式,軟件工程,OO
編程思想等盡量讀原版,提高自己的英文水平,多多訪問開發者,code project,程序員天堂,Pc-magazine等英文IT網站。英語絕對是你必須修煉與提高的技能。此外英語好在外資企業
尤其重要,只有外語足夠好才可能在外資企業中突破職業瓶頸,向上發展。
第五篇:Java系統程序員修煉之道
Java系統程序員修煉之道
——動力節點java 一:Java語言學習
對線程(thread),串行化,反射,網絡編程,JNI技術,容器(Map,List, Iterator), 類加載器(ClassLoader),輸入輸出流,垃圾回收機制,有比較深入的了解,最起碼做過項目應用。有過Java項目的性能優化經驗,最起碼掌握一種性能監視工具的使用,熟悉JVM參數,最起碼知道可以在JVM啟動時指定不同垃圾回收機制,以及不同垃圾回收機制之間的差別,熟悉JVM參數優化。二:J2EE方面
最好知道JDBC規范是怎么回事情,面對Oracle數據庫如果告訴你JDBC驅動不能用了,你還知道有OCI驅動可以。掌握常見的SQL語句,熟悉JMS,JNDI等組件,掌握一套web開發模式,從前臺到后臺,有能力整合好這樣的框架。理解并掌握MVC思想,像SSH已經實現了MVC的分層,幾乎不需要你自己再實現,假設你開發一個簡單的Swing程序,你能MVC就說明你真的掌握了MVC的精髓。有能力在J2EE前端開發中構建自己的MVC模式,知道什么是WEB2.0,知道什么是SOA,SaaS,SaaP等含義 三:理解并能合理運用設計模式,UML建模
知道并理解設計模式中蘊含的幾種基本原則如:里氏替換原則,開閉原則,合成復用原則,依賴倒置原則有很好的理解,并能舉例說明。對常用的設計模式如工廠模式,單例模式,觀察者模式,責任鏈模式,橋接模式等知道靈活運用,明白什么是回調(Callback)。最后用一位高人話來總結設計模式,它是為了讓軟件更容易被別人讀懂,更容易維護而產生,設計模式本質是程序員之間的交流,如果A用工廠模式設計一個模塊B來接替,A只要說該模塊是工廠模式實現,B維護起來應該容易得多,所以設計模式是關于交流,不關于代碼。切忌濫用設計模式。學會使用UML建模工具至少熟悉一種URL建模工具。四:注重用戶體驗,掌握KISS原則,知道歐卡姆剃刀原則
顧客就是上帝這個口號我們已經喊了N年了,程序員的勞動成果最終也需要轉換為服務提供給客戶,用戶體驗至關重要,常常看到的場景是功能實現了,軟件很難使用,程序員有個很充足的理由我不是美工,其實注重用戶體驗跟美工八桿子也打不到一起,FoxMail的成功在很大程度是用戶體驗的成功,友好,清晰的用戶提示,強的容錯與糾錯設計是獲得好的用戶體驗的不二法門。傻瓜相機顧名思義傻子都會使用,這個就著名的KISS原則(Keep itsimple and stupid)意思是UI設計要簡單明了,傻子一看就知道怎么用,想想我們做出來的東西,對照說明書都不知道怎么用。另外一個就是最著名的例子IPhone手機外觀設計,是典型的歐卡姆剃刀設計原則來完成人機交互。五:自動測試與軟件配置管理(SCM)實現
知道什么是軟件配置管理,知道Hudson運用該工具SCM,知道怎么獲取測試代碼覆蓋率,Java有效代碼行數(NCSS),完成firebug,JDepend等工具集成ant/maven。熟悉并注重在開發過程中使用JUnit單元測試,理解白盒測試規范。六:熟悉常見的網絡通信協議
對HTTP協議,知道POST, GET的區別是什么,閱讀過HTTP相關的RFC文檔。學會使用sniffer工具查看數據包,幫助查找與調試程序,知道TCP與UDP的區別,知道并理解E-Mail發送與接受的協議如SMTP,POP3,IMAP等協議,了解MIME與Base64編碼。知道組播是怎么回事情。
七:面向市場,永遠對新技術保持渴望
計算機技術的發展日新月異,做為IT行業的軟件開發人員要不斷的給自己充電,更新自己的技術與時代保持同步,同時還要面向市場,華為總裁任正非說過-“華為的技術革新必須面向市場”,作為程序員同樣要有市場意識,很多人都后悔沒有在android剛出來的時候加以關注學習。那些很早關注android開發技術的很多程序員因此獲得豐厚回報。如今HTML5得到越來越多的瀏覽器廠家支持,你是否已經跟上腳步,開始學習。八:保持謙虛,三人行必有我師
喬幫主說他要保持初心,努力學習,我等更應該保持謙虛,IT技術發展日新月異,在你眼中不可能實現的技術,也許別人早已經有思路。保持謙虛就有機會吸取別人身上的長處,古人有云:滿招損,謙受益。一個得道的高人更是說出了”下下人,上上智”的禪語。永遠不要拒絕幫助你周圍的人解決難題,解決難題是進步最快途徑。不要放棄任何一次可以提升自己技術與能力的機會。
九:養成總結的習慣,不斷反思
上學的時候老師常讓寫小結,也沒總結出來所以然,以至于工作以后再也不提這檔子事情,建議每個項目做完以后對自己都有個小結,總結自己在項目里面學到了什么,反問自己能不能完成在不需要別人幫助的情況下自己完成這樣的系統搭建,是否熟悉與掌握項目中所用到的技術,即使有些東西不是你負責完成的但是什么也不能阻擋一顆求知的心,總結要盡量詳細記錄你遇到那些難題是怎么一個一個的解決的,下次再遇到你是否可以很快解決或者避免這樣的問題。有總結才有提高,孔子曰:學而不思則罔,如果我們只是coding到吐血,不思考,不總結提高,永遠不可能有能有本質提高,秦相李斯有云:“泰山不讓土壤,故能成其大,河海不擇細流,故能就其深”,點滴積累不斷總結方能量變導致質變。十:數學功底與算法知識 用任何編程語言開發應用,都離不開核心算法支持,很多國外的軟件單單從UI上看,恐怕寫幾年程序的人都可以模仿,但是UI之下的那些真實深淺不一,相信不是你想模仿就可以模仿的,為什么我們越來越山寨,因為我們沒有核心競爭力,對于程序員來說算法與數學顯然是他最重要的核心競爭力之一。《算法導論》,《編程珠璣》等書絕對值得讀十遍。微軟亞洲研究院視覺計算組負責人在一次演講中說到他們招人的標準是“三好學生– 數學好,編程好,態度好”??墒乾F實的普遍情況卻是-微機原理鬧危機,匯編語言不會變,實變函數學十遍。計算機基礎知識被大家普遍忽視。從今天開始好好學習吧…… 十一:Java代碼反編譯與代碼保護
Java編譯產生字節碼,因而可以被輕松的逆向工程(反編譯),微軟的C#生產的DLL也一樣可以被輕松反編譯。正式由于這個原因產生了許多Java開源的代碼保護工具,而Proguar是其中佼佼者,已經被google集成在android之中用于Java代碼保護 十二:努力成為某個行業或者領域骨干
面對漫長的職業生涯,要想不被淘汰,必須具備一招鮮吃遍天下的能力,選擇自己感興趣的方向,努力而深入的研究,計算機技術發展到今天已經細分很細,努力研究一種Java開源框架或者開源HTTP服務器源碼或者研究過網絡爬蟲源碼或者WEBKIT內核,不愁沒有人要你。如果你是非常了解金融,企業ERP,證券,保險,移動應用行業的應用開發業務的人,一樣不用愁工作。這些知識不隨語言而改變,努力做一個有核心競爭力的Java程序員。十三:提高語言與書面表達能力,掌握基礎的項目管理知識
文檔與語言表達能力是最好的向外界展現自己能力的方式,很多程序員編程能力很高,表達能力一般,Linux能夠成功,除了歸功于網絡社區的力量之外,也得益于Linux作者本人給各大基金會寫信,宣傳推廣,試想如果沒有良好的書面語言表達能力,即使Linux系統再優秀,卻無法被準確表達,失去各大基金會的支持,Linux還會像今天這么好的局面嘛。所以重視文檔,重視提升溝通與表達能力,才有可能成為Java系統程序員。掌握基本的2/8原則,學會將模塊細化分配給不同的人,預見并控制項目風險,把握項目進度,優化流程,合理的時間管理,了解TDD,熟悉敏捷開發模式,常規軟件開發模式。