天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

靜思錄 程序第一

  知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。     ——《大學》

  從寫第一個x86程序算起,到現在,轉眼也已有十年。變量、數組、指針、引用、函數、命名空間、封裝、繼承、多態、GP、接口、元數據、反射、FP、DRY、TDD、SOA、WF、LINQ、AOP、DI、LOP ...... 在一條充滿了無數HelloWorld、被拋棄的想法、寒夜孤燈以及工程實踐"血淚史"的道路上,我從一個同學年少變成了奔三程序員"大叔",并且依然義無反顧地向前狂奔著。直到剛剛那一刻,我才突然回過頭,望著那條已經不太能夠看得清起點的來時道路,心生一念:是否應該先停一停,作些不同以往的思考?我為何而來?要向何處去?

  什么是寫程序?為什么寫程序的過程是這樣的?這樣寫程序是正確的嗎?這樣寫程序是唯一正確的方式嗎?現在,我的工作生活中很大一部分時間都是在寫程序;在可以預計的將來,我也不太可能依靠開洗浴中心來討生活。所以我認為認真思考這些問題對我的人生應該是很有幫助的,而對于那些在類似的道路上前行的朋友們,即便不能起到拋磚引玉的作用、達到無心插柳的效果,至少也可以添作飯后茶余一笑。

  好!那么就先停一停,讓我們的視線穿過紛繁蕪雜的名詞,回到那個一切開始的地方——程序。

  按照編程趣味讀物的慣例寫法,時間應該回到19XX年的一個夏夜,年輕的我正為了某個重要的理由在某某平臺上用某某開發工具寫一個叫某某某的程序,接下來就會若有所思地感慨過去2009減19XX年間世道變了許多。但是,事實上我當時正在用VB6為一個同班漂亮女生寫著很蹩腳的五子棋游戲(帶有“很炫”的splash screen),這個例子顯然不夠滄桑與深刻,所以讓我們跳過感慨直入主題。

  牛人說:人類文明運行于軟件之上。竊以為:寫程序便是要把人類的意識固化到計算機當中,讓這些文明與智慧能夠反反復復地運行下去。程序其實并不是在描述客觀世界,而是在描述人們對客觀世界的認識。如果意識是物質的模型,那么程序就是意識的模型。也許這種二階模型的構造、變更與驗證存在著固有的復雜性——寫程序或者更具體地對我而言,開發與維護企業軟件系統相對于吃泡面來說是一件很困難的事情。對于絕大多數困難的事情,不同領域的天才們都曾經給出驚人相似的解決方案——分治復用。面對強大的敵人,我們首先要保存自己,接著忽悠最廣大人民群眾并尋找革命同志,然后奮力挖墻腳,進而剪除頑固不化的死忠,斷水斷電斷煤氣,最后直搗黃龍,這就叫分治;前事不忘,后事之師,面對頻繁的需求變更與一個接一個嶄新的項目,如何能夠避免每次都"重新制造車輪",盡量利用已有的開發成果并且使當前的開發成果能夠被今后的項目利用,這就是復用。分治是復用的先決條件,復用是分治的最終目標。我所能想起的最早的復用,應該就是 jmp 了。沒錯,是個匯編指令。雖然這個指令也用來構造條件分支,但是開發人員確實由此獲得了免于重復輸入相同代碼的能力,只要在適當的時候重新跳回起始地址就好了。此后,goto、do-while、foreach、函數、封裝、繼承、Component、RPC、WebService ... 使得我們可以穿透各種系統邊界在不同的層級上復用已經存在的實現。同時我們還應該注意到實現復用之外的另一條主線:接口復用。封裝、多態、接口、契約、依賴注入等等技術讓我們能夠在系統中引入更多的抽象,使得高層代碼能夠獨立于那些可能會發生變化的具體實現,始終保持不變。當我們懷著庖丁解牛的理想,以復用為最終目的,使用分而治之的策略將系統拆分成很多足夠細小的抽象概念與具體實現步驟時,一個問題產生了:是什么把這些層層疊疊的部件裝配到一起構成了整個系統?換言之,程序代碼到底是什么?答案可以高度概括為一個正則表達式——[_A-Za-z][_A-Za-z0-9]*,沒錯,開發人員使用標識符給系統的任何一部分起名字,實例、屬性、方法、事件、類、接口、命名空間、JNDI、DI id ... 在排除了那些流程控制語句和元素聲明的寫法等等在同一個程序語言中固定不變的內容之后我們發現,任何程序,無論采用何種編程范式,都是由一堆按照固定順序和方式出現標識符組成的,其中每一個標識符都代表了一個內存地址或者另外一堆標識符。采用不同的編程范式似乎只是在影響高層標識符的意義與組織方式。排除接口復用方面的考慮不談,如果OB或者OO相對于過程式編程而言還存在其他優勢的話,那么主要就體現在前者提供了構造良好分治結構的可能性,封裝、繼承、接口等技術就像一個黃頁分類系統,如果設計良好可以讓用戶快速定位目標;而過程式編程的開發成果永遠是扁平的。 隨著系統復雜程度的增加,OO必然也會遇到相同的問題,即如何有效的組織系統的各個部分,讓開發人員可以更容易地根據需求進行代碼定位,使得所有關于復用的努力能夠真正實現;而不是因為引入了過多的抽象層次讓系統變得難以理解,最終導致開發人員明明知道可以復用的實現就在這里,卻因為陡峭的學習曲線而不得不再次重新制造車輪。

  一段典型的現代OO代碼片段是這樣的:

   OO code

  這說明我們每天寫程序的人的生活也是這樣的:拿到一個需求;自己琢磨、Google、MSDN、API Doc、Community或者問一圈同事才找到一些對象;逐一弄清楚上邊那些所有的What、WhatYet 以及 WhatElse 都代表了些蝦滅;編譯測試調試編譯測試調試編譯測試調試;直到我們真正的弄清楚了那些所有的What、WhatYet 以及 WhatElse 都代表了些蝦滅 ...... 每個公司的開發流程可能不同,但是具體到代碼簽出之后到簽入之前的這段繁復的手工操作我想應該還是大同小異的。即使這個框架是你一手設計的,你可以完全理解所有的抽象概念,那么對于一個新加入團隊的員工呢?對于十年之后已經不太記得當初那些精心安排的工巧的你呢?

  就在這里停下吧!難道我許多年來傾注了滿腔的熱情,遵循著分治復用的原則,接受了諸多概念、技術、信仰與習慣,最后獲得的日常生活就是這樣的重復查找與驗證么?我本可以用來記憶更多家人朋友消息或是八卦娛樂新聞的大腦存儲空間必須要被征用過來,把那些晦澀的標識符及其出現順序倒背如流么?!

  不!我相信生活不應該是這樣的。我相信寫程序的最終目的應當是為了終結寫程序;在OO之外,在現有的編程范式、模式與最佳實踐之外一定還有其他更好的辦法能夠提高程序代碼的生產效率、進一步解放千千萬萬像我一樣的人——程序員。

 ?。ùm)

it知識庫靜思錄 程序第一,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 色丁香婷婷综合缴情综 | 亚洲国产精品久久无套麻豆 | 国产精品久久久久a影院 | 95国产精品人妻无码久 | xfplay 无码专区 亚洲 | 免费看黄色小说 | 蜜桃麻豆WWW久久囤产精品免费 | 手机在线观看mv网址 | 国产在线成人一区二区三区 | 色综合久久88一加勒比 | 精品无码乱码AV | 色噜噜噜亚洲男人的天堂 | 夫外出被公侵犯日本电影 | 亚洲综合春色另类久久 | brazzers巨臀系列 | 亚洲免费一区二区 | 国产亚洲精品视频亚洲香蕉视 | 国产剧果冻传媒星空在线观看 | 一边吃奶一边添P好爽故事 一边吃奶一边啪啪真舒服 一本之道加勒比在线观看 一本之道高清在线观看一区 | 国产成+人欧美+综合在线观看 | 久久电影院久久国产 | 琪琪婷婷五月色综合久久 | 5278欧美一区二区三区 | 美女内射视频WWW网站午夜 | 在线亚洲国产日韩欧洲专区 | 国语精彩对白2021 | 日本高清不卡一区久久精品 | 99热热在线精品久久 | JLZZJLZZJLZ老师好多的水 jk制服喷水 | 国产精品系列在线观看 | 好男人WWW免费高清视频在线 | 殴美黄色网 | 亚洲视频欧美在线专区 | 野花视频在线观看免费最新动漫 | 暖暖 视频 在线 观看 高清 | 日韩欧美国产免费看清风阁 | 诱人的女邻居9中文观看 | 四虎国产精品永久一区高清 | 丝瓜涩涩屋黄瓜香蕉丝瓜 | 精品人妻一区二区三区视频53 | 国产精品美女久久久网站动漫 |