程式設計師的紋身

發表於2011-10-11

注:本文轉載自外刊IT評論

(function(){var k=[];return function j(){k.push(i);j();}})()();

這就是上週我在胳膊上刺的字。人們對這個紋身的反應先是不敢相信,後是覺得好笑,但我喜歡它。

為什麼我會決定要讓這樣一段讓人費解的JavaScript程式碼在我餘下的一生中伴隨在我的身體上?是這樣,我想要一個只對我自己有意義的紋身。我想要一個跟我的工作和興趣有關的紋身:Web開發相關的。我希望這個紋身是與眾不同的。

我簡單的在Google上查了一下“程式設計師紋身”和“開發者紋身”,希望能得到一點靈感,但唯一能找到的是你肯定見到過的 圖案(很妙的紋身):

  設計獨特

在網際網路上一無所獲後,我想到,與其找什麼東西來表現我對程式設計的喜愛,不如直接用程式碼來表現我的思想。

所用的語言很顯然應該是JavaScript。它是我使用時間最長的語言。JavaScript也是web開發的核心基礎,就目前的開發趨勢來看,這種現狀在短時期內也不會有任何改變。還有,它是一個開放的標準,我堅信,整個網際網路也都該這樣。

那麼,我用程式碼表現些什麼呢?我想,這種程式碼應該是能提醒我在每天工作中、生活中都努力追求的一種什麼樣價值和態度的程式碼。

(function(){var k=[];return function j(){k.push(i);j();}})()();

這種程式碼結構被稱作閉包(closure)。如果你不知道閉包是什麼,這裡有個資料你可以閱讀一下:什麼是閉包。 簡單說:它是一個能返回另一個函式的函式。被返回的函式裡可以訪問到其父函式的有效變數訪問範圍內的所有變數——就像是面嚮物件語言,例如C#或 Java,裡的私有內部類。我決定採用這種結構體有兩個原因:首先,我感覺這個東西非常的漂亮,第二,我希望這種編碼方式能被更多的接受、更多的使用。

(function(){var k=[];return function j(){k.push(i);j();}})()();

這個陣列 k 代表知識和經驗。
(function(){var k=[];return function j(){k.push(i);j();}})()();

閉包返回的函式 j 是遞迴呼叫的。這用來提醒我,我需要保持我的動力和幹勁——我應該不斷的追求。
(function(){var k=[];return function j(){k.push(i);j();}})()();

每一次的呼叫,函式 j 就會把全域性變數 i 裡的內容新增到內部的陣列 k 裡。眼尖的人會發現,這段程式碼沒有做異常檢查,如果變數 i 沒有定義,這段程式碼會報錯,遞迴函式 j 將執行不下去。這是故意的。變數 i 表示來自其他人的輸入,我要提醒自己,應該不斷的向周圍的人尋求建議和忠告。我知道我不能在與世隔絕中成長,因此,不從他人那裡收集經驗將會帶來災難的後果。正如我上面提到的,陣列k 表示知識和經驗,這部分程式碼還讓我記住,我要不斷的從獲得的輸入資訊中學到東西。這並不是說我必須要接受和採納所有收到的建議,我需要的是從中學到東西。即使不可用的建議也能讓我們從忠告者身上學到很多事情。 :0:
(function(){var k=[];return function j(){k.push(i);j();}})()();

閉包和返回的函式 j 都是自我呼叫的。這表示,程式碼會自我驅動執行:函式並不一定需要別人來驅動。這是在提醒我,在工作和生活中,我應該主動行動,不要依賴由外界壓力的影響才去做新的事情。

於是,這個紋身就誕生了。每次看見我的胳膊,都會讓我想起它賦予的對我、對程式設計有重要意義的涵義。

  我很得意戴著這怪異的紋身

 

相關文章