置頂隨筆
摘要: 終于有了自己的獨立博客
http://blog.zhenghui.org,以后就在那兒安家落戶了。
閱讀全文
摘要: 本文系《冒號課堂》(又名《冒號和他的學生們》)系列的目錄提綱,隨著寫作的深入將逐步完善。歡迎大家多提意見!
閱讀全文
摘要:
關于信息系統組織方式的一個改進方案
Information itself is great, but storing and retrieving information sucks.
From a user’s view, most information systems are essentially organized in hierarchical structure. The major flaw of this kind of structure is that it only provides a single path to the target information. Aiming at this, this article proposes a practical solution by borrowing some ideas from Gmail system.
閱讀全文
2009年10月28日
摘要:
抽象類型——實中之虛(
介紹抽象類型的種類、意義及其用法)
? 淺顯的比方只是門檻前的臺階,借之或可拾級入門,卻無法登堂入室
? 具體類型是創建對象的模板,抽象類型是創建類型的模塊
? 抽象數據類型的核心是數據抽象,而抽象類型的核心是多態抽象
? 必先以術養道,而后以道御術
? 以社會身份而非個人身份作為公民之間聯系的紐帶,正是針對接口而非實現來編程的社會現實版
? 個體身份對應的規范抽象借助封裝,以數據抽象的形式出現
? 家庭身份對應的規范抽象借助繼承,以類型層級的形式出現
? 社會身份對應的規范抽象借助多態,以多態抽象的形式出現
閱讀全文
2009年10月26日
2009年10月20日
摘要:
多態類型——靜中之動(
通過實例展示多態類型的三種用法)
? 繼承是多態的基礎,多態是繼承的目的
? 多態是動靜結合的產物,將靜態類型的安全性和動態類型的靈活性融為一體
? 前者(參數多態)是發散式的,讓相同的實現代碼應用于不同的場合
? 后者(包含多態)是收斂式的,讓不同的實現代碼應用于相同的場合
? 模板方法模式突出的是穩定堅固的骨架,策略模式突出的是靈活多變的手腕
閱讀全文
2009年8月22日
摘要: 終于有了自己的獨立博客
http://blog.zhenghui.org,以后就在那兒安家落戶了。
閱讀全文
2009年3月2日
摘要:
后臺腳本——敏捷開發的利器(
簡談Perl、PHP、Python和Ruby)
? 語言的發展趨勢一定是動靜結合、剛柔并濟
? Perl凝練晦澀,Python優雅明晰,Ruby精巧靈動,PHP簡明單純
? 或許優雅正是來自對細節和規范的重視
? (RoR)與Ruby結合之后,便如一只猱身而上靈貓,立刻襯托出Java和.NET大象般的身影
閱讀全文
2009年2月22日
摘要:
前臺語言——視覺與交互的藝術(
簡談VB、Delphi和JavaScript)
? Delphi讓復雜的事情變得簡單,VB讓簡單的事情變得更簡單
? 它(JavaScript)宛如一只神奇的魔袋,乍看平淡無奇,卻總能變出意想不到的寶貝
? 待友之道,貴在放大其優點而縮小其缺點,對待語言亦當如是
? 大道相通,難者亦易,易者亦難
閱讀全文
2009年2月15日
摘要:
平臺語言——先搭臺后唱戲(
簡談Java和C#)
? Java的目的是讓一種語言在多種平臺上運行,而C# 的目的是讓多種語言在一種平臺上運行
? 兩個平臺語言(Java和C#),一個重在語言,讓語言向平臺擴散;一個重在平臺,讓平臺來凝聚語言
? C++提供了一馬平川的大路,也提供了陷阱密布的小道;Java則在大路上鋪設水泥,同時封鎖了捷徑小道;C#同樣填平了大路上的坑坑洼洼,但把一些小道上“此路不通”的牌子悄悄換成了“此路危險”
閱讀全文
2009年2月8日
摘要:
系統語言——權力的雙刃劍(
簡談C、C++和D)
? 通禪悟道者拈花不語,坐井觀天者蛙鳴鼓噪
? Java程序員大多被慣壞了,環保意識要淡薄得多
? (指針)用得好可以是削鐵如泥的神兵利器,用得不好則可能是自我毀滅的罪惡淵藪
? OOP又不是金子,含量越高越好。試圖把一切都裝進OOP的箱子里的想法無異于削足適履
? 它們(系統語言)的理念是:優化機器的時間而不是人的時間,優化機器的記憶而不是人的記憶;假設編譯器是愚蠢的而程序員是聰明的,因此賦予程序員更多的權利、義務與責任
? C++是匹無轡無鞍的野馬,看似桀驁不馴,若能順性而御,必能足踏飛燕,行千里而不勞
閱讀全文
2009年1月19日
摘要:
語言誤區——語言的宗教情結(
關于編程語言的一些誤區)
? 如果說編程范式是一種文化,那么編程語言更像是一種宗教——盡管它本不該是
? 語言只有兩種:一種怨聲載道,一種無人問津
? 對待一門語言的態度應該是:與其抱怨爭執,不如揚長避短
? 過分拔高一種語言與抹煞語言之間的差別是兩種極端,皆為秕言謬說
? 這些人若有幸拜關公為師,他們最艷羨的一定他的赤兔馬和青龍偃月刀,或許還會抹紅臉蓄長須什么的,就是不太愿學他的蓋世武功
? 理想的架構師應當如文學大師,既有恢弘大氣的構思,又有細膩深刻的筆法;應當如統軍大帥,既有運籌帷幄的韜略,又有沖鋒陷陣的武功
閱讀全文
2009年1月14日
摘要:
動態語言——披著彩衣飛舞的腳本語言(
動態語言簡談)
? 程序是為終端用戶服務的,而腳本是為程序員服務的
? 動態語言秉承的一個理念是:優化人的時間而不是機器的時間
? 待靜態語言披盔戴甲、備馬抬槍之際,動態語言已衣袂飄飄,長劍出手了
? 當腳本語言披上動態語言的彩衣,昔日不起眼的毛毛蟲便羽化成碟,開始飄舞在眾人追逐的目光之中
閱讀全文
2009年1月8日
摘要:
數據類型——規則與變通(
關于數據類型的討論)
? Duck類型的哲學是:名義不重要,重要的是能力
? 將一個會叫會游的家伙放進池塘看起來不算壞主意,但如果一艘輪船趁機也轟隆隆地開了進來,事情恐怕就不那么美妙了
? 靜態類型檢查類似“疑罪從有”的有罪推定制,動態類型檢查類似“疑罪從無”的無罪推定制
? 盡可能守規則,必要時求變通
? 規則如褲帶,過于寬松和過于束縛都不好
閱讀全文
2008年12月30日
摘要:
教學計劃——接下來的故事(
討論下一步教學計劃)
? 編程水平的提升之道是:在實戰中演練招法,在招法中領會心法,心法反過來提升招法,進而提高實戰水平,如此循環往復呈螺旋式上升過程。正所謂熟能生巧,巧能生通
? 迭代學習法:即在具體知識與抽象理論之間進行折返式學習
? 網頁的迷人之處就在于,能夠用精美的畫皮來包裹冗長低效的代碼
? 無論干哪一行,要想勝任愉快,離不開四樣東西:才能、興趣、方法和努力
閱讀全文
2008年12月21日
摘要:
情景范式——餐館里的編程范式(
編程范式在餐館中的應用)
? 廚師只需提供一種服務:把紙上菜變成盤中菜,至于蒸、煮、炒、燉等具體做法純屬實現細節
? 可以這么理解(閉包):所謂包,指函數與其周圍的環境變量捆綁打包;所謂閉,指這些變量是封閉的,只能為該函數所專用
? 合理地使用閉包能使代碼更加簡潔清晰,散發出函數式特有的優雅氣質
? 換盤子有兩種方式:一種是服務員主動換,一種是客人要求換。前者是輪詢,后者是通知
? 如果把待加工的菜看作數據,技法看作算法,將數據與算法分離,以算法為中心,那是什么范式?
閱讀全文
2008年12月15日
摘要:
匯總范式——一張五味俱全的大烙餅(
總結編程范式)
? 設計模式好比組合套路,能在一些特定場合下克敵制勝;編程范式則好比武功門派,博大精深且自成體系
? 一種編程范式之所以能獨樹一幟,關鍵在于它突破了原有的編程方式的某些限制,帶來革命性的新思維和新方法,進一步解放了程序員的勞動力
? 因其長而容己,因其短而容他,此萬物之理也
? 語言為形,范式為神。若能以神導形、以形傳神,則看似平白無趣的程序也能寫出詩畫般的意境
閱讀全文
2008年12月7日
摘要:
邏輯范式——當算法失去了控制(
再談邏輯式編程)
? 評價代碼的復雜度,長短只是一個因素。程序員不是打字員,花在思考上的時間和精力遠遠超過花在鍵盤上
? 算法=邏輯+控制。其中邏輯是算法的核心,控制主要用于改進算法的效率
閱讀全文
2008年11月30日
摘要:
函數范式——精巧的數學思維(
再談函數式編程)
? 單靠記憶只能觸及知識之表,單靠練習只能深入知識之里,唯有培養方能滲透知識之根
? 學會適度地容忍無知
? 不僅需要強調鉆勁和深度的“釘子精神”,還需要強調磨功和廣度的“刨子精神”
? 編程語言的語法、語義等都是從編程范式的樹根衍生而出的枝葉,把握了這種脈絡和節奏,代碼才會如音樂舞蹈般韻律有致
? 每種范式擅長的問題領域不盡相同,只有博聞廣識,方可揚長避短,程序才會如行云流水般流暢自然
? 程序員更習慣機器風格的過程式思維和現實風格的OOP思維,不容易接納數學風格的函數式思維
閱讀全文
2008年11月24日
摘要:
事件驅動——有事我叫你,沒事別煩我(
事件驅動式編程簡談)
? 它們(同步回調和異步回調)都使調用者不再依賴被調者,將二者從代碼上解耦,異步調用更將二者從時間上解耦
? 它們(控制反轉、依賴反轉和依賴注射)的主題是控制與依賴,目的是解耦,方法是反轉,而實現這一切的關鍵是抽象接口
? “回調”強調的是行為方式——底層反調高層,而“抽象接口”強調的是實現方式——正是由于接口具有抽象性,底層才能在調用它時無需慮及高層的具體細節,從而實現控制反轉
? 控制反轉導致了事件驅動式編程的被動性
? 事件驅動式還具有異步性的特征,這是由事件的不可預測性與隨機性決定的
? 獨立是異步的前提,耗時是異步的理由
? 出版/訂閱模式正是觀察者模式的別名,一方面可看作簡化或退化的事件驅動式,另一方面可看作事件驅動式的核心思想
閱讀全文
2008年11月17日
摘要:
切面范式——多角度看問題(
AOP簡談)
? 從宏觀角度看,太陽底下沒有新鮮事——AOP無非是SoC原理和DRY原則的一種應用
? 從微觀角度看,太陽每天都是新的——AOP雖自OOP的土壤中長出,卻脫離藩籬自成一體
? 抽象是前提,分解是方式,模塊化是結果
? 在常人眼中復雜的牛體,庖丁經過抽象,已目無全牛,及至提刀分解,自是游刃有余。待牛如土委地,模塊化既成
? 兩條(抽象與分解的原則):單一化,正交化。每個模塊職責明確專一,模塊之間相互獨立,即高聚合低耦合
? 對程序員來說,英語也是一門計算機語言,而且是必修的語言
? OOP只能沿著繼承樹的縱向方向重用,而AOP則彌補了OOP的不足,可以在橫向方向重用
? 如果一個程序是一個管道系統,AOP就是在管道上鉆一些孔,在每個孔中注入新的代碼流
閱讀全文
2008年11月10日
摘要:
超級范式——提升語言的級別(
元編程簡談)
? 元編程作為超級范式的一個體現是,它能提升語言的級別
? 如果說OOP的關鍵在于構造對象的概念,那么LOP的關鍵在于構造語言的語法
? 離開IDE就無法編寫、編譯或調試的程序員,如同卸盔下馬后便失去戰斗力的武士,是殘缺和孱弱的
? 既然有重復的代碼,不能從語法上提煉,不妨退一步從文字上提煉
? 元程序將程序作為數據來對待,能自我發現、自我賦權和自我升級,有著其他程序所不具備的自覺性、自適應性和智能性,可以說是一種最高級的程序
閱讀全文
2008年11月5日
摘要:
泛型范式——抽象你的算法(
泛型式編程簡談)
? 算法串聯數據,如脊貫肉;數據實化算法,如肉附脊
? 泛型編程是算法導向的,即以算法為起點和中心點,逐漸將其所涉及的概念內涵模糊化、外延擴大化,將其所涉及的運算抽象化、一般化,從而擴展算法的適用范圍
? 思想是雞,結論是蛋
閱讀全文