差異程序員-評《編程感悟》

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

云風的《游戲之旅——我的編程感悟》是一本以程序員視角寫的書,在眾多傳道授業解惑的書中,這個類型的書顯得有些另類。在我的藏書中,這樣的書有三本,王軼男的《編程黑馬真言》、梁肇新的《編程高手箴言》和云風的這本《游戲之旅——我的編程感悟》。指望從這種書中獲取知識也許本身就是一種錯誤,雖然不可避免的也能學到一些東西,因為作者的立意就不是教給別人什么東西,只是分享自己的心得,再加上我們實際的背景與作者可能差之千里,所以,看懂字面上的意思就算得上難得了,更何況看透背后的含義呢!但我依然樂于讀這種書,品味作者走過的路,體會作者看待問題的方式,順便開闊一下視野,了解一些不曾了解的東西。

  在這本書的第二章,云風提到了一個問題,今天的許多以程序為生的程序員在工作中感到了理論的脫節,書本上的基本算法和數據結構看似無用。現代編程語言,不再重視程序邏輯的實現和數據的簡單描述方法,而注重問題的分化、類層次的設計、模塊的封裝。

  關于這個問題,我在日常開發中也有一些體會。寫過許多程序,卻少有需要在算法上需要費些思量的地方,大多數程序幾乎可以憑借對軟件開發的直覺就能寫出來,這種情況下,寫程序更多的是在考慮業務問題,而對于計算機知識的關注幾乎被壓到了最低。我曾經疑惑過,如果這就是軟件開發,那么自己學到的計算機知識到底意義何在。借著云風的這個問題,我試著給出一個自己的答案。

  軟件開發是為了用計算機解決實際問題,而程序就是一座架在實際問題和計算機之間的橋梁,程序員的使命就是作為一個翻譯,用程序設計語言讓二者可以進行溝通。從程序設計語言的發展趨勢中,我們可以看出,隨著計算機基礎設施的日益完善,程序設計的中心越發遠離了計算機,而更加靠近問題領域:匯編讓機器碼成為了歷史,而C語言讓程序員不再理會寄存器,C++讓人們更加有效的組織數據,到了Java,內存管理也成了歷史,發展中的MDA讓有意讓模型發揮更大的作用,讓現階段的語言下崗是它的一個努力方向。

  這是一種進步,因為編程的最終目的是為了解決問題,我們很清楚專注的力量,如果能把更多的精力放在問題上,而非其它一些與問題本身無關的內容上,我們可以更快更好的解決問題。像基本算法和數據結構這些東西與問題本身相比,應該算偏計算機方面的東西,隨著程序設計的發展,這些已經成熟的內容逐漸被融入到語言/庫之中,大多數程序員只要做到了解它們的特長,需要時候拿過來用就是了,完全可以不必考慮具體的實現,這樣,精力便更多的放在問題上。實際上,成熟的解決方案應該被隱藏起來,讓人們無視它的存在,從寄存器內存到現在的算法數據結構無不如此,現階段蓬勃發展的是關于設計和架構方面的東西,而在一些UML工具中,我們已經可以看到把隱藏這些東西的苗頭。

  不過,程序設計的發展降低程序員的入門門檻,即便對內存管理一無所知,依然不妨礙我們寫出一個可以運行的程序,這也為造就軟件藍領打開了一道方便之門,但這也讓軟件開發失去了許多應有的樂趣,所以,一些抱怨經常會出現在我們的眼前。

  雖然好多人都說,語言是一種工具,但使用不同語言除了語法上的差異,還存在其背景的差異,這樣的差異使得程序員在運用語言時擁有了不同的思維方式。Java程序員在看待問題上絕對與C程序員存在很多差異,這一點在我原來工作的部門體現極為明顯,Java程序員整天討論的是架構和設計,而C程序員則關注的是內存和算法。原因很簡單,因為這兩種語言生長在不同的土壤里,處于程序設計發展的不同階段,這就造成了二者之間存在迥然不同的思維方式。

  當然,這并不是說后來者就一定比先到者要好。雖然隱藏成熟的解決方案是一件好事,但并不是所有問題都有成熟的解決方案,Intel為我們提供的SIMD(Single-Instruction-Multiple-Data)指令現在就沒有對應C/C++解決方案,如果對它有想法,只有操起更低級的匯編語言了。再者,隱藏是有代價的,Java性能低下的江湖傳言也不是一天兩天了,在一些不得已的情況下,我們只有突破下去解決問題。

  在我看來,如果希望成為一名好的程序員,不但要上得去,也要下得來。隱藏是好的,但一旦出了問題,也許我們不得已要掀開所有封閉的黑盒,而這正是從下起家人的長處,因為他們對計算機本身有著深刻的理解。理解底層技術是不錯,但這往往會讓人的思維稍微有些受限。在這本書第三章中,云風談到了Java時,更多的是從技術層面進行剖析,固然這些內容對Java的成功起到了推波助瀾的作用,但現在的Java更多的是在軟件架構上威風八面。

  不同的程序員卻有著相同的稱號,或許,這就是讓人看不懂的原因吧!每個人有每個人的角色,最重要的是扮演好自己的角色,并不斷從別人身上學習有益的東西。

  dreamhead 發表于

  2005-12-06 22:12 引用Trackback(1) | 編輯

  Comments

  一個團體規模一大就會分化,分工合作才是王道,當然其間的復雜性也會增強,不過這就熵增,是必然

  andjia() 發表于

  2005-12-09 21:58

  我認為從人性上說,人們討論和思考的問題通常是當前碰到的或者未知的問題。在實際工作中,為了某些指定的工作他需要去研究一些當前碰到的問題,去研究層次設計、模塊封裝。對于書本上提到的算法和數據結構對于很多程序原來說是已經知道(C++程序員)。對于很多程序員來說不需要知道(Java)因為有很多東西能夠實現這些功能。很少人會去對一個已經了解的東西去一直研究。所以,這些基本的東西反而不被關注。就像huangyi所說,最終基礎算法程序員和應用程序員也許會變成兩種職業。

  Janhail(spaces.msn.com/members/gamedeveloper/) 發表于

  2005-12-09 12:49

  我想隨著組件技術越來越成熟,工具越來越簡單,程序員變成兩種,一種領域專家,一種科學家.

  前者可能比后者多很多.

  而以后軟件開發越來越簡單,對軟件智能化的需求就多起來,而人工智能,數據挖掘等技術越來越成熟, 我想第二種程序員也需要不少.

  這兩種程序員之間可能不需要怎么交流,就象兩種行業,因為組件技術的成熟,標準的建立,工具的成熟.

  dreamhead 回復huangyi 說:

  或許命名不是很恰當,但意思是對的,關鍵還在于自己走了哪一條。(


網載 2011-02-23 05:03:28

[新一篇] 保護你的代碼——誰動了我的組件?

[舊一篇] 游戲制作策劃人員指南
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表