以何種目的選擇編程開發書籍?我對選擇編程開發書籍的反思和總結。
選編程開發書籍以前,應確認抱着何種目的(進行編程開發)?
目的:實際項目/工程、商業成功、快速開發、非課堂書籍
而非:課堂書籍、學院派、技術研究
軟件開發目標
==========
根據行業性質,不一樣的領域/產品對性能的考量不一樣,不可一刀切(選書、技能訓練、學習計劃)。
什麼是行業範疇:
1. Web 開發、嵌入式開發、平臺中間件開發,這些都不是行業劃分。只是技術。
2. 行業劃分是指:金融領域、遊戲開發、電信通訊,如此的劃分。
一個行業範疇可繼續細分(以體現技術或市場目標),如遊戲開發:
移動遊戲/手遊、桌面遊戲、Web 頁遊、主機遊戲
本文目標:遊戲開發這種對產品的完整性要求很高的領域。
一個好的遊戲首先是一個完成度很高的產品,勝於技術領先但不完整的遊戲(完整性包括可玩性、遊戲元素概念和藝術方面)。
不一樣的公司/團隊(規模、資源、市場)也有着不一樣的目標:
研究型 vs. 開發型
成熟型 vs. 創業型
本文目標:開發型 + 創業型
通常狀況下,應以功能性爲先。
軟件開發的第一目標是:實現最少的完整功能(最小集合),使其成爲可發佈的產品。
警戒如下關鍵字/書名
====================
警戒所謂的高性能編程:
高效 (Efficent)
高性能 (High Performance)
高可靠性 (Hgih Reliability)
大規模的 (Large Scale)
高安全性 (Security)
可擴展的 (Extensibility)
可伸縮的 (Scaleable)
不要首先/過度考慮以上概念,緣由:
1. 會打亂優先級,喧賓奪主,影響聚焦和專一於產品。
2. 影響思惟的連貫性、行動/開發的重點。
3. 它們是錦上添花,而非雪中送炭。
警戒所謂的優秀的編程設計:
程序設計模式 (Programming Desgin) vs. 領域設計 (Design in Domain)
適度學習前者並保持警戒,重視後者
在工做問題中修煉對數據結構/算法的學習(將數據結構應用於實際領域問題),警戒經過數據結構/算法習題刻意訓練。
即使讀過市面上全部的數據結構/算法的書籍,會作全部的習題,也說明不了就能解決實際領域問題,出力不討好。
先找一本合適本身的數據結構/算法的書籍通讀(正文精讀),而後進入實際領域應用(把書看成參考用),如將圖論應用在遊戲地圖尋路、將 BST 應用在遊戲場景/物品管理。
很差的氣味
==========
跟風潮流。警戒熱門技術名詞、好新奇。
知識廣度可經過雜誌期刊略讀翻閱得到,鍛鍊快速閱讀和裁剪知識的能力。
真正的知識仍是要靠系統的書籍/教程學習,並加以實踐。博客文章、碎片摘錄、雜誌期刊、零星技巧都不是學習知識的有效途徑。
真正有價值的知識廣度是跨學科領域的知識,而非多種編程技術,如對遊戲程序員來講,修煉美術/藝術、設計和策劃的技能。
沒有重點和偏向的學習,不深刻高級開發和累積經驗,過長時間停留於通用編程 (General Programming)。典型反例:又 Windows 又 Linux,又 Web 又 C++。
遊戲開發是極重領域知識 + 改進實踐 + 跨學科,是離通用編程很遠的範圍。
糾結於技術末節、陷入問題論:自底向上的堆積技術碎片,不利於收斂到一個完整概念的軟件/產品。
預知問題(不值得),臆斷假設問題的出現(如猜想改進一個高性能服務端將提升網絡吞吐性能),不利於具體現實問題的解決。
緣由:不可能徹底預知問題,那樣的代價太高(學習和開發),應首先遇到實際問題(確實遇到網絡性能瓶頸,並通過驗證確認),而後去找解決方法,結果 -> 反饋 -> 改進,在實踐改進中完成高性能服務端開發的學習,最後將成功和有價值的改進方法和學習方法總結,造成我的/團隊知識庫、企業資產庫。
早期的設計須要一種可擴展的,但又不至於太複雜的架構,以支撐改進。但可擴展的設計自己也會帶來複雜性(學習和開發),須要權衡和經驗累積。
職業規劃 => 作程序員 (General Programming)
引入複雜性
拖延項目
工具異化
搗鼓/鑽研技術的技術宅
好的原則
==========
大局觀:自頂向下的設計和規劃、長遠的有步驟的計劃
放下技術包袱:成功的軟件不須要頂級的技術,而須要適當技術的應用
保持技術的簡單性和直接性 (KISS)
職業規劃 => 作行業專家、領域開發者 (Domain Programming)
可工做的軟件、完整的功能(產品)
可交付的產品
快速開發 (RAD)
可盈利的商品(運做)
Good Artist Copy, Great Artist Steal. 集成和採納已有工做:DRY、類庫、中間件、引擎、設計、運做方式、模仿和改進(但不要流於表面的抄襲和山寨)
敏捷 (Agile)、精益 (Lean)、重視任務和時間管理 GTD (Getting Things Done) http://en.wikipedia.org/wiki/Getting_Things_Done
軟件開發第一原則/目標(開發者的信仰和本源):創造實物、應用爲先、產生價值
開發者的第一願望:創造優質產品(夢想中的遊戲),產生價值和回報,服務和知足生活,成爲人生的贏家
請抱着以上的原則,結合本身的行業領域(遊戲開發)和職業規劃 (Gameplay Programmer) 去選擇編程開發和相關書籍。程序員
文章出自http://www.douban.com/note/241452309/算法