Ⅰ 現實中程序員是怎樣飛快敲代碼的
敲代碼很快有幾個條件
1.對項目代碼和結構非常熟悉,知道整個數據流的在代碼中的流動過程和變化過程。知道當前新增的代碼在整個項目處於哪個位置,對於數據會有產生什麼新的變化。這些要心理有數。也就是從架構層面去思考代碼的編寫。
2.對於需求理解的很透。這樣業務邏輯轉成代碼邏輯就不會有任何不清楚的地方。
3.已經解決了技術難點,也就是說前期測試性代碼已經寫過了弄清楚了,避免了突然出現的技術性難點
4.新增的代碼和新增的數據結構已經仔細思考過了,並設計好。也清楚引入這些新的代碼和數據結構對現有代碼的整體影響
5.異常點的位置的處理方案已經安排好了。寫代碼一部分是正常業務流程,演算法過程,但是另外一大塊就是處理各種異常。當異常出現之後,是代碼重試,報錯後忽略,還是報錯之後停止代碼,還是報錯後清理代碼並重新恢復上一個狀態,等等。這些都是要心理有數。
6.對於如何新增源代碼文件,命名函數,命名文件名,命名類名,命名變數名有一整套方案。有時候想個函數名或者變數名都要卡好幾分鍾,就不算飛快了。別笑,想個變數名,網路十來分鍾的時候多了去了。
7.外部環境已經准備好了。IDE穩定,資料庫結構穩定,數據穩定,網路穩定,訪問網頁順暢,准備好免打擾的牌子。准備好刷卡提需求的二維碼,准備好板磚和大刀,預防產品經理提需求和改需求。
Ⅱ 有哪些老程序員都知道對新手很有用的經驗
一說到程序員,想必大家的第一印象就是頭發少,很大程度上就是因為壓力大導致的,有生活壓力,也有工作壓力。
今天說說工作方面的壓力,想必看到這個問題的小夥伴都有一個認知,就是一個項目往往比預期的要長,說不定從哪天開始就加班了,一出現BUG真的要人命。此時,考研新老選手心態的時候和經驗的時候了,老程序員或許能從容應對,新手可能完全不知錯所。
這些信息包括戶口檔案、社保、公積金等信息,程序員新手可能跳槽比較頻繁,有人甚至還換個城市工作。除了戶口可能其他的信息都亂了,可能當時覺得不那麼重要,但是十年、二十年後,可能會非常重要。
·工作日誌可以提升腦容量;
·不要先寫框架再寫實現,要反過來;
·重構/優化/修復Bug,不要同時做;
·簡化開發流程,加快迭代速度;
·紙筆是最好的工具,其次是markdown;
·畫出結果,一目瞭然。
·要學會進行清晰的命名;
·問問題前先調查,要問到點上。
·不要小看程序員
Ⅲ 程序員老了怎麼辦
很多人都是說程序猿是吃青春飯的,上了年紀的程序猿將會面臨著腦力或者體力不支的問題,導致一些老程序猿不再被公司重用或者重視,甚至面臨失業的危險。然而我卻不這么認為,其實程序猿老了未必就沒有用了,很多老程序還是大用用武之地的。
Ⅳ 學編程(快三十歲的人)來得及嗎,來說說
作為一名從事軟體編程多年的老程序員,我認為三十歲學習編程是沒有問題的。隨著當前信息化社會的不斷發展,尤其是大數據、人工智慧的大熱,整個互聯網領域需要大量的程序設計人才。以大數據為例,目前的人才缺口就在百萬以上,所以目前學習相關技術是不錯的選擇。快三十歲開始學習編程雖不算晚,但是也絕對不早了,這個年齡開始學習編程一定要有一個更加系統的學習過程。
Ⅳ 編程經典語錄
篇一:程序員9條經典的編程語錄
2013年伊始,告別短暫的小長假,我們又回到了緊張的工作氛圍中,在這篇文章中,我收集了幾條非常有趣的且廣受歡迎的編程術語,為廣發編程愛好者加波助瀾,就像Linus Torvalds說的那樣,我們因為興趣而編程。 2013年伊始,告別短暫的小長假,我們又回到了緊張的工作氛圍中,在這篇文章中,我收集了幾條非常有趣的且廣受歡迎的編程術語,為廣發編程愛好者加波助瀾,就像Linus Torvalds說的那樣,我們因為興趣而編程。
1. 在水裡行走和以一個需求規格進行軟體開發類似,即如果水或需求都被凍結住,那麼行走和軟體開發都會變得很容易。-——Edward V Berard
2. 不要擔心程序異常,如果它總是正確的話你早就失業了。——軟體工程Mosher定律
3. 設計的附加價值高於它所增加的花費。——Thomas C. Gale
4. 沒有好的團隊就開發不出好的軟體,但絕大多數的軟體開發團隊看起來就像不健全的家庭一樣。——Jim McCarthy
5. 我才不關心我的代碼是否能在你的機器上工作!我們不會給你提供機器。——Vidiu Platon
6. 「靠代碼行數來衡量開發進程就好比用重量來衡量飛機製造的進度。」——Bill Gates
7. 「程序員的問題是,不到太晚,你永遠不會知道他在做著些什麼。」——Seymour Cray
8. 「大部分好的程序員編程並不是為了錢或名望,而只是因為純粹的樂趣。」——Linus Torvalds
9. 「有兩種生成一個軟體設計方案的途徑。一個是把它做得如此簡單,以致於明顯不會有漏洞存在;另一個是把它做的如此復雜,以致於不會有明顯的漏洞存在。」——C.A.R. Hoare
篇二:程序員經典語錄
1. 選擇當前科技領域的一個小子集,親近它、擁抱它,並且嘗試推進這個小領域的發展。
2. 理解不同數據結構和演算法的優缺點,不單是內存中,還有磁碟上的表現。
3. 首先深刻理解你所在的領域,然後拋開計算機,像普通用戶那樣觀察和體會。
4. 時刻准備好(包括能力和心理上)向深層探索,不僅僅是一兩層,而是好幾層。要知道,是否能在編程時勢如破竹,與你所能達到的技術深度關聯緊密。
5. 運用你的想像力,總是問這樣的問題「還有更好的辦法嗎?」跳出固有的思維模式,最好的實現方式也許還沒有人嘗試過。
6. 永遠不要過早退出,不要兩次編寫同一段代碼,不要將一個變數命名為另一個變數的子集。如果不理解這些規則,也許你會爭辯,不過一旦你這么做了,它們就能幫助你寫出更好的代碼,否則你將永遠停留在初級程序員的水平。
7. 學習如何進行基準測試,學會的那一天,你會發現世界將變得不同。
8. 學會如何分辨瑣事和細節,只將精力集中於細節。
9. 不要總是向你的用戶和管理者妥協,有時應該讓他們知道,他們自以為的並不是那麼重要。
10. 寫一個框架,無論你是否計劃使用它。這個過程會讓你學到靠其他方式無法學到的東西。
11. 把學到的東西教給別人,無論是口口相授還是文以載道,你都會發現自己也能從這個過程中收獲良多。
12. 找到旁人寫的這樣一些代碼——它們實現了重要的功能,但寫得並不夠聰明。重寫它們,然後告訴自己永遠不要犯相同的錯誤。
13. 在人生的某個時候,運營你自己的事業(服務或產品)。你能從中學到當職員時無法領悟的編程技巧 你認為最具爭議的編程觀點是什麼?
C#專家Jon Skeet曾在StackOverflow上提出這個問題。這里列舉最熱門的前10條討論。
1. 業余時間不以編程為樂者,永遠趕不上那些以此為樂的同行
即使最聰明、最有才華的人,若只是將編程作為工作,就永遠成不了真正優秀的程序員。以編程為樂的人會在業余時搞些小項目,或者擺弄各種編程語言和編程思想。
2. 唯一能放之四海而皆準的最佳實踐,是「用腦子思考」
太多人喜歡追逐眾多時髦技術,想方設法把各種方法、模式、框架用到不適合的地方。新技術和名人大牛的觀點並不等於適用於實際情況。
3. 依賴Google沒什麼錯
這種言論肯定會讓那些學富五車的飽學之士惱火。但重要的是能真正理解,並給出成功的編程解決方案,讓客戶和老闆滿意。
4. 大多數注釋是代碼的糟糕重復
我們大部分時間是在維護其他人(或我們自己)所寫的代碼,而糟糕、錯誤、過時和誤導性的注釋也是代碼中最令人糾結的因素之一。
5. XML被大大高估了
許多隨波逐流的人沒動過腦子就跳上了XML這條黑船。XML用於Web應用不錯,因為它本來就是干這個的。此外的問題定義、設計思路應該盡量不用XML。
6. 程序員生而不平等
經理往往認為「程序員A=程序員B」,因為他們工作的年頭差不多。但實際上,他們的效率可能相差十倍甚至百倍。
7. 將java作為最適合大學教學的第一門語言令人費解
第一門編程語言應該重在學習控制流和變數,而不是對象和語法。此外沒有調試C/C++內存泄漏經驗的人,根本無法完全理解Java的初衷。
8. 若你只會一門語言,無論多麼精通,仍然不夠優秀
任何人如果只局限於一門語言,都無法充分發揮自己的潛力。而且缺乏求知慾和探索意願,都不符合優秀程序員的特質。
9. 性能真的很重要
盡管可以通過購買更強勁的CPU、硬碟和內存提升性能,但若這樣想的人少一些,我們也許能在1GHz的CPU上運行更多程序。
10. Print語句是有效的調試方式
用System.out.println之類的輸出語句調試代碼的方式挺好。這經常比正式的調試要快,而且可以比較不同運行的輸出結果
篇三:101條經典計算機語錄
1、計算機沒什麼用.他們只會告訴你答案.(巴勃羅畢加索,畫家)
2、計算機就跟比基尼一樣,省去了人們許多的胡思亂想.(薩姆尤因,作家)
3、他們擁有計算機,他們也還可能擁有其他的大規模殺傷性武器.(珍內特雷諾,美國前女司法部長)
4、跟計算機工作酷就酷在這里,它們不會生氣,能記住所有東西,還有,它們不會喝光你的啤酒.(保羅利里,吉他手)
5、如果汽車能趕上計算機的發展周期的話,一輛今天的勞斯萊斯僅值100美元,每加侖要跑100萬英里,每年還得爆炸一次,把裡面的人殺個精光.(Robert X. Cringely,技術作家)
6、計算機總是越來越智能的.科學家告訴我們說不久它們就能跟我們對話了.(這里的它們,我指的是計算機.我懷疑科學家永遠都不能跟我們對話.) (Dave Barry,幽默作家)
7、我最近注意到,在共同文化中,那種對計算機變得智能化並最終掌控世界的妄想恐懼症幾乎徹底消失了.據我所知,這跟MS-DOS的發布基本是同步的.(Larry DeLuca)
8、計算機會不會思考這個問題就像問潛水艇會不會游泳一樣.(Edsger W. Dijkstra,圖靈獎獲得者)
9、活了一百年卻只能記住30M位元組是荒謬的.你知道,這比一張壓縮盤還要少.人類境況正在變得日趨退化.(Marvin Minsky,人工智慧研究的奠基人) 信任
10、這座城市的中央計算機告訴你的?R2D2,你不該相信一台陌生的計算機!(C3PO,星球大戰中的翻譯機器人)
11、永遠不要相信一台不能扔掉一扇窗戶*的計算機(斯蒂夫沃茲尼亞克,蘋果聯合創始人)
12、硬體:計算機系統中可被踢的部分.(Jeff Pesis)
13、今天大部分的軟體都很像上百萬塊磚堆疊在一起組成的埃及金字塔,缺乏結構完整性,只能靠強力和成千上萬的奴隸完成.(阿倫凱,圖靈獎獲得者,面向對象創始人)
14、我終於明白'向上兼容性'是怎麼回事了.這是指我們得保留所有原有錯誤.(Dennie van Tassel)
15、有兩樣重要產品出自伯克利:LSD和BSD*.我們不相信這是個巧合.(Jeremy S. Anderson)
16、2038年1月19日,凌晨3點14分07秒(UNIX中的世界末日*1970年1月1號之後的2^32秒)
17、每個操作系統都差不多 我們都一樣的爛.(微軟的高級副總裁布萊恩瓦倫蒂尼這樣描述操作系統的安全狀況,2003)
18、微軟有出了個新版本,Windows XP,據大家說是'有史以來最穩定的Windows', 對我而言, 這就好像是在說蘆筍是'有史以來發音最清脆的蔬菜一樣' (Dave Barry)
19、互聯網?那個東西還在嗎?(Homer Simpson)
20、網路就像是個母夜叉.我每轉到一處都會看見小個的按鈕命令我提交*.(Nytwind)
21、想想看吧,已經有一百萬只猴子坐在一百萬台打字機旁,可Usenet就是比不上莎士比亞.(Blair Houghton)
22、計算機軟體產業最為驚人的成就,是其持續不斷地放棄硬體產業的驚人成果和穩定性.(Henry Petroski)
23、真正的創新經常來自於那些貼近市場、但無力擁有市場的的小型初創公司.(Timm Martin)
24、人們常說,偉大的科學學科就像是站在其它巨人肩膀上的巨人.人們也說過,軟體產業正如站在其他侏儒腳上的侏儒.(Alan Cooper,交互設計之父)
25、這無關比特、位元組和協議,而關乎利潤和損益.(郭士納,IBM前CEO)
26、我們是微軟.反抗是徒勞的.你會被同化的.(保險杠貼紙)
27、不管演示在綵排的時候有多好,一旦在觀眾面前展示時,演示不出錯的幾率與觀眾人數成反比,與投入的金錢總額成正比.(Mark Gibbs)
28、專利大多數都是垃圾.浪費時間去閱讀這些專利是愚蠢的.只有專利持有人才會這么干,還得強迫自己才會看.(Linus Torvalds,LINUX創始人)
29、控制復雜性是計算機編程的本質.(Brian Kernigan)
30、復雜性殺死一切.它把程序員的生活給搞砸了,它令產品難以規劃、創建和測試,帶來了安全挑戰,並導致最終用戶和管理員沮喪不已.(Ray Ozzie)
31、進行軟體設計有兩種方式.一種是讓它盡量簡單,讓人看不出明顯的不足.另一種是弄得盡量復雜,讓人看不出明顯的缺陷.(C.A.R. Hoare)
32、好的軟體的作用是讓復雜的東西看起來簡單.(Grady Booch,UML創始人之一) 易用性
33、不管那些計算機書籍如何宣稱,只需記住,你並非'傀儡'.真正的傀儡是那些無法設計出易於使用的硬體和軟體的那些人,盡管他們是技術專家,因為這是普通消費者賴以生活的東西.(Walter Mossberg,科技專欄記者)
34、軟體供應商在努力嘗試讓他們的軟體更'易於操作' 迄今為止,他們最好的辦法就是翻出所有的老手冊,然後在封面蓋上'易於操作'這幾個字.(比爾蓋茨)
35、有個老套的故事說有人希望他的計算機能像他的電話機一樣好用.他的願望實現了,因為我已經不知道該如何使用自己的電話了.(BjarneStroustrup,C++之父)
36、任何一個傻瓜都會用電腦.很多都會.(Ted Nelson)
37、只有兩個行業把客戶稱為'用戶'*.(Edward Tufte,信息設計大師)
38、程序員在跟宇宙賽跑,他們在努力開發出更大更好的傻瓜程序,而宇宙則努力培養出更大更好的白痴.到目前為止,宇宙領先.(Rich Cook)
39、你們當中很多人都知道程序員的美德.當然啦,有三種:那就是懶惰、急躁以及傲慢.(Larry Wall,Perl發明者)
40、程序員的問題是你無法預料他在做什麼,直到為時已晚.(Seymour Cray,超級計算機之父)
41、那就是這些自認為痛恨計算機的人的真實面目.他們實際上真正痛恨的是糟糕的程序員.(拉瑞尼文,科幻作家)
42、很長時間以來我一直困惑不已,為什麼一些又貴又先進的東西會一點用都沒有.直到我突然想起,計算機不就是一台愚蠢之至卻擁有難以置信的做聰明事能力 的機器嘛,而程序員不就是聰明絕頂卻擁有難以置信的.干蠢事的能力的人嘛.一句話,他們簡直就是天生絕配.(比爾布萊森,旅遊文學作家)
43、不像學學塗塗畫畫也能讓某人成為專家級畫家,計算機科學教育不會讓任何人成為一名編程大師.(埃里克雷蒙,開源運動領袖)
44、一個程序員是經歷以下事情後仍能證明自己是嚴格的專家的人:他可以歷經數不清的捶打,可取材於無關緊要的文檔,用上面的爭議數據作出模糊假設,並以 此計算出測微精度的無數片面理解的答案,並由一個不可靠、腦袋充滿質疑、公
開宣稱要讓一個倒霉透頂、沒有指望、毫無防備,要求第一時間獲得信息的部門狼狽 不堪、令人生厭的人使用一台准確度有問題的儀器去實施.(IEEE網格新聞雜志)
45、運氣好的黑客能用幾個月的時間 - 生產出一個小規模的開發團體(比如說,7-8人)歷盡艱辛一起工作了一年多才能做出來的東西.IBM經常報告說某些程序員的生產力要比其它工人高百倍,甚至更多.(Peter Seebach,黑客)
46、最好的程序員跟好的程序員相比可不止好那麼一點點.這種好不是一個數量級的,取決於標准怎麼定:概念創造性、速度、設計的獨創性或者解決問題的能力.(蘭德爾E斯特勞斯,科技作家)
47、偉大的車工值得給他幾倍於普通車工的薪水,但一個偉大的軟體代碼作家,其價值則要等同於一個普通的軟體寫手的價格的1萬倍.(比爾蓋茨)
48、就算它工作不正常也別擔心.如果一切正常,你早該失業了.(Mosher的軟體工程定律)
49、靠代碼行數來衡量開發進程就好比用重量來衡量飛機製造的進度.(比爾蓋茨)
50、寫代碼的社會地位比盜墓的高,比管理的低.(傑拉爾德溫伯格,軟體與系統思想家)
51、首先學習計算機科學及理論.接著形成自己編程的風格.然後把這一切都忘掉,盡管改程序就是了.(George Carrette,傑出軟體工程師,開源推廣者)
52、先解決問題再寫代碼.(John Johnson)
53、樂觀主義是編程行業的職業病;用戶反饋則是治療方法.(Kent Beck)
54、迭代者為人,遞歸者為神.(L. Peter Deutsch)
55、布爾值最好的一點是,就算你錯了,也頂多錯了一位而已.(無名氏)
56、數組的下標是從0開始好還是從1開始好呢?我的0.5的折衷方案,以我之見,沒有經過適當考慮就被否決掉了.(Stan Kelly-Bootle)
57、只有兩種編程語言:一種是天天挨罵的,另一種是沒人用的.(BjarneStroustrup,C++之父)
Ⅵ 作為程序員提高編程能力的幾個基礎演算法
一:快速排序演算法
快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序n個項目要Ο(nlogn)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(nlogn)演算法更快,因為它的內部循環(innerloop)可以在大部分的架構上很有效率地被實現出來。
快速排序使用分治法(Divideandconquer)策略來把一個串列(list)分為兩個子串列(sub-lists)。
演算法步驟:
1從數列中挑出一個元素,稱為「基準」(pivot),
2重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱為分區(partition)操作。
3遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞歸下去,但是這個演算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。
二:堆排序演算法
堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序演算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
堆排序的平均時間復雜度為Ο(nlogn) 。
創建一個堆H[0..n-1]
把堆首(最大值)和堆尾互換
3.把堆的尺寸縮小1,並調用shift_down(0),目的是把新的數組頂端數據調整到相應位置
4.重復步驟2,直到堆的尺寸為1
三:歸並排序
歸並排序(Mergesort,台灣譯作:合並排序)是建立在歸並操作上的一種有效的排序演算法。該演算法是採用分治法(DivideandConquer)的一個非常典型的應用。
1.申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合並後的序列
2.設定兩個指針,最初位置分別為兩個已經排序序列的起始位置
3.比較兩個指針所指向的元素,選擇相對小的元素放入到合並空間,並移動指針到下一位置
4.重復步驟3直到某一指針達到序列尾
5.將另一序列剩下的所有元素直接復制到合並序列尾
四:二分查找演算法
二分查找演算法是一種在有序數組中查找某一特定元素的搜索演算法。搜素過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數組為空,則代表找不到。這種搜索演算法每一次比較都使搜索范圍縮小一半。折半搜索每次把搜索區域減少一半,時間復雜度為Ο(logn) 。
五:BFPRT(線性查找演算法)
BFPRT演算法解決的問題十分經典,即從某n個元素的序列中選出第k大(第k小)的元素,通過巧妙的分析,BFPRT可以保證在最壞情況下仍為線性時間復雜度。該演算法的思想與快速排序思想相似,當然,為使得演算法在最壞情況下,依然能達到o(n)的時間復雜度,五位演算法作者做了精妙的處理。
1.將n個元素每5個一組,分成n/5(上界)組。
2.取出每一組的中位數,任意排序方法,比如插入排序。
3.遞歸的調用selection演算法查找上一步中所有中位數的中位數,設為x,偶數個中位數的情況下設定為選取中間小的一個。
4.用x來分割數組,設小於等於x的個數為k,大於x的個數即為n-k。
5.若i==k,返回x;若i<k,在小於x的元素中遞歸查找第i小的元素;若i>k,在大於x的元素中遞歸查找第i-k小的元素。
終止條件:n=1時,返回的即是i小元素。
六:DFS(深度優先搜索)
深度優先搜索演算法(Depth-First-Search),是搜索演算法的一種。它沿著樹的深度遍歷樹的節點,盡可能深的搜索樹的分支。當節點v的所有邊都己被探尋過,搜索將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被發現的節點,則選擇其中一個作為源節點並重復以上過程,整個進程反復進行直到所有節點都被訪問為止。DFS屬於盲目搜索。
深度優先搜索是圖論中的經典演算法,利用深度優先搜索演算法可以產生目標圖的相應拓撲排序表,利用拓撲排序表可以方便的解決很多相關的圖論問題,如最大路徑問題等等。一般用堆數據結構來輔助實現DFS演算法。
深度優先遍歷圖演算法步驟:
1.訪問頂點v;
2.依次從v的未被訪問的鄰接點出發,對圖進行深度優先遍歷;直至圖中和v有路徑相通的頂點都被訪問;
3.若此時圖中尚有頂點未被訪問,則從一個未被訪問的頂點出發,重新進行深度優先遍歷,直到圖中所有頂點均被訪問過為止。
上述描述可能比較抽象,舉個實例:
DFS在訪問圖中某一起始頂點v後,由v出發,訪問它的任一鄰接頂點w1;再從w1出發,訪問與w1鄰接但還沒有訪問過的頂點w2;然後再從w2出發,進行類似的訪問,…如此進行下去,直至到達所有的鄰接頂點都被訪問過的頂點u為止。
接著,退回一步,退到前一次剛訪問過的頂點,看是否還有其它沒有被訪問的鄰接頂點。如果有,則訪問此頂點,之後再從此頂點出發,進行與前述類似的訪問;如果沒有,就再退回一步進行搜索。重復上述過程,直到連通圖中所有頂點都被訪問過為止。
七:BFS(廣度優先搜索)
廣度優先搜索演算法(Breadth-First-Search),是一種圖形搜索演算法。簡單的說,BFS是從根節點開始,沿著樹(圖)的寬度遍歷樹(圖)的節點。如果所有節點均被訪問,則演算法中止。
BFS同樣屬於盲目搜索。一般用隊列數據結構來輔助實現BFS演算法。
1.首先將根節點放入隊列中。
2.從隊列中取出第一個節點,並檢驗它是否為目標。
如果找到目標,則結束搜尋並回傳結果。
否則將它所有尚未檢驗過的直接子節點加入隊列中。
3.若隊列為空,表示整張圖都檢查過了——亦即圖中沒有欲搜尋的目標。結束搜尋並回傳「找不到目標」。
4.重復步驟2。
八:Dijkstra演算法
戴克斯特拉演算法(Dijkstra』salgorithm)是由荷蘭計算機科學家艾茲赫爾·戴克斯特拉提出。迪科斯徹演算法使用了廣度優先搜索解決非負權有向圖的單源最短路徑問題,演算法最終得到一個最短路徑樹。該演算法常用於路由演算法或者作為其他圖演算法的一個子模塊。
該演算法的輸入包含了一個有權重的有向圖G,以及G中的一個來源頂點S。我們以V表示G中所有頂點的集合。每一個圖中的邊,都是兩個頂點所形成的有序元素對。(u,v)表示從頂點u到v有路徑相連。我們以E表示G中所有邊的集合,而邊的權重則由權重函數w:E→[0,∞]定義。因此,w(u,v)就是從頂點u到頂點v的非負權重(weight)。邊的權重可以想像成兩個頂點之間的距離。任兩點間路徑的權重,就是該路徑上所有邊的權重總和。已知有V中有頂點s及t,Dijkstra演算法可以找到s到t的最低權重路徑(例如,最短路徑)。這個演算法也可以在一個圖中,找到從一個頂點s到任何其他頂點的最短路徑。對於不含負權的有向圖,Dijkstra演算法是目前已知的最快的單源最短路徑演算法。
1.初始時令S=,T=,T中頂點對應的距離值
若存在<V0,Vi>,d(V0,Vi)為<V0,Vi>弧上的權值
若不存在<V0,Vi>,d(V0,Vi)為∞
2.從T中選取一個其距離值為最小的頂點W且不在S中,加入S
3.對其餘T中頂點的距離值進行修改:若加進W作中間頂點,從V0到Vi的距離值縮短,則修改此距離值
重復上述步驟2、3,直到S中包含所有頂點,即W=Vi為止
九:動態規劃演算法
動態規劃(Dynamicprogramming)是一種在數學、計算機科學和經濟學中使用的,通過把原問題分解為相對簡單的子問題的方式求解復雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。
動態規劃背後的基本思想非常簡單。大致上,若要解一個給定問題,我們需要解其不同部分(即子問題),再合並子問題的解以得出原問題的解。通常許多子問題非常相似,為此動態規劃法試圖僅僅解決每個子問題一次,從而減少計算量:一旦某個給定子問題的解已經算出,則將其記憶化存儲,以便下次需要同一個子問題解之時直接查表。這種做法在重復子問題的數目關於輸入的規模呈指數增長時特別有用。
關於動態規劃最經典的問題當屬背包問題。
1.最優子結構性質。如果問題的最優解所包含的子問題的解也是最優的,我們就稱該問題具有最優子結構性質(即滿足最優化原理)。最優子結構性質為動態規劃演算法解決問題提供了重要線索。
2.子問題重疊性質。子問題重疊性質是指在用遞歸演算法自頂向下對問題進行求解時,每次產生的子問題並不總是新問題,有些子問題會被重復計算多次。動態規劃演算法正是利用了這種子問題的重疊性質,對每一個子問題只計算一次,然後將其計算結果保存在一個表格中,當再次需要計算已經計算過的子問題時,只是在表格中簡單地查看一下結果,從而獲得較高的效率。
十:樸素貝葉斯分類演算法
樸素貝葉斯分類演算法是一種基於貝葉斯定理的簡單概率分類演算法。貝葉斯分類的基礎是概率推理,就是在各種條件的存在不確定,僅知其出現概率的情況下,如何完成推理和決策任務。概率推理是與確定性推理相對應的。而樸素貝葉斯分類器是基於獨立假設的,即假設樣本每個特徵與其他特徵都不相關。
樸素貝葉斯分類器依靠精確的自然概率模型,在有監督學習的樣本集中能獲取得非常好的分類效果。在許多實際應用中,樸素貝葉斯模型參數估計使用最大似然估計方法,換言樸素貝葉斯模型能工作並沒有用到貝葉斯概率或者任何貝葉斯模型。
盡管是帶著這些樸素思想和過於簡單化的假設,但樸素貝葉斯分類器在很多復雜的現實情形中仍能夠取得相當好的效果。
通過掌握以上演算法,能夠幫你迅速提高編程能力,成為一名優秀的程序員。
Ⅶ 程序員自學編程的6種方法,高效學習
1、最好的學習方式
對干初學者來說,可以採用視頻+書籍的方式進行學習。這兩種方式形成互補關系。另外閱讀代碼也可以幫助你解決問題,了解最佳做法,這里的閱讀代碼是指書籍,指芹皮博客文章,開源代碼等等。編程教學視頻可以讓你迅速掌握編程語法等等,但通常比較生動、淺顯,不成系統。而書本是比較系統,深入,但是枯燥,所以最好的方法是書和視頻結合。
但在閱讀代碼後,你需要自己實際去寫代碼。可以是任何東西。可以是小的編碼任務或者是一個小模塊,必須確保你能將之付諸干實踐,並用某種方式使用你學到的東西。如果你不這樣做,你會發現自己面對編輯器會無從下手。知識等待使用的時間越長,知識這把斧頭就越鈍。等待學習新知識的時間越久,你就越難以將其融入到代碼中。
2、入門期堅持學習
自學編程難免遇到這種現象:學了一兩個月,發現自己會的不多。編程在一開始不會有那麼大的反饋,這種現象非常正常!關鍵是你要堅持個三個月到半年的時間,熬過這個艱難的入門期。推薦三件事情以避免僵局。第一是試著閱讀更多關干技術的文章,並總體掌握正在發生什麼。通常,當你陷入困境時,意味著你對需要澄清的事情做出了不正確的假設。
第二是咨詢互聯網。這一點很顯然是值得一提。在網上查找並詢問有過這個問題的人是一個非常重要的技能。Stackoverflow可以說是互聯網上最好的網站。不要害怕在那裡問自己的問題。通常,只要盡力正確地闡述你的問題就OK7。小編的第三個建議是向你認識的人請求幫助。
3、初學者盡量不要鑽牛角尖
對幹人生來說,其中任何目標的實現都離不開耐心。編程學習就如其它任何學習任務一樣,都需要反復努力並投入大量時間。如果遇到難題,耗了半天時間還是沒弄懂,可以暫時跳過,知識積累到一定程度,回頭再進行解決你會發現簡單多了。不要一味的去鑽牛角尖,一定要解決,這樣會耗費大量的時間與精力。
4、尋找良師益友
學習編程的一個很好的方法就是和其他的程序員交談。不必談論任何特定的內容。可以是你正在學習的東西,也可以是你認為很酷的東西,更可以是你正在工作的東西,皆可。你會發現很多程序員並不喜歡只是聊編程。這樣做可能會讓你學到很多關干庫,伺服器,編程語言和模式方面的知識。
但是,最重要的是,你將了解到其他人是如何看待編程的。你會發現,你認為理所當然或從來沒有考慮的事情在人與人之間是非常不同的。還有你遇到的那些小問題,已經有無數前輩也曾遇到過,他們總結了並分享在互聯網上了,前人的經驗是你的寶貴資源,要善干利用谷歌等軟體。
5、有目的的練習
不要想著學習完就可以賺1W+這樣很容易放棄編程,編程語言是一個很大的知識庫,需要你不斷的學習。最好是奔著一個小項目而學習編程,當你把作品做出來了,有7成就感,同時基本上具備找工作的能力,就找個初級的開發崗位,再進階,你的自學之路功與名都有了。沒有什麼可以與工作干自己的項目以學習編程更有用的了。
有了一個點子並試圖實現這個點子是非常具有挑戰性的。它需要很強的自律心及耐心。但是,通過嘗試實際做一件事情,你可以學到如何分解問題並應用技術。你面對的各種問題,以及你如何解決它們才真正是唯差所謂的編程。此外,想要完成項目的驅動力首毀是繼續學習的動力。從業余項目獲得的滿足感遠遠超過你在抽象中學習東西的滿足感。
6、完美主義者和搬運工的區別
編程是一門手藝,需要反復練習,脫離書本和視頻看是否能獨立實現?學到最後的境界無非就是:我亦無他,惟手熟爾。有兩種類型的程序員,完美主義者和搬運工。有些人希望一切都是正確的,他們希望完美,他們希望遵循所有的最佳實踐,並寫出漂亮的優雅的代碼。
他們想要理解每一行代碼。有別干那些不管三七二十一,只要自己的代碼能工作即可,即使對代碼庫有損害的人。平衡這兩種技能是非常重要的。有時你應該深入鑽研一個問題或項目,看看發生了什麼。有時你應該讓它工作即可,即使你不知道發生了什麼。
Ⅷ 雷軍的英文非常一般,他在22年前究竟是怎樣寫代碼的
雷軍的英文確實非常一般,但是這並不影響他22年前做程序員時寫代碼,因為他有著很強大的記憶力,並且非常熱愛編程。雷軍的英文水平眾所周知,但他在開辦小米公司以前,從事的是一份程序員的生活。程序員編程時對英語是比較需要的,但雷軍沒有因為英語不好而受到限制,反而靠著強大的記憶力來解決了英語不好的問題。
雷軍認為,編程的工作同石匠的工作相類似,即是技術活,也是體力活,而編寫優秀的軟體,算是一件比較難的事。編程是一門技術活,因此才有可能大規模地進行,進而才會有軟體工程。此外,因為編程是一種藝術,因此有很多好的產品。
Ⅸ 本人是一個老程序員,目前想學習3D編程,請問3D方面的基礎知識可以看哪本書不拘泥於編程語言,求經典。
1、WINDOWS 3D編程
《WINDOWS 3D編程》主要內容:Learn to create 3D graphics for Windows-from programming legend Charles Petzold.Get a focused introction to programming 3D graphics with the Windows Presentation Foundation 3D API. Complementing his book Applications =Code + Markup, award-winning author Charles Petzold builds on XAML essentials, teaching you how to display and animate 3D graphics under the Microsoft .NET Framework 3.0 and Windows VistaTM. You'll get expert guidance and code samples in XAML and Microsoft Visual C#-helping you master the skills you need to create high-fidelity user interfaces.
Discover how to:
Define complex 3D obiects with triangle meshes
Enhance the illumination of 3D surfaces with light and shading effects
Color 3D figures with gradients, bitmaps, and drawings
Add animation with transforms and vertex manipulation
Represent linear, affine, and camera transforms by using matrices
Calculate vector angles, angles of rotation, and axes of rotation
Generate triangle meshes efficiently by using C# code
Express rotation by using quaternion computation
Provide a user interface for manipulating and drawing 3D figures
目錄
--------------------------------------------------------------------------------
1 Lights! Camera! Mesh Geometries!
Sorting Out the Classes
2 Transforms and Animation
3 Axis/Angle Rotation
4 Light and Shading
SpotLight and PointLight
5 Texture and Materials
6 Algorithmic Mesh Geometries
7 Matrix Transforms
8 Quaternions
9 Applications and Curiosa
/******************************************************************************************************************/
2、java 3d編程實踐:網路上的三維動畫
目錄:
第1章 全世界都能看到的三維動畫
1. 1 初識java 3d
1. 1. 1 網路時代需要java 3d
1. 1. 2 java 3d是什麼
1. 1. 3 java 3d的應用場合舉例
1. 2 java 3d運行及開發環境的安裝
1. 2. 1 最新版java 3d的安裝
1. 2. 2 老版本的安裝步驟
1. 3 體驗java 3d編程
1. 3. 1 第一個java 3d程序:hello
1. 3. 2 java 3d的編程思想
1. 4 在網上發布java 3d程序
1. 5 java 3d的網路資源和學習資料
1. 5. 1 主要網站
1. 5. 2 各種文檔
1. 5. 3 軟體資源
第2章 基本形體的生成
2. 1 基本立體形體的生成
2. 1. 1 從一個簡單的程序說起
2. 1. 2 創建場景圖
2. 1. 3 高層java 3d類
2. 1. 4 編寫java 3d程序的一般步驟
2. 1. 5 激活和編譯
2. 1. 6 內容子圖的創建
2. 1. 7 mycone程序中使用的java 3d類
2. 1. 8 幾何體工具類
2. 1. 9 高級主題:基本幾何體
2. 1. 10 能力和性能
2. 2 點. 線. 面的生成
2. 2. 1 幾何體類
2. 2. 2 點的生成
2. 2. 3 直線的生成
2. 2. 4 面的生成
2. 3 曲面的可視化
2. 4 2d和3d文本的生成
2. 4. 1 2d文本的生成
2. 4. 2 3d文本的生成
2. 5 appearance. shape3d和bounds對象的使用
2. 5. 1 appearance對象
2. 5. 2 shape3d對象
2. 5. 3 bounds對象
第3章 形體的組合
3. 1 形體的分組
3. 1. 1 group對象
3. 1. 2 branchgroup對象和orderedgroup對象
3. 1. 3 decalgroup對象
3. 1. 4 switch對象
3. 1. 5 sharedgroup對象
3. 2 幾何變換
3. 2. 1 transformg
/*********************************************************************************************************/
3、Directx 3D 游戲編程實用教程
目錄
--------------------------------------------------------------------------------
第一篇 d游戲編程基礎
第1章 windows編程基礎
1.1 簡單的windows應用程序
1.1.1 創建windows應用程序項目
1.1.2 配置、生成及運行項目
1.2 windows應用程序結構
1.2.1 數據類型
1.2.2 入口函數
1.2.3 注冊窗口類
1.2.4 創建並顯示窗口
1.3 windows消息機制
1.3.1 消息隊列
1.3.2 消息循環
1.3.3 消息處理
1.4 匈牙利命名法
1.4.1 類型和常量的命名
1.4.2 變數的命名
1.4.3 函數和參數的命名
1.4.4 類的命名
1.5 本章小結
第2章 direct3d編程基礎
2.1 directx概述
2.1.1 directx的發展過程
2.1.2 directx的組成部分
2.1.3 direct3d與com
2.1.4 direct3d介面對象
2.2 direct3d渲染流水線
2.2.1 渲染流水線
2.2.2 靈活頂點格式
2.2.3 d3d中的顏色
2.2.4 d3d中的圖元
2.3 direct3d程序結構
2.3.1 簡單的direct3d應用程序
2.3.2 創建direct3d介面對象
2.3.3 獲取硬體設備信息
2.3.4 創建direct3d設備介面
2.3.5 開始direct3d圖形繪制
2.3.6 結束並清理對象資源
2.4 頂點緩存
2.4.1 創建頂點緩存
2.4.2 訪問頂點緩存
2.4.3 使用頂點緩存繪制圖形
2.4.4 頂點緩存的繪制示例
2.5 索引緩存
2.5.1 創建索引緩存
2.5.2 訪問索引緩存
2.5.3 使用索引緩存繪制圖形
2.5.4 索引緩存的繪制示例
2.6 direct3d渲染狀態
2.6.1 剔除狀態
2.6.2 著色狀態
2.6.3 填充狀態
2.7 本章小結
第3章 基本的數學基礎
3.1 坐標空間
3.1.1 d笛卡兒坐標系
3.1.2 多坐標系統
3.2 向量
3.2.1 向量的基本概念
3.2.2 向量的基本運算
3.2.3 d3d中的向量
3.3 矩陣
3.3.1 矩陣的基本概念
3.3.2 矩陣的基本運算
3.3.3 矩陣的基本變換
3.3.4 d3d中的矩陣
3.4 平面及射線
3.4.1 平面的定義
3.4.2 點與平面的關系
3.4.3 射線的定義
3.4.4 射線與平面的關系
3.5 空間坐標變換
3.5.1 世界變換
3.5.2 取景變換
3.5.3 投影變換
3.5.4 視口變換
3.6 空間坐標變換示例
3.7 本章小結
第二篇 d游戲圖形渲染
第4章 光照與材質
4.1 光照模型
4.1.1 環境光
4.1.2 漫反射光
4.1.3 鏡面反射光
4.2 光源類型
4.2.1 點光源
4.2.2 方向光
4.2.3 聚光燈
4.3 物體的材質
4.3.1 d3d材質
4.3.2 頂點法線
4.4 光照與材質示例
4.5 本章小結
第5章 紋理映射
5.1 紋理映射基礎
5.1.1 紋理坐標
5.1.2 創建紋理
5.1.3 啟用紋理
5.1.4 創建紋理示例
5.2 紋理過濾
5.2.1 最近點采樣過濾
5.2.2 線性紋理過濾
5.2.3 各向異性過濾
5.2.4 多級漸進過濾
5.2.5 紋理過濾示例
5.3 紋理定址
5.3.1 重復定址
5.3.2 鏡像定址
5.3.3 夾取定址
5.3.4 邊框顏色定址
5.3.5 紋理定址示例
5.4 紋理包裝
5.4.1 紋理包裝原理
5.4.2 紋理包裝示例
5.5 本章小結
第6章 網格模型
6.1 網格模型基礎
6.1.1 網格的子集及屬性
6.1.2 網格的鄰接信息
6.1.3 網格的創建及繪制
6.1.4 創建及繪制網格示例
6.2 網格的優化及克隆
6.2.1 優化網格
6.2.2 克隆網格
6.3 x文件格式分析
6.3.1 模板的定義
6.3.2 常用的模板類型
6.3.3 x文件的結構
6.4 從x文件創建網格
6.4.1 載入網格模型數據
6.4.2 獲取紋理和材質信息
6.4.3 繪制網格模型
6.4.4 讀取x文件示例
6.5 創建漸進網格模型
6.5.1 id3dxpmesh介面
6.5.2 創建並繪制漸進網格
6.5.3 創建漸進網格示例
6.6 d3d中的幾何體
6.7 本章小結
第7章 深度、融合及模板
7.1 深度測試
7.1.1 深度緩存
7.1.2 深度測試
7.1.3 深度測試示例
7.2 融合技術
7.2.1 融合因子
7.2.2 alpha來源
7.2.3 啟用alpha融合
7.2.4 alpha融合示例
7.3 模板技術
7.3.1 模板緩存
7.3.2 模板測試
7.3.3 更新模板緩存
7.4 鏡面效果
7.4.1 鏡面成像原理
7.4.2 實現鏡面效果
7.5 本章小結
第8章 hlsl語言基礎
8.1 hlsl概述
8.1.1 可編程管線
8.1.2 hlsl工作模型
8.2 簡單的hlsl程序
8.2.1 編寫hlsl代碼
8.2.2 hlsl關鍵字和保留字
8.2.3 hlsl預處理指令
8.2.4 輸入、輸出結構
8.2.5 hlsl入口函數
8.3 hlsl基本語法
8.3.1 hlsl中的變數
8.3.2 hlsl中的函數
8.4 d3d與hlsl交互
8.4.1 編譯著色器程序
8.4.2 獲取常量的句柄
8.4.3 設置常量的值
8.5 hlsl程序示例
8.6 本章小結
第9章 著色器與效果
9.1 頂點著色器
9.1.1 創建頂點聲明
9.1.2 使用頂點著色器
9.1.3 頂點著色器示例
9.2 漸變動畫效果
9.2.1 漸變動畫原理
9.2.2 實現漸變動畫
9.3 像素著色器
9.3.1 創建像素著色器
9.3.2 使用像素著色器
9.4 多重紋理混合
9.4.1 hlsl采樣器
9.4.2 多重紋理坐標
9.4.3 啟用多重紋理
9.4.4 多重紋理示例
9.5 效果框架
9.5.1 通道與手法
9.5.2 著色器內置對象
9.5.3 效果中的渲染狀態
9.5.4 創建效果框架
9.5.5 效果中常量的設置
9.5.6 使用效果框架
9.5.7 效果框架示例
9.6 本章小結
第三篇 d游戲輸入控制
第10章 directx輸入控制
10.1 directinput介面
10.2 使用directinput介面
10.2.1 directinput的初始化
10.2.2 創建設備介面對象
10.2.3 設置數據格式
10.2.4 設置協作級別
10.2.5 設置特殊屬性
10.2.6 獲取、輪詢設備
10.2.7 讀取設備數據
10.3 使用directinput處理鍵盤
10.3.1 初始化鍵盤設備介面
10.3.2 獲取輸入的鍵盤數據
10.3.3 鍵盤輸入控制示例
10.4 使用directinput處理滑鼠
10.4.1 在d3d中移動滑鼠
10.4.2 初始化滑鼠設備介面
10.4.3 獲取滑鼠的移動位置
10.4.4 滑鼠輸入控制示例
10.5 使用directinput處理游戲桿
10.5.1 游戲桿及其控制原理
10.5.2 初始化游戲桿設備介面
10.5.3 讀取游戲桿的狀態數據
10.5.4 游戲桿輸入控制示例
10.6 本章小結
第四篇 d游戲應用編程
第11章 攝像機、地形及天空
11.1 虛擬攝像機
11.1.1 攝像機的屬性
11.1.2 攝像機的變換
11.1.3 攝像機的實現
11.1.4 攝像機應用示例
11.2 三維地形系統
11.2.1 地形高度圖
11.2.2 頂點的計算
11.2.3 索引的計算
11.2.4 地形的繪制
11.2.5 地形類的實現
11.2.6 地形繪制示例
11.3 球形天空頂
11.3.1 頂點的計算
11.3.2 索引的計算
11.3.3 天空的繪制
11.3.4 天空類的實現
11.3.5 天空繪制示例
11.4 本章小結
第12章 文字、拾取及碰撞檢測
12.1 字體及文本繪制
12.1.1 繪制2d文本
12.1.2 繪制3d文本
12.1.3 文本繪制示例
12.2 拾取技術
12.2.1 網格外接體
12.2.2 拾取技術原理
12.2.3 拾取應用示例
12.3 碰撞檢測
12.3.1 邊界球碰撞檢測
12.3.2 aabb碰撞檢測
12.3.3 obb樹碰撞檢測
12.3.4 aabb碰撞檢測示例
12.4 本章小結
第13章 骨骼動畫
13.1 x文件中的骨骼信息
13.1.1 骨骼蒙皮信息
13.1.2 骨骼層次信息
13.1.3 模型動畫信息
13.2 載入骨骼動畫數據
13.2.1 擴展結構體
13.2.2 載入x文件
13.2.3 callocatehierarchy類
13.2.4 生成蒙皮網格
13.3 頂點混合技術
13.3.1 頂點混合原理
13.3.2 索引頂點混合
13.4 骨骼動畫的繪制
13.4.1 開啟頂點混合
13.4.2 更新骨骼矩陣
13.4.3 繪制骨骼動畫
13.5 骨骼動畫控制器
13.5.1 使用動畫控制器
13.5.2 平滑過渡動畫集
13.6 骨骼動畫示例
13.7 本章小結
第14章 實時陰影
14.1 平面陰影的原理
14.1.1 點光源平面陰影
14.1.2 方向光平面陰影
14.2 平面陰影的實現
14.2.1 計算陰影矩陣
14.2.2 平面陰影的繪制
14.2.3 平面陰影示例
14.3 體積陰影的原理
14.3.1 模型陰影體
14.3.2 陰影錐的計算
14.4 體積陰影的實現
14.4.1 體積陰影的繪制
14.4.2 體積陰影示例
14.5 陰影貼圖的原理
14.6 本章小結
第15章 廣告牌技術與粒子系統
15.1 廣告牌技術
15.1.1 廣告牌的原理
15.1.2 廣告牌的實現
15.1.3 廣告牌示例
15.2 粒子系統
15.2.1 粒子系統的原理
15.2.2 粒子系統的實現
15.2.3 粒子系統的更新
15.2.4 粒子系統的繪制
15.3 粒子系統示例
15.3.1 煙花示例
15.3.2 噴泉示例
15.4 本章小結
第16章 霧化及lod地形
16.1 霧化效果
16.1.1 霧化混合因子
16.1.2 頂點霧化
16.1.3 像素霧化
16.1.4 范圍霧化
16.2 lod地形原理
16.2.1 lod四叉樹演算法
16.2.2 lod地形的實現
16.2.3 節點剔除原理
16.2.4 節點簡化准則
16.2.5 地形裂縫的處理
16.2.6 地形的更新及繪制
16.3 lod地形示例
16.4 本章小結
第五篇 d游戲音頻輸出
第17章 direct3d音頻控制
17.1 音頻文件格式
17.1.1 音頻的基本概念
17.1.2 wav音頻格式
17.1.3 midi音頻格式
17.1.4 mp3音頻格式
17.2 使用directsound處理音頻
17.2.1 directsound的結構
17.2.2 directsound的初始化
17.2.3 directsound音頻緩沖
17.2.4 向緩沖區中寫入數據
17.2.5 播放聲音及音頻控制
17.2.6 用directsound反饋信息
17.2.7 directsound應用示例
17.3 使用directmusic處理音頻
17.3.1 directmusic的結構
17.3.2 開始使用directmusic
17.3.3 載入、操作midi段
17.3.4 directmusic應用示例
17.4 使用directshow處理音頻
17.4.1 directshow的工作原理
17.4.2 directshow的初始化
17.4.3 載入流媒體數據
17.4.4 控制流媒體的播放
17.4.5 directshow應用示例
17.5 本章小結
第六篇 d游戲網路通信
第18章 direct3d網路控制
18.1 了解網路互聯
18.1.1 網路會話模型
18.1.2 定址與通信協議
18.2 directplay概述
18.2.1 創建和管理會話
18.2.2 directplay傳輸協議
18.2.3 directplay網路對象
18.2.4 玩家與游戲大廳
18.3 客戶/服務會話
18.3.1 初始化網路對象
18.3.2 選擇服務提供者
18.3.3 使用directplay地址
18.3.4 建立客戶/服務會話
18.3.5 發送、接收數據
18.3.6 創建並使用分組
18.3.7 結束及終止會話
18.4 游戲大廳的支持
18.4.1 游戲大廳的結構
18.4.2 實現游戲大廳客戶端
18.4.3 實現支持大廳的程序
18.5 客戶/服務會話示例
18.5.1 創建服務端程序
18.5.2 創建客戶端程序
18.6 本章小結
附 錄
附錄a directx9 sdk的安裝與配置
a.1 安裝directx
a.2 配置開發環境
a.3 瀏覽directx示例
附錄b dxut程序框架介紹
b.1 創建dxut項目
b.2 dxut框架的初始化
b.3 創建應用程序窗口
b.4 創建direct3d設備
b.5 dxut的事件處理
b.5.1 框架事件
b.5.2 設備事件
b.5.3 消息事件
b.6 dxut的錯誤處理
Ⅹ 為什麼很多老程序員討厭中文編程
英文編程已經先入為主了
已經做了好多年程序員,已經習慣於現有的編程體系,使用起來已經的心應手了,從心裡上覺得沒必要切入到中文編程語言的學習,而且畢竟易語言在誕生初期,由於時間和技術上的限制存很多的問題,所以在心理上不接受也是特別正常的事情。
畢竟已經形成的多年的習慣,再加上工作上沒有直接切入的交集,因為現在絕大部分的程序員還是用英文編寫程序,習慣看英文的文檔,寫英文的注釋,這種不能簡單的理解成不愛國或者別的情懷,有更加合適的語言為啥不去使用,要想中文的編程語言大規模的普及,必須找到歷史的契機點,並且經過多個版本的疊加,慢慢形成自己的生態鏈。
很多人為了學習英文編程,當年也是廢了九牛二虎之力把四級過了,讓直接切換到新的語言,顯然不是很現實。