看看老外程序員的創(chuàng)意紋身
本文是從 What? You tattooed code on your arm? 這篇文章翻譯而來。
- (function(){var k=[];return function j(){k.push(i);j();}})()();
這就是上周我在胳膊上刺的字。人們對這個紋身的反應先是不敢相信,后是覺得好笑,但我喜歡它。
為什么我會決定要讓這樣一段讓人費解的JavaScript代碼在我余下的一生中伴隨在我的身體上?是這樣,我想要一個只對我自己有意義的紋身。我想要一個跟我的工作和興趣有關的紋身:Web開發(fā)相關的。我希望這個紋身是與眾不同的。
我簡單的在Google上查了一下“程序員紋身”和“開發(fā)者紋身”,希望能得到一點靈感,但唯一能找到的是你肯定見到過的 圖案(很妙的紋身):
設計獨特
在互聯(lián)網(wǎng)上一無所獲后,我想到,與其找什么東西來表現(xiàn)我對編程的喜愛,不如直接用代碼來表現(xiàn)我的思想。
所用的語言很顯然應該是JavaScript。它是我使用時間最長的語言。JavaScript也是web開發(fā)的核心基礎,就目前的開發(fā)趨勢來看,這種現(xiàn)狀在短時期內也不會有任何改變。還有,它是一個開放的標準,我堅信,整個互聯(lián)網(wǎng)也都該這樣。
那么,我用代碼表現(xiàn)些什么呢?我想,這種代碼應該是能提醒我在每天工作中、生活中都努力追求的一種什么樣價值和態(tài)度的代碼。
- (function(){var k=[];return function j(){k.push(i);j();}})()();
這種代碼結構被稱作閉包(closure)。如果你不知道閉包是什么,這里有個資料你可以閱讀一下:什么是閉包。 簡單說:它是一個能返回另一個函數(shù)的函數(shù)。被返回的函數(shù)里可以訪問到其父函數(shù)的有效變量訪問范圍內的所有變量——就像是面向對象語言,例如C#或 Java,里的私有內部類。我決定采用這種結構體有兩個原因:首先,我感覺這個東西非常的漂亮,第二,我希望這種編碼方式能被更多的接受、更多的使用。
- (function(){var k=[];return function j(){k.push(i);j();}})()();
這個 數(shù)組k 代表知識和經(jīng)驗。
- (function(){var k=[];return function j(){k.push(i);j();}})()();
閉包返回的函數(shù) j 是遞歸調用的。這用來提醒我,我需要保持我的動力和干勁——我應該不斷的追求。
- (function(){var k=[];return function j(){k.push(i);j();}})()();
每一次的調用,函數(shù) j 就會把全局變量 i 里的內容添加到內部的數(shù)組 k 里。眼尖的人會發(fā)現(xiàn),這段代碼沒有做異常檢查,如果變量 i 沒有定義,這段代碼會報錯,遞歸函數(shù) j 將運行不下去。這是故意的。變量i 表示來自其他人的輸入,我要提醒自己,應該不斷的向周圍的人尋求建議和忠告。我知道我不能在與世隔絕中成長,因此,不從他人那里收集經(jīng)驗將會帶來災難的后果。正如我上面提到的,數(shù)組k 表示知識和經(jīng)驗,這部分代碼還讓我記住,我要不斷的從獲得的輸入信息中學到東西。這并不是說我必須要接受和采納所有收到的建議,我需要的是從中學到東西。即使不可用的建議也能讓我們從忠告者身上學到很多事情。
- (function(){var k=[];return function j(){k.push(i);j();}})()();
閉包和返回的函數(shù) j 都是自我調用的。這表示,代碼會自我驅動運行:函數(shù)并不一定需要別人來驅動。這是在提醒我,在工作和生活中,我應該主動行動,不要依賴由外界壓力的影響才去做新的事情。
于是,這個紋身就誕生了。每次看見我的胳膊,都會讓我想起它賦予的對我、對編程有重要意義的涵義。
我很得意戴著這怪異的紋身
本文轉載自: 外刊IT評論 http://www.aqee.net/
【編輯推薦】