神奇的程式設計師—王小波

池建強發表於2013-04-24

喜歡讀書的人,我想對王小波都不陌生,他是中國最富創造性的作家之一,他是中國近半世紀的苦難和荒謬所結晶出來的天才,他英年早逝。他的作品對我們生活中所有的荒謬和苦難作出最徹底的反諷刺。他還做了從來沒有人想做和做也沒才力做到的事:他唾棄中國現代文學那種“軟”以及傷感和諂媚的傳統,而秉承羅素、伊塔洛·卡爾維諾他們的批判、思考的精神,同時把這個傳統和中國古代小說的遊戲精神作了一個創造性的銜接。(以上部分摘自百度百科)

我讀過王小波三部曲黃金時代,白銀時代和青銅時代,讀過沉默的大多數,讀過紅拂夜奔,讀過似水六年,但是最近才知道,原來王小波是一個偽裝成作家的程式設計師(這位同學不用站起來了,不知道這是調侃麼)。

王小波很早就接觸了計算機,1988年畢業於美國匹茲堡大學東亞研究中心,獲碩士學位,那時就知道Macintosh,玩過IBMPS/2。
90年學習FORTRAN,開始進行資料統計,並開始在北大教統計學。
91年搞了個用調整字模發生器方法輸出漢字的系統,併發出嗟嘆:嗟夫,不過現在我對微機已無興趣,因為發現寫小說也可賺到錢。一代天才作家終於開始寫小說了,但他依然沒有停止程式設計的腳步。
92年開始寫C,“用C編的軟體已經用熟,並做出了各種寫小說的工具,別人的軟體已不用了。現在主要是寫書賺錢。從今年初開始寫長篇,首先做了寫長篇的專用軟體,現在基本調通,開始寫了”。
93年開始搞彙編,“下決心買了一臺286,這些日子在改造軟體,作了不少彙編工作。其核心是它在虛擬保護方式(virtual address protected)下工作,以便利擴充套件記憶體(expandedmemory)”。
……

如果王小波不那麼早辭世,估計會有更多偉大的文學作品和軟體產品留下。誰說文科生不懂技術?誰說程式設計師不能寫書?這才是技術與人文的完美結合啊,你們感受一下……

今日Mac技巧:

1、更簡單的禁用通知的方式
經過多位童靴提醒,我們可以通過按住option鍵,點選右上角的通知按鈕,即可禁用或恢復通知系統。
2、Objective-C的訊息機制
上次講了一些Objective-C的歷史,很多童靴覺得不過癮,今天為大家介紹下這門語言的訊息機制。
Ojbective-C的語法設計主要基於Smalltalk,除了提供傳統的物件導向程式設計特性之外,還增加了很多類似動態語言Ruby、Python才具有的特性,例如動態型別、動態載入、動態繫結等等,同時強化了訊息傳遞機制和表意(Intention Revealing Interface)介面的概念。

訊息傳遞模型(Message Passing)是Objective-C語言的核心機制。在Objective-C中,沒有方法呼叫這種說法,只有訊息傳遞。在C++或Java中呼叫某個類的方法,在Objective-C中是給該類傳送一個訊息。在C++或Java裡,類與類的行為方法之間的關係非常緊密,一個方法必定屬於一個類,且於編譯時就已經繫結在一起,所以你不可能呼叫一個類裡沒有的方法。而在Objective-C中就比較簡單了,類和訊息之間是鬆耦合的,方法呼叫只是向某個類傳送一個訊息,該類可以在執行時再確定怎麼處理接受到的訊息。也就是說,一個類不保證一定會響應接收到的訊息,如果收到了一個無法處理的訊息,那麼程式就是簡單報一個錯。甚至你可以向一個值為nil的空物件傳送訊息,系統都不會出錯或宕掉。這種設計本身也比較符合軟體的隱喻。   在表意介面(Intention Revealing Interface)方面,Objective-C也是設計的比較出色的語言。面嚮物件語言的特性之一就是通過API把實現封裝起來,為上層建築提供服務。但是需要注意的一點就是,你封裝的API最好能夠讓呼叫者看到介面描述就知道怎麼使用。如果為了使用一個API必須要去研究它的實現,那麼就失去了封裝的意義。Objective-C通過顯式的API描述,讓開發者不自覺的寫出滿足表意介面的API,比如下圖中的API描述。

上圖中描述了一個傳統意義的例項方法,但和Java或C++不同的是,其方法關鍵字由多個字串組成,在這個例子是insertObject和atIndex,(id)anObject和(NSUInterger)index分別表示引數型別和引數名稱。整個方法看上去就像一個英語句子,我們可以很容易的知道,這個方法就是在索引為index處插入一個物件。如果你是從其他語言轉到Objective-C,那麼開始的時候會感覺這種寫法有些繁複,但是一旦理解並習慣了你會感受到其巨大的好處,這種寫法會強制你寫出優美易讀的程式碼和API,而且有了XCode強大的提示功能,再長的方法也是一蹴而就。

後續講講Objective-C的多型和繼承。與Java一樣,Objective-C一樣不支援多重繼承,但是通過類別(Category)和協議(Protocol)可以很好的實現程式碼複用和擴充套件。

文章內容來自微信公眾賬號:Mac技巧 微訊號:sagacity-mac 查閱和分享 • 回覆 m 可以查閱所有歷史文章 • 輸入文章編號,檢視對應文章內容 • 點選右上角—>分享到朋友圈 • 點選右上角—>複製連結在瀏覽器檢視 申明 自由轉載-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0,專業媒體轉載請與新浪微博 @池建強 聯絡

相關文章