久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

程序員修煉 收藏

時間:2019-05-12 19:17:40下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《程序員修煉 收藏》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《程序員修煉 收藏》。

第一篇:程序員修煉 收藏

程序員修煉 收藏

程序就是一系列按步驟進行的操作序列,它有好多種級別,比如最低級的微程序、次低級的匯編程序、高級的各種編程語言程序、最高級的腳本語言程序,也許我列的不對,但沒關系,我要說的是不管是那個級別的程序,其本質都是操作的邏輯序列。大多數系統和應用程序都是建立在高級編程語言上的,比如C、C++、C#、FORTRAN、BISIC、JAVA等等,就讓我們只關注這一級的編程能力吧。因此如果一個程序員的邏輯能力不高,他永遠都不能成為一名具有合格職業水準的程序員,我們在下面的討論有關編程能力的方方面面,最終都是為了最大程度地提高和實現一名程序員的邏輯能力。

一、掌握基礎知識:十六年寒窗的持續積累

從7歲讀小學起,經過16年的學習,你從軟件專業本科畢業后,必須完成以下幾門專業課程的學習:計算機組成、操作系統原理、匯編語言、數據結構、編譯原理、數據庫原理、軟件工程、結構性設計語言(PASCAL、C)、面向對象設計語言(C++、C#)、計算機網絡等,你最好還懂一些算法分析、分布式系統、計算機圖形學、形式邏輯、人工智能原理、軟件設計模式、軟件構架/框架等研究生的課程,16年來,你積累的除了知識,更重要的是形成最適合自己的學習方法和工作方法。這些是你具備程序員職業水準的基礎能力,不要受什么計算機軟件怪杰之類傳奇的影響,那不過是小概率事件,而且這些怪杰們就算沒有讀過軟件本科和研究生,也往往自學了大多數專業課程,很可能比在校學習的學生對這些課程的精髓部分理解的更好,還有他們的工作方法和思維方式是特別而高效的,但普遍性差,可以借鑒,不宜模仿。好,所以現在你只需要問問自己,那些課程和知識都學會并掌握了嗎?如果是,那就準備好進行實踐了。

二、在實踐中提高:成為一名高水平的Coder

好了,你畢業了,在校功課都不錯,也找了一個專業對口的工作,你想大展鴻圖了,可是別急,你的翅膀還不夠硬,不信我們說來看看。

通常,你在工作中都會用到某一種單位/公司固定的操作系統和編程語言開發環境,比如Windows、UNIX、LINUX等操作系統,又比如用VC、VB、PB、Delph、JAVA、Motif/XWindow、QT、OpenGL、OpenInventor等編程語言和開發環境,我們在后面把它們合稱為開發環境。就在校學習的有關開發環境的知識而言,大概你距工作需要的差距是不小的,當某個操作系統和編程語言環境成為你的飯碗時,就不應也不能用通過課程/認證考試之類的眼光和要求來評價你的能力,即使你能考100分。你需要深入地學習該操作系統和編程語言環境的各類開發手冊的所有內容,你會說大多數你都用不上,其實你既對又不對,對的是單從使用的角度而言,你確實用不上開發手冊的大多數內容,比如龐大的VC開發類庫和復雜的開發環境,你在實際工作中能用到的不到總數的1/10或1/5,不對的地方在于,你用到的部分不是孤立存在的,它們是整個體系中的一部分,只有對整個體系有了一個較完整的了解,才能得心應手、隨心所欲地用好你用到的部分,你才算初步具備在這種開發環境下進行Coding的職業水準(還遠不夠程序員的職業水準呢),而這只是剛開始。如何才能真正掌握一種開發環境的全面的知識呢,最原始的辦法就是讀開發指南/教程、參考手冊,一般來講,學習開發指南/教程時,你如果是一個認真的人,都會完成5/10~7/10左右內容的學習和練習,如果你想成為職業選手,就應該完成9/10以上內容的學習和練習。參考手冊不同,大多數所謂的“程序員”們只是用到了才翻翻,這差的太遠了,你應該象讀開發指南/教程一樣,每個環節都要讀,比如VC,參考手冊中的每個類,類的每個函數,都要讀上幾遍,它們往往是一小伙一小伙地糾纏在一起使用的,開始時讀得你毫無頭緒、心煩意亂,不要緊,還有一手呢,如果你開發環境安裝的全面,它們往往都有開發商做的demo例子可看,你就進入另一個境界了,開始時你關注demo中的具體技術,后來你發現這些demo的程序寫的都還算不錯,結構簡單但合理,如果你真的用心,就一定能發現一些個別的demo是極品,它所展現的程序邏輯結構是你設計不出來的,你現在有點更關心它的程序設計構架,甚于對你原始目的(某種相關的技術/技巧)的關注,這時的你,開始了從一名Coder向一名Programmer的轉變,你會忍不住要看看開發商提供的源程序,比如.h和.cpp,通常你會找到include路徑下所有的.h程序,你才知道,哇!好多好多東東在參考手冊中都沒提到,你要學的太多了,沒時間顧及其它的業余愛好了,現在知道為什么程序員是年輕人的職業了吧,你要有足夠多的時間才行,即使你的智商有160。如果你走到這一步,在你工作的團隊中,已經是經常有人向你請教技術問題,經常有人請求你幫忙debug,你已是公認的“高手”了,別得意,因為你仍然是個Coder,為什么這么說呢,你想想,你已深入了解了這個開發環境中的各種技能,知道一名Coder如何用好這些東西,可是你能設計的出提供給Coder們用的東西嗎?唔??,你想了想,可能還不太行。對了,就是這樣,你還是一名小我境界的程序員呢,本質是個Coder,當然已是一名高水平的Coder了,然而你需要進一步登堂入室才能成為一名真正的程序員。

讓我們繼續吧,通常你都是從精通一種編程環境開始的,假設你已經較為精通在Windows下用VC開發軟件了,這時在技術和技巧方面你將面臨一小一大兩個挑戰,第一個小挑戰是如果公司/單位改換了開發環境,比如用LINUX下的QT交互語言工具進行開發,你不過是把前面掌握VC的過程再來一遍,由于在主觀上經歷了VC工具的學習過程,在客觀上各種開發環境都有太多相似的方面,這回你掌握的應該較快。要小心,在這時第一次誘惑之門打開了,因為你感覺良好,看!這回這么快,我就這么好地掌握了新的開發環境,你開始關注其它暫時還用不到的同類環境,比如VB、Delph、JAVA,如饑似渴地掌握各種開發工具,證明自己的學習能力和價值,但你忘了一點,你仍然是個Coder,只不過是一個在好多開發環境下都能編程的Coder,就像你生活在中國,因而精通了漢語,工作需要你又掌握了英語,然后你就來了勁,把俄語、日語、阿拉伯語、拉丁語,等等等等,都學習個遍,我只能說,有點BT。你忘了自己是個職業人,同一類的東西工作中用得到才需學習,太多太多的Coder們喜歡在一起比較和炫耀自己會掌握了幾種開發工具,不信你看看招聘時的求職書就知道了,sigh!他們中絕大多數人永遠都只能停留在這個層次上,心浮氣躁,一生都再也當不成真正的程序員了。總結一下,其實你在這時需要的是對自己掌握新開發環境的能力的自信,而不是一遍遍地重復來證明自己。第二個大挑戰就是你明白了只掌握VC是不夠的,你發現自己有點淺薄,有很多東東你會用但你不太懂,很多方面支持VC編程的知識你都沒掌握,比如操作系統的源碼、網絡協議知識、Windows 的注冊表、進程和線程的基礎知識、硬件驅動方面的知識、ActiveX、Windows 龐大的 API,又是一個等等等等,這些基礎知識的學習和掌握可是要花費大量時間的,你再一次深切地感到時間太不夠用了,因為這時的你大概有許多俗務纏身了,所以有點沮喪,還不用提IT業每天不知有多少新東西在發布,KAO,永遠都跟不上,越拉越遠了。哎!別氣餒,振作一點,你還是忘記了自己是個職業人,既然好多東東在工作中你永遠都沒機會用,那么干嘛要學呢?用什么才學什么,最多預測到馬上要用什么,先一步學什么好了,要知道沒有人是真正的、無所不精的全科大夫,除非你是神,但如果你還在耐著性子看這篇文章,你肯定是個人嘛。

OK,一般工作后三五年,你經歷了上述過程,經受了誘惑和考驗,終于明白了一個道理:你要的是強勁的學習知識的能力,是對某種軟件知識/技能的有深度的精通,一種摸到它的根的深度,而不是已掌握的技能的種類和數量。這時無論誰用他掌握了多少種你不會的技能來嚇唬你都沒用,你對他的層次只有蔑視。通過幾年的學習和工作,要記住最重要的一點,永遠最重要:對自己學習IT知識能力的自信,一個程序員一生都要不停地進行高強度的學習,用心問問自己,有沒有這個自信?別用虛榮心來騙自己哦,如果沒有的話,那就不必花費你寶貴的時間向下看了,作者在此感謝你有耐心看到這里,現在建議你關閉這篇文章,趁著年輕,當機立斷轉行吧!

三、注重邏輯:成為一名職業程序員

好,再前進一點點,你就要成為一名職業程序員了,讓我們繼續來完成這個任務吧!我們在前一節提到過,“你發現一些個別的demo是極品,它所展現的程序邏輯結構是你設計不出來的,你現在有點更關心它的程序設計構架,甚于對你原始目的(某種相關的技術/技巧)的關注”,其實你是在關注這個demo程序作者的思維邏輯,所有程序的本質就是邏輯。技術你已經較好地掌握了,但只有完成邏輯能力的提高,你才能成為一名職業程序員。打一個比方吧,你會十八般武藝,刀槍棍棒都很精通,但就是力氣不夠,所以永遠都上不了戰場,這個力氣對程序員而言就是邏輯能力(其本質是一個人的數學修養,注意,不是數學知識)。邏輯能力也是逐步提高的,開始時你一定是用直觀的邏輯能力來編程的,怎么想就怎么編,不對就再改,在改進中提高自己的邏輯能力,從直觀邏輯能力提高到抽象邏輯能力,這是很正常的。提前說一句吧,到達邏輯能力的至高境界,其表現是用數學語言來描述問題和問題的解決辦法,高度抽象!好,說回來吧,你要提高邏輯能力,最快的辦法就是讀別人寫的結構優秀的程序。優秀的代碼是百讀不厭的(這句話是我抄來的),暫時放放對其中某種技術和技巧的關注吧,你要推導和學習的是這些好程序的邏輯結構,它們是被精心設計出來的。你可以先捂住這個demo程序,自己設計一個功能相同的程序結構,然后比較一下demo的程序結構,如果差距較大,那你就不應簡單地改進一下,而是要把demo作者設計的過程在心里復原一遍,做到這一點也許有點困難,但這種事干的多了,你就會越干越快,越來越得心應手,你的邏輯能力飛速提升,你能看得上的邏輯結構優秀的程序開始不多了,下一步就是練習。從工作中開始吧,如果你有空閑,你需要做至少兩類練習,一類是算法練習,所有的經典算法都是經典的邏輯,題目有的是,像個好學生一樣吧,每年的國內國際編程競賽都有邏輯要求非常高的題,你可以只選一兩道難題來做做。當你可以把復雜的單遞歸程序(只有A調A)變成非遞歸程序時,已經不錯了,如果你能看得懂雙遞歸程序(A調A、A調B、B調A、B調B都有),我為你鼓掌!你不必往下看了,我有點不好意思啦――班門弄斧,你快滾蛋吧!另一類是把以前和當前你工作中你不滿意的程序推倒重新設計一遍,這非常重要,省時省力,因為你熟悉需求,技術上也沒問題,目的就是改進程序的邏輯結構,很劃算哦,唯一要克服的就是:你對推翻以前工作中那點小小成就的心理障礙,如果你真想優秀,說句粗話:這點心理障礙算個屁,一遍遍反復地推倒已有的成果只能使自己快速進步,放手干吧,沒什么好可惜的,馬恩早就在《共.產.黨宣言》里說過了:在這個過程中,你失去的只有鎖鏈(禁錮你思想的鎖鏈)。

讓我們來總結一下,經過自我否定后,再生的你盡管對過去的“業績”還有一些眷戀,但已是一個初步具備職業水準的程序員了,掌握了相應的技術和技巧,具備了較高的抽象邏輯思維能力,最主要的特征是:能自覺地自我否定,不斷地追求更高水平的邏輯能力。

在這個過程中,如果你能注意以下一些小的方面,你前進的步伐也許會快一些。

l 從編譯原理的角度來理解你工作中使用的高級語言,如果你做到這一點,至少有兩個好處,第一個好處是避免一大堆低水平重復出現的編譯錯誤。一名優秀的Coder平均在一個工作日中應該完成200行以上的源碼,其編譯錯誤應該控制在5個以下,要知道這200行源碼不是一次完成的,所以大多數情況下你都要追求一次編譯通過,而一名職業水準的程序員,應該進一步做到即使用purify這類的工具來檢查源碼,也不會存在嚴重的內存泄露。第二個好處是可以提高源碼的可讀性和效率。規范地編寫你的代碼使你自己的邏輯清晰,因為你明白多加幾個括號和空行、多換行對齊、多注釋,編譯器是會自動識別的,不影響程序執行的效率,反過來,控制好遞歸調用和循環內的if語句才是提高程序效率的關鍵,要全力避免遞歸,但要深刻理解遞歸,能通過自己建立堆棧來把遞歸程序轉換成非遞歸程序,要求還是較高的哦!

l 避免思維陷阱,只要你是人就一定有自己的思維慣性,這一定又會表現在你的程序邏輯中,有時你就是從這個慣性中跳不出來(誰都有這個時候),但要心里有數才行,所以你需要幫助,如果你有幾個水平相若或更高的職業伙伴,太好了,當遇到花30分鐘還打不下的bug時,就別浪費時間了,找他們吧,最要緊的是能思路清晰明確地表述你的問題,通常你自己在這個過程中或者伙伴中就有人把問題解決了,又快又好。另外,有幾個可以良性競爭的職業伙伴是人生的一件幸事,1+1>2,大家各有所長,你最好做到及時公開你的成果,技不壓身嘛,IT發展的這么快,你再優秀,那點東東也沒有什么值得隱藏的,所以你可以技術或水平不夠高,但千萬不可以讓真正具有職業水準的選手鄙視你的職業品質和行為。

l 有自己debug的特點,下面的說法作者不敢太肯定,只是經驗之談。即使在VC這種高度完善的開放環境下,你仍然應該要求自己僅憑打印語句就能debug。這也有兩點好處,第一個好處是,遇到bug你會認真想問題所在,而不是用debug工具一步步簡單地追蹤卡在哪兒了,你定位bug范圍的方式是從大到小、從粗到精,這是一種自頂向下的思維方式,而用工具追蹤,容易形成自底向上的思維方式,這不算好,你應該先看到森林,再看到樹木。我反復提及:程序就是邏輯過程,大多數程序從main函數開始,是由數據結構和功能子程序組成的一個樹形結構的邏輯過程(要認清即使是面向對象的程序語言也是一樣的),它的執行過程是深度優先的,但你定位bug應該是廣度優先的,好好想想這一點,嗯?第二個好處是強迫你思考并記住而不是用工具看到調用過程,你大腦的抽象邏輯思維能力和胳膊上肌肉的力量一樣,都是練出來的,如果你的bug是程序結構上的邏輯錯誤引起的,這一點就非常重要了,順便說一句,最難打的bug就是程序邏輯結構錯誤導致的bug。你要是真正明明白白地認識到這兒了,那我就沒什么東西可以告訴你了。總之,程序員的職業水準:生產效率和程序質量,主要是取決于源碼中bug的數量和debug的速度,而不是取決于編寫源碼的速度。給你一個我自己定義的考查一個職業程序員的指標:一個合格水準的職業程序員,編程的時間如果算一份的話,其累計debug的時間不能超過一份,真正職業高手累計debug的時間應該控制在0.5份以下,如何?你關上門悄悄問問自己,你花費在編程和debug上的時間比例是多少?如果你把程序員作為自己一生的職業,那么就永遠都要牢記一點:追求做一個0 bug的優秀程序員!這是任何一個想成為職業程序員的人的理想,請相信:堅忍不拔地追求實現這個理想將讓你出類拔萃!

l 做好程序的單元測試,這是另一項考查你是否是一名具有合格職業水準的程序員的一個必要指標。其實在你拿到需求的時候就要準備單元測試用例了,并且這些用例將直接影響你的詳細設計(有關軟件設計本來是該放在第四節講的)。我們還是打比方吧,當你拿到一個需求時,除了分析它靜態的功能外,還應明確它動態的操作/執行過程,把這個動態過程明確地用流程圖畫出來,比如分為A~Z的26步,其中A又可以進一步分解為A1~A5的5步,直到不能再分解為止。又比如說A3步不可分解了,那么你應該把A3步的正常操作和所有五花八門的異常操作都列出來,確保正常的操作肯定正確,異常的操作起碼程序不退出才行。這樣你就要寫好多好多的測試用例,說句老實話,我也從來不寫!但我一般會列一個提綱,比如A3步有正常的操作a、b、c、d、e共5項,異常的操作有f、g、h、i、j、k、l、m、n共9項,你在進行單元測試時都應該跑一遍,這樣的程序都還不敢說質量如何好,但起碼可以說較穩定吧!如果要想在進行單元測試時干得快、效率高,那么在進行詳細設計時,你就應該把A3步中對所有正常操作和異常操作的判斷都設計好,在編程實現A3步時,使得程序的結構合理高效,對不對?所以,如果你在工作中是割裂地看待軟件工程中從需求、分析、設計、編程、測試等各個環節,恐怕水平很有限喔!但如果你在分析需求時就能看到測試的問題,并改進設計和實現,為此做好相應的準備工作,嘿嘿,整個軟件開發過程你的效率會高很多,通常你在一個開發團隊中就會高度自信的,你已越過當一名偏頗、露骨的高手的境界,成為一個平靜的高手,這可是The best in the best!,用周星星的話說:是高手之高高手,因為別人看不出你高在哪兒,沒見你有什么高招或特拚命干,但反正你就是干得又快又好、又省力。關于進行單元測試還有很多復雜的方法,在此本文只提到了最基本的一點,目的是讓你在工作上考慮周全、安排有序,其它的自己琢磨吧,沒有人能替你吃飽飯!

l 如果你是用C++編程,我再簡單談談有關內層釋放的一個小技巧,就是對所有你編寫的類,在構造和析構函數中加打印語句,統計每個類在運行程序時構造和析構的地方,如果是配對的,那么起碼沒有對象類一級的內層在程序運行結束時沒有釋放,然后你就可以把打印語句刪掉了,招數雖土,但管用!

l 還有其它一些好習慣,在這里我隨筆寫一些,你要是有不同看法也請一笑過之吧。編程時應該對齊縮進,一個縮進用一個tab鍵,一般是4個空格,嚴格遵守開發團隊的編程規范也是非常重要的。一個子程序不應超過30行(不算空行),其內多重循環不應超過3層,否則都應該分裂成兩個子程序,個別算法程序可以長一些,但也不宜超過200行。通常一個類的所有成員函數總和不宜超過1500行,多了就應該考慮分解成兩個類(這個工作最好在設計時就完成)。每完成一小段程序,比如15~30行,就立即編譯運行,不要假裝高手,先敲它一大堆程序,再編譯運行,妄想一次成功,體驗一種假爽的、虛榮的快感,或炫耀給別人看,這么做只能證明自己是一個不折不扣的傻瓜,裝酷而已。因為只要有一次不成功,你就會花費大量的時間來調程序,別人的進度在這時就遠遠地超過你了,平常心是道,還是修煉真功夫吧!孫子兵法里關于這一點有明確的闡述,我就不引用了,但建議你真的不要這么干,除非你確實就是這樣總是一次就成功的天才,那你還看這篇文章干什么呢?我又不是寫給你們這些天才們看的。再就是有學會買好書、讀好書,關于計算機和軟件方面的書太多了,時間有限,比如有一個叫侯捷的家伙,幾乎寫的每本書都不錯,張國峰的C++編程也不錯,這只是我的個人意見啊,好書多著呢,列出來比這篇文章長好多倍,我就不多說了。還有一招,要是你運氣好,能搞到一些著名軟件系統的源碼,好好讀讀吧,在此我只能告訴你,Linux操作系統的一些源碼不錯,是開放的,你可以合法地搞到,其它的不要說是我建議你侵犯知識版權啊!

四、天生神力:成為系統分析員

本來就論述如何成為一名職業程序員而言,本文已基本完成任務了,但《菜根譚》有言:竭世機樞,似一滴投于巨壑,窮諸玄辯,若一毫置于太虛。既已乘興到此,何妨多置一毫于太虛呢,作者不才,干脆盡興寫算了。

你要是運氣好,直接進入了一個嚴格規范生產的軟件企業就業,剛開始就應該是按別人做好的軟件設計來實現編程,你可以有機會直接學習軟件設計,當你積累的足夠多了,能夠對其中的一些設計提出好的改進建議,而且干得又快又好,就會漸漸地展露頭角,我相信你終有一天成為一名軟件設計人員(注意,不是軟件產品設計人員),步入系統分析員的行列,但這還需其它的一些條件和自我修煉。如果你在一個不規范的軟件企業工作,那也不錯,你很可能直接就有機會進行軟件設計,然后開發、測試,甚至還不得不自己定義需求,把軟件開發過程的各個環節走一個遍,當然這樣對你的要求更高,而且你也不容易得到及時有益的指點,在正態分布的情況下,你應該是成長的很慢。但不管就業的單位如何,如果你決心要成為頂尖軟件職業選手,通常什么客觀困難都阻擋不了你,然而你個人的因素可能會阻止你的前進。下面提出的觀點純屬一己之見,傷人自尊之處作者在此提前道歉,并建議你除非對本文有強烈的興趣,否則就請直接看第五節或放下別看了。丑話已說在前頭了,在各種軟件開發組織的發展過程中的事實也證明,只有少數程序員能成為系統分析員,我想這一點不是我杜撰的吧,因此你要是在看接下來的部分時感到氣憤難當,那也實在沒著,純屬活該,因為作者只是在說明自己的觀點而已,你最多可以呲之以鼻,表示一下你的輕蔑好了,但沒有任何理由可以罵人!

作者自己沒有到微軟面試過,但身處軟件行業,關于微軟的許多東東當然還是有耳聞的,據說微軟招聘一名程序員要過五個已經成為微軟程序員的面試關,而且是一票否決制,又據說大多數面試題并非編程,而是一些有關邏輯和智力的題,作者私下也做過許多流傳的微軟面試題,并對此做法深以為然。程序的本質就是邏輯,所以幾十年前就有人提出編程是一門藝術,而藝術是要靠天份的,這一點少有人反對。一個人的邏輯能力可以不斷提高,但其能到達的終極邏輯能力的層次必定為其天生智力所限制,這一點就讓人不易接受了。好笑啊!人們可以公開承認自己沒有某種或全部的藝術天份,但要說自己邏輯天份不夠,換句話說承認自己笨、IQ不夠高,往往是要怒發沖冠的,其實這又有什么區別呢?話都說到這兒了,再次建議你如果不夠自信,就跳過這一節吧,直接看第五節,好嗎?

好了,把話題說回來,你已經成為一門合格的職業程序員了,如果要想成為從事軟件系統設計的職業系統分析員,第一件事就是悄悄找一個標準智商測試的網站或其它渠道,嚴格認真的測一測自己的智商,如果IQ低于130(正常智商是110),就請別費勁了,打消掉成為系統分析員的念頭吧!好!好!先請你冷靜一下,好好想想,其實微軟面試時就是在測你的智商和邏輯數學素質呢,這就是本節的標題為“天生神力”的原因,因為設計就是從無到有地進行創造,無論是軟件還是其它行業都一樣,可以有借鑒的,沒有現成的,設計就是創造!如果你IQ在130以上,又決心要當一名職業軟件系統分析員,其實你不過是要準備好吃更大的苦而已,有什么好虛榮的呢?

修煉還是從基本功開始的,過程和成為一名職業程序員差不多。必須使用設計工具這一點是不用多說的。在工作中,你基本上遇到的是兩類方式的設計,一個是結構化設計,另一個是面向對象設計,就個人經驗而言,面向對象的設計更好。如果你工作中不得不采用結構化的設計,你必須熟練地掌握數據流圖和控制流圖的分析和設計,一般來講,如果你把一個軟件中用到的數據模型設計好了,針對功能化的流程,不難設計出數據流圖,但下一步設計控制流圖才是挑戰,如果你按照需求走不通設計好的控制流圖,那么你或別人在按照這個設計編程實現時,必定也走不通,沒有奇跡會發生,還是在設計階段嚴格要求吧,又有一點需要牢記:返工是最慢的。當你在進行控制流圖的設計時,也不要妄想得到需求人員提供給你明確的指點,通常他們要是能夠把需求的功能和操作次序寫完整的話,你應該就感恩戴德了,從需求中整理出功能、操作的拓撲次序和條件是你作為系統分析員的職責。看看,要是沒有一點圖論的基礎和拓撲學的入門知識,你是當不好一個職業系統分析員的,即使你天賦不錯,必要的數學和邏輯素質仍然不可或缺。也不用氣餒,永遠沒有最好的設計,只有更好的設計,反復地進行設計迭代,勇于推翻舊的設計,你將快速進步。如果你在工作中是采用面向對象進行設計的,那就更有利了,有關面向對象設計的書太多了,不用作者在此多費口舌,建議精讀一本經典的書,比如北大邵維忠等編譯的《面向對象的分析》,有些方法和技巧可能過時,但其邏輯的基本原理是非常正確的,其本質是,你在邏輯上是如何認識這個世界的,你就是如何設計軟件體系結構的,然后讀讀其它書,觸類旁通,自己創造機會多實踐,成功自然會到來的,總之,不管是結構化設計還是面向對象設計,評價一下自己的軟件系統設計方案吧,有好多指標呢,比如是否均勻和平衡?局部獨立性強不強?有沒有歧異的結構?有沒有層次太多或太少?有沒有某個層次太大、太廣?是不是邏輯結構先復雜了再化簡的?還是只會設計簡單的,復雜不起來(這一點是笨哦,如果出現多次,請你不要意氣用事,轉行吧)?最重要的一點,是否容易理解、實現和改進?你自己會得出評價的。如果有機會看到別人的設計,一定不要錯過學習的機會,自己推導一遍,認真比較比較,獲益會較多。

走到這一步,你就應該關注設計模式了,首先還是學習,這方面的好書有的是,但一般在工作中用到的設計模式較為單一,應該多嘗試一下其它的設計模式。其次必須要明白設計模式不是設計思路,也不能代替設計思路,比方你要從A到B修一條路,設計模式只是讓你選擇,是修水泥的還是柏油的?是高架路還是普通的,但線路必須你自己定,而線路就是設計思路,模式對思路是有影響,但不能代替,所以如果你的智商高達250,我相信你直接用匯編語言也能寫出面向對象的程序來。第三在此有一個陷阱,很多系統分析員生搬硬套設計模式,全然不懂如何融會貫通,在你的一項具體工作中,往往是以一種設計模式為主,其它模式為輔的,思維不拘泥于形式才是關鍵,而且也為你到達更高的軟件設計的境界做好準備。

唉!都不知該怎么向下寫好了,因為已達到作者水平的極限了,我胡亂說一點,你湊合看吧。軟件設計最終的層次是:以無法為有法、以無限為有限,這句話是李小龍說的,不是我說的。再拾人牙慧一把,類比一個故事吧,金大俠在《倚天屠龍記》里講到張無忌初學太極,學會的標志是把剛學的招數全忘了,記住的是太極的道理和精神,和李小龍有些相似喔,軟件設計也一樣,忘記所有的設計模式,隨心所欲進行設計才是至高境界,所以你能到達多高的軟件設計的境界最終將取決于你的哲學素質,這一點實在是不好寫啊,你自己領悟吧!作者只有祝福了!

五、職業人的終極目標:全面修煉,成為Leader

這一節更不好寫,涉及到太多其它非技術方面的因素,特別是個人人生觀和世界觀的修煉,如果本帖的點擊率超過作者私下期望的一個數值,那我就爭取盡力厚著臉皮再補上吧。我只說一句,雖然大家都知道軟件開發是一個團隊性的工作,但追求參與一個大型軟件系統的成功開發,是一名軟件人員的本能,就像拿破侖說的不想當元帥的士兵不是好士兵,所以不追求實現大系統的軟件人員,也不是一個好的職業軟件人員,但你只有成為Leader,領導一個優秀的軟件開發團隊,才有機會實現這個終極職業目標,對不對? 好吧,不管你現在的感受如何,我都謝謝你能讀到這里!我不習慣假謙虛,就不說什么作者水平有限,本文拋磚引玉,歡迎大家批評斧正之類的客套話了,雖然作者水平確實有限。所以我認為你盡管有權砸磚,但實在沒必要搞回帖、或回罵、或頂之類的玩意兒,我只是盡興寫一點多年從事軟件開發工作的體驗,因此接下來我就高掛免戰牌,不回復任何回帖了。再次謝謝你能有耐心讀到這里!希望本文對你有所裨益,祝你成功!再見!

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/carefree31441/archive/2008/07/10/2635287.aspx

第二篇: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網站。英語絕對是你必須修煉與提高的技能。此外英語好在外資企業

尤其重要,只有外語足夠好才可能在外資企業中突破職業瓶頸,向上發展。

第三篇:程序員內功修煉篇

進入專業的編程領域,算法、數據結構、網絡模型、計算機原理等這樣的計算機科學專業需要學習的理論知識是必須要學習的。下面我們先來講述數據結構和算法。

數據結構和算法

算法是比較難學習的,而且學習“ 算法 ” 是需要智商的。數組、鏈表、哈希表、二叉樹、排序算法等一些基礎知識,對大多數人來說是沒什么問題的。但是一旦進入到路徑規劃、背包問題、字符串匹配、動態規劃、遞歸遍歷等一些比較復雜的問題上,就會讓很多人跟不上了,不但跟不上,而且還會非常痛苦。是的,解決算法問題的確是可以區分人類智商的一個比較好的方式,這也是為什么好些公司用算法題當面試題來找到智商比較高的程序員。

然而,在很多時候,我們在工作中卻發現根本用不到算法,或是一些基本的算法也沒有必要實現,只需要使用一下第三方的庫就好了。于是,導致社會上出現很多 “ 算法無用論 ” 的聲音。

對此,我想說,算法真的很重要。我這 20 年的經歷告訴我,無論是做業務還是做底層系統,經常需要使用算法處理各種各樣的問題。比如,業務上我需要用算法比較兩個數組中差異的布隆過濾器,或是在做監控系統時實時計算過去一分鐘的 P99 統計時的蓄水池算法,或是數據庫的 B+ 樹索引,還有 Linux 內核中的 epoll 的紅黑樹,還有在做服務調度里的 “ 背包問題 ” 等都會用算法,真的是會本質上幫助到你,也是會讓你非常有成就感的一件事。

雖然算法很難,需要智商,但我還是想鼓勵你,這其中是有很多的套路是可以學習的,一旦學會這些套路,你會受益無窮的。這里有幾本書著重推薦一下。

?

基礎知識。《算法》,是算法領域經典的參考書,不但全面介紹了關于算法和數據結構的必備知識,還給出了每位程序員應知應會的 50 個算法,并提供了實際代碼。最不錯的是,其深入淺出的算法介紹,讓一些比較難的算法也變得容易理解,尤其是書中對紅黑樹的講解非常精彩。其中,還有大量的圖解,詳盡的代碼和講解,也許是最好的數據結構入門圖書。不好的是不深,缺乏進一步的算法設計內容,甚至連動態規劃都未提及。另外,如果你覺得算法書比較枯燥的話,你可以看看這本有趣的《算法圖解》。

?

?

理論加持。如果說上面這本書偏于實踐和工程,而你看完后,對算法和數據結構的興趣更濃了,那么你可以再看看另一本也是很經典的偏于理論方面的書——《算法導論》。雖然其中的一些理論知識在《算法》那本書中也有提過,但《算法導論》這本書更為專業一些,是美國計算機科學本科生的教科書。

?

?

思維改善。還有一本叫《編程珠璣》的書,寫這本書的人是世界著名計算機科學家喬恩·本特利(Jon Bentley),被譽為影響算法發展的十位大師之一。你可能不認識這個人,但是你知道他的學生有多厲害嗎?我例舉幾個,一個是 Tcl 語言設計者約翰·奧斯德奧特(John Ousterhout),另一個是 Java 語言設計者詹姆斯·高斯林(James Gosling),還有一個是《算法導論》作者之一查爾斯·雷斯爾森(Charles Leiserson),還有好多好多。這本書也是很經典的算法書,其中都是一些非常實際的問題,并以其獨有的洞察力和創造力,來引導讀者理解并學會解決這些問題的方法,也是一本可以改善你思維方式的書。

?

然后,你需要去做一些題來訓練一下自己的算法能力,這里就要推薦 LeetCode 這個網站了。它是一個很不錯的做算法訓練的地方。現在也越做越好了。基本上來說,這里會有兩類題。

?

基礎算法題。其中有大量的算法題,解這些題都是有套路的,不是用遞歸(深度優先 DFS,廣度優先 BFS),就是要用動態規劃(Dynamic Programming),或是折半查找(Binary Search),或是回溯(Back tracing),或是分治法(Divide and Conquer),還有大量的對樹、數組、鏈表、字符串和 hash 表的操作。通過做這些題能讓你對這些最基礎的算法的思路有非常扎實的了解和訓練。對我而言,Dynamic Programming 是我的短板,尤其是一些比較復雜的問題,在推導遞推公式上總是有思維的缺陷(數學是我的硬傷)。做了這些題后,我能感到我在動態編程的思路上受到了很大的啟發。

?

?

編程題。比如:atoi,strstr,add two nums,括號匹配,字符串乘法,通配符匹配,文件路徑簡化,Text Justification,反轉單詞等,這些題的 Edge Case 和 Corner Case 有很多。這些題需要你想清楚了再干,只要你稍有疏忽,就會有幾個 case 讓你痛不欲生,而且一不小心就會讓你的代碼寫得又臭又長,無法閱讀。通過做這些題,可以非常好地訓練你對各種情況的考慮,以及你對程序代碼組織的掌控(其實就是其中的狀態變量)。

?

我覺得每個程序員都應該花時間和精力做這些題,因為你會從這些題中得到很大的收益。我在 Leetcode 上做的一些題的代碼在這——我的 Github 上,可以給你一些參考。

如果能夠把這些算法能力都掌握了,那么你就有很大的概率可以很容易地通過這世界上最優的公司的面試,比如:Google、Amazon、Facebook 之類的公司。對你來說,如果能夠進入到這些公司里工作,那么你未來的想像空間也會大得多得多。

最后,我們要知道這個世界上的數據結構和算法很多很多,下面給出了兩個網站。

? List of Algorithms,這個網站羅列了非常多的算法,完全可以當成一個算法字典,或是用來開闊眼界。? 還有一個數據結構動畫圖的網站 Data Structure Visualizations。

其它理論基礎知識

下面這些書,基本上是計算機科學系的大學教材。如果你想有科班出生的理論基礎,那么這些書是必讀的。當然,這些理論基礎知識比較枯燥,但我覺得如果你想成為專業的程序員,那么應該要找時間讀一下。

?

《數據結構與算法分析》,這本書曾被評為 20 世紀頂尖的 30 部計算機著作之一,作者 Mark Allen Weiss 在數據結構和算法分析方面卓有建樹,他在數據結構和算法分析等方面的著作尤其暢銷,并廣受好評,已被世界 500 余所大學用作教材。

?

?

《數據庫系統概念》,它是數據庫系統方面的經典教材之一。國際上許多著名大學包括斯坦福大學、耶魯大學、德克薩斯大學、康奈爾大學、伊利諾伊大學、印度理工學院等都采用本書作為教科書。這本書全面介紹了數據庫系統的各種知識,透徹闡釋數據庫管理的基本概念。不僅討論了數據庫查詢語言、模式設計、數據倉庫、數據庫應用開發、基于對象的數據庫和 XML、數據存儲和查詢、事務管理、數據挖掘與信息檢索以及數據庫系統體系結構等方面的內容,而且對性能評測標準、性能調整、標準化以及空間與地理數據、事務處理監控等高級應用主題進行了廣泛討論。

?

?

《現代操作系統》,這本書是操作系統領域的經典之作,書中集中討論了操作系統的基本原理,包括進程、線程、存儲管理、文件系統、輸入 / 輸出、死鎖等,同時還包含了有關計算機安全、多媒體操作系統、掌上計算機操作系統、微內核、多核處理機上的虛擬機以及操作系統設計等方面的內容。

?

? 《計算機網絡》,這本書采用了獨創的自頂向下方法,即從應用層開始沿協議棧向下講解計算機網絡的基本原理,強調應用層范例和應用編程接口,內容深入淺出,注重教學方法,理論與實踐相結合。新版中還增加了無線和移動網絡一章,并擴充了對等網絡、BGP、MPLS、網絡安全、廣播選路和因特網編址及轉發方面的材料。是一本不可多得的教科書。

?

?

《計算機程序的構造和解釋》,這本書也很經典,是 MIT 的計算機科學系的教材。這本書中主要證實了很多程序是怎么構造出來的,以及程序的本質是什么。整本書主要是使用 Scheme/Lisp 語言,從數據抽象、過程抽象、迭代、高階函數等編程和控制系統復雜性的思想,到數據結構和算法,到編譯器 / 解釋器、編程語言設計。

?

?

《編譯原理》,這本書又叫 “ 龍書 ”,其全面、深入地探討了編譯器設計方面的重要主題,包括詞法分析、語法分析、語法制導定義和語法制導翻譯、運行時刻環境、目標代碼生成、代碼優化技術、并行性檢測以及過程間分析技術,并在相關章節中給出大量的實例。與上一版相比,本書進行了全面的修訂,涵蓋了編譯器開發方面的最新進展。每章中都提供了大量的系統及參考文獻。

?

小結

好了,最后我們來總結一些今天分享的內容。在這篇文章中,我建議想進入專業編程領域的人,一定要算法、數據結構、網絡模型、計算機原理等理論知識,并推薦了相應的學習素材,給出了我的思考和建議。

我認為,雖然這些理論知識枯燥難學,而且通常學完了在工作中也并不是馬上就能用上,但這些知識是必須要學好的。這些理論知識可以說是計算機科學這門學科最精華的知識了,認真學習,理解其背后的邏輯和思維方式,會令你受益匪淺。不管是未來學習新知識,還是解決什么疑難問題,都能在這些知識中獲得靈感或者啟發。

第四篇:《程序員修煉之道》讀后感

《程序員修煉之道》讀后感

編程技術就是程序員的手藝,你的程序就是你的藝術品。時刻關注自己的技藝,保持熱情、保持好奇,爭取做到富有專長而又多才多藝。

看似樸素的道理,實際是若干經驗的總結,就像這本書的自序所講的,這是一本包含有許多樸素的經驗,寫給注重實效的程序員的一本“演員的自我修養”。

簡單和朋友們分享幾點:

怎樣提出你的問題

1:確切地知道你想要問什么,并盡量明確具體;

2:小心而得體地組織你的問題,記住你是在請求幫助;

3:發郵件時請使用有意義的主題;

4:坐回椅子上,耐心等候

破窗

團隊不能容忍破窗(產品的不完善的地方),需要指定人修復,不能一直放著不管。當你看到糟糕的設計、錯誤的決策和糟糕的代碼時,修正它們。在工作中,很容易對源源不斷的bug不耐煩,或許被自己說服僥幸繞過,以后就會有更多的直至難以修復。破窗戶講的故事是一個小區的一扇窗戶沒有及時維修導致整個小區陷入被更多破壞的現實,人們再想起維修時,代價巨大,治安特別好的地區也對破窗嚴格治理。

不要恐慌

做一次深呼吸,思考什么可能是bug的原因。記得剛入團隊時,我時常會對難以捉摸,尤其是不能復現的bug感到恐懼,但細細尋找,你還是能看到蛛絲馬跡。

溫水煮青蛙

個人和團隊假如一直在一個假設的環境或者需求或者條件下繼續下去,就很可能像那只可憐的青蛙一樣,或者定時的檢測下環境或條件或需求是否變化,或者團隊里面專門有人來檢測

重復的危害

不要在系統各處對知識進行重復。作為程序員,我們收集、組織、維護和利用知識。我們在規范中記載知識、在運行的代碼中使其活躍起來并將其用于提供測試過程中所需的檢查。遺憾的是,知識并不穩定。所有這些不穩定都意味著我們要把很大一部分時間花在維護上,重新組織和表達我們的系統中的知識。程序員須持續不斷地維護。我們的理解逐日變化,當我們設計或編碼時,出現了新的需求。環境或許變了。不管原因是什么,維護都不是時有時無的活動,而是整個開發過程中的例行事務。可靠地開發軟件、并讓我們的開發更易于理解和維護的惟一途徑,是遵循我們稱之為DRY的原則:系統中的每一項知識都必須具有單一、無歧義、權威的表示。

正交性

不要把任何一項知識分散在多個系統組件中。在計算技術中,該術語用于表示某種不相依賴性或是解耦性。如果兩個或更多事物中的一個發生變化,不會影響其他事物,這些事物就是正交的。非正交的例子:直升機駕駛操作的各個控制器之間就是相互影響的,不是正交的。

正交的好處就是為了可以局部修正(local fix)。

何時使用異常

將異常用于異常的問題。例如:文件讀寫,例程返回值,各種狀態異常檢測,服務器超時等異常情況,都需要使用異常,通常為異常分等級,可以拋出異常,或者將異常寫入日志。

交流

我們不是活在真空世界,需要花大量時間與人交流。只有當你是在傳達信息時,你才是在交流。

有效交流的幾種方法:知道你想要說什么,了解你的聽眾,選擇時機,選擇風格,讓文檔美觀,讓聽眾參與,做傾聽者,回復他人。

定期為你的知識資產投資

讓學習成為習慣。編程語言、技術日新月異,小伙伴們都感受至深,幸運的是我們的知識獲得比任何行業都更加容易和方便,大量的社區,教程和熱心的作者。書中也給程序員提了幾點建議,每年學習一門新的語言,每個季度閱讀一本技術書籍等。

讓復用變得容易

如果復用很容易,人們就會去復用。創造一個支持復用的環境。將相同的功能抽離出來,可能會大量用到的方法使用靜態關鍵字。

在你的作品上簽名

過去時代的會陷入自我欣賞中,他其實還有一個作用,我對代碼負責,我測試過并確保他的良手藝人為能在他們的作品上簽名而自豪。你也應該如此。坦白的說,簽名之后再看這段代碼會非常愉悅,有時還好運行,也是一種自我監督吧。

“我的源碼讓貓吃了”,想想作為程序員的我們,是不是經常會幫自己解脫,向領導,測試,客戶推卸責任,其實對于他們仿佛也就好比聽“我的源碼讓貓吃了”這句話,是不是很諷刺?不管我們某個人基礎再扎實,解決問題的能力再強,如果缺失了對自己的軟件的責任,一定不會有好的工作成果。

很多很多,這些不是做過一次兩次就說明已經掌握了,需要一個持續的過程去注意,實踐,直到他們成為你的習慣,這樣,你才能成為一個“專家程序員”。

來源:網絡整理 免責聲明:本文僅限學習分享,如產生版權問題,請聯系我們及時刪除。

第五篇: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之下的那些真實深淺不一,相信不是你想模仿就可以模仿的,為什么我們越來越山寨,因為我們沒有核心競爭力,對于程序員來說算法與數學顯然是他最重要的核心競爭力之一。《算法導論》,《編程珠璣》等書絕對值得讀十遍。微軟亞洲研究院視覺計算組負責人在一次演講中說到他們招人的標準是“三好學生– 數學好,編程好,態度好”。可是現實的普遍情況卻是-微機原理鬧危機,匯編語言不會變,實變函數學十遍。計算機基礎知識被大家普遍忽視。從今天開始好好學習吧…… 十一:Java代碼反編譯與代碼保護

Java編譯產生字節碼,因而可以被輕松的逆向工程(反編譯),微軟的C#生產的DLL也一樣可以被輕松反編譯。正式由于這個原因產生了許多Java開源的代碼保護工具,而Proguar是其中佼佼者,已經被google集成在android之中用于Java代碼保護 十二:努力成為某個行業或者領域骨干

面對漫長的職業生涯,要想不被淘汰,必須具備一招鮮吃遍天下的能力,選擇自己感興趣的方向,努力而深入的研究,計算機技術發展到今天已經細分很細,努力研究一種Java開源框架或者開源HTTP服務器源碼或者研究過網絡爬蟲源碼或者WEBKIT內核,不愁沒有人要你。如果你是非常了解金融,企業ERP,證券,保險,移動應用行業的應用開發業務的人,一樣不用愁工作。這些知識不隨語言而改變,努力做一個有核心競爭力的Java程序員。十三:提高語言與書面表達能力,掌握基礎的項目管理知識

文檔與語言表達能力是最好的向外界展現自己能力的方式,很多程序員編程能力很高,表達能力一般,Linux能夠成功,除了歸功于網絡社區的力量之外,也得益于Linux作者本人給各大基金會寫信,宣傳推廣,試想如果沒有良好的書面語言表達能力,即使Linux系統再優秀,卻無法被準確表達,失去各大基金會的支持,Linux還會像今天這么好的局面嘛。所以重視文檔,重視提升溝通與表達能力,才有可能成為Java系統程序員。掌握基本的2/8原則,學會將模塊細化分配給不同的人,預見并控制項目風險,把握項目進度,優化流程,合理的時間管理,了解TDD,熟悉敏捷開發模式,常規軟件開發模式。

下載程序員修煉 收藏word格式文檔
下載程序員修煉 收藏.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    優秀程序員修煉之路(5篇)

    優秀程序員修煉之路 “為人寫程序”初級的程序員或經驗不足的程序員往往只意識到自己的程序是寫給計算機的,而不會在意程序其實也是寫給人的,或在意得不夠、不全面。寫給機器......

    Java程序員修煉十大過程

    Java程序員修煉十大過程 學習java這么久,見到過項目中的神人在鍵盤上運指如飛的編程速度,當時就被震撼了。當編程越來越成體力活,我們還能有自己的思想,還能修煉為Java系統級別......

    (總結)程序員的思維修煉(推薦閱讀)

    程序員的思維修煉 開發認知潛能的九堂課 我的總結 第一章:嘗試改變自己。 第二章:德雷福斯模型。從整體角度看待問題。保持實踐。學習如何學習的技能。 第三章:雙cpu,L與R。多用......

    修煉一名程序員的職業水準[5篇材料]

    修煉一名程序員的職業水準(林慶忠__署名原創) 作者:林慶忠,1990年畢業于昆明工學院計算機軟件專業,后又于1999年畢業在南京大學 完成軟件工程專業碩士的學習,現供職于CNPC旗下的......

    程序員(范文模版)

    作業:研究一個新或自己感興趣的職業 v介紹:名稱定義 v典型生涯路徑:從新手到最高職位的生涯路徑 v趨勢:技術、組織結構、培訓、經濟趨勢對職業的影響v薪酬:差別、地域差別v所......

    程序員

    7.5.3系統測試和調試 1.系統測試的意義及目的 系統測試是為了發現錯誤而執行程序的過程,成功的測試是發現了至今尚未發現的錯誤的測試。 測試的目的就是希望能以最少的人力和時......

    程序員

    程序員之死 程序員:舉世至主,萬元之源,眾物所幕,神祗皆掌,歲能長立,箜有己出。弈中悲苦,是自了得!幸事禍事飄忽于其思想,曉如今,心思想,新紀元,心結緣,把話晾。 世間萬物,出于思想,毀亦思想......

    自我修煉

    自我修煉: 一、沉穩:1、不要隨便顯露你的情緒。 2、不要逢人就說你的困難和遭遇。 3、在咨詢別人的意見前,自己先思考,但不要先講。4、不要一有機會就嘮叨你的不滿。 5、重要的......

主站蜘蛛池模板: 国产精品无码人妻一区二区在线| 亚洲综合久久成人av| 亚洲精品无码成人av电影网| 成年无码按摩av片在线观看| 日本高清视频色wwwwww色| 玖玖资源 av在线 亚洲| 亚洲成a人片在线视频| 日本一区午夜艳熟免费| 国产精品久久久国产盗摄| 特黄特色大片免费播放器图片| 粉嫩小泬无遮挡久久久久久| 亚洲日韩精品无码专区| 亚洲va无码va在线va天堂| 国产成人久久av免费| 97人妻天天摸天天爽天天| 欧美成人欧美va天堂在线电影| 国产真人做爰毛片视频直播| 亚洲熟女乱色综合亚洲图片| 国产免费人成视频在线播放播| 丰满人妻熟妇乱又伦精品软件| 免费无码成人片| 亚洲精品乱码久久久久久| 久久久久se色偷偷亚洲精品av| 亚洲国产激情一区二区三区| 亚洲人成人一区二区三区| 无码少妇一区二区三区| 国产特级毛片aaaaaa高潮流水| 亚洲精品成人网线在线播放va| 免费观看全黄做爰的视频| 女女互揉吃奶揉到高潮视频| 性色av一二三天美传媒| 在线观看日本亚洲一区| 成人做爰69片免费看网站野花| 天天爱天天做天天爽夜夜揉| 亚洲男人a在天堂线一区| 麻花传媒剧国产mv高清播放| 中文字幕人妻无码专区app| 久久久精品久久日韩一区综合| 少妇熟女天堂网av| 伊人久久大香线蕉av成人| 日本伊人精品一区二区三区|