選擇編程開發書籍的反思

以何種目的選擇編程開發書籍?我對選擇編程開發書籍的反思和總結。

選編程開發書籍之前,應確認抱着何種目的(進行編程開發)?

目的:實際項目/工程、商業成功、快速開發、非課堂書籍
而非:課堂書籍、學院派、技術研究

軟件開發目標
==========

根據行業性質,不同的領域/產品對性能的考量不同,不可一刀切(選書、技能訓練、學習計劃)。

什麼是行業範疇:
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/

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