小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Lisp在一個(gè)創(chuàng)業(yè)公司中的故事

 rookie 2012-10-10

Lisp在一個(gè)創(chuàng)業(yè)公司中的故事

2009-03-02 11:44:23

這篇文章是從保羅的主頁上找到的,已經(jīng)有一篇對(duì)岸的譯文收錄在《駭客與畫家》中了。

超越平凡
--Lisp在一個(gè)創(chuàng)業(yè)公司中的故事


作者:保羅.格雷厄姆
譯者:不累的王
校對(duì):瘋子魚
原文地址:http://www./avg.html


(本文由2001年三月25日劍橋的一次Franz Developer研討會(huì)中的發(fā)言整理而來。)

 
1995年夏天,我得朋友Robert Morris 和我創(chuàng)立了一家個(gè)名叫Viaweb的公司。我們計(jì)劃編寫令用戶可以構(gòu)建在線商店的軟件。當(dāng)時(shí),這個(gè)軟件的新奇之處在于,它跑在我們的服務(wù)器上,使用普通的Web頁面作為界面。
當(dāng)然,當(dāng)時(shí)許多人產(chǎn)生了相同的想法,不過據(jù)我所知,Viaweb 是第一個(gè)基于Web的應(yīng)用程序。它看上去確實(shí)是一個(gè)新鮮的想法,以至于我們使用它作為我們公司的名字:Viaweb,因?yàn)槲覀兊能浖ㄟ^web工作,而非運(yùn)行在你的桌面計(jì)算機(jī)上。
這個(gè)軟件的另外一個(gè)不同尋常之處在于,它主要使用一種稱作Lisp的語言編寫。[注1]它是最早的使用Lisp編寫的終端用戶程序之一,Lisp被廣泛的應(yīng)用于大學(xué)和實(shí)驗(yàn)室。相對(duì)其他使用那些不那么強(qiáng)悍語言的對(duì)手,Lisp給予了我們巨大的優(yōu)勢(shì)。
1. 秘密武器
Eric Raymond撰寫過一篇名為《怎樣成為一名黑客》的文章,其中提到若想成為大牛該學(xué)習(xí)哪些語言。他建議從 Python 或 Java 開始,因?yàn)樗鼈內(nèi)菀讓W(xué)習(xí)。有品位的黑客要學(xué)習(xí) C,以在Unix上工作;為了作系統(tǒng)管理或 CGI,還需要學(xué)習(xí) Perl。最后,真正牛的黑客應(yīng)該考慮學(xué)習(xí)Lisp:學(xué)習(xí)Lisp可以使你獲得受到深刻的啟迪后的經(jīng)驗(yàn);這種經(jīng)驗(yàn)將使你在剩下的日子成為一名更出色的程序 員,即使你并非很多地使用Lisp本身。
這和你經(jīng)常聽說的關(guān)于拉丁語的說法相同。它不會(huì)使你得到一份工作,除非是典型的教授職位,但是它會(huì)改進(jìn)你的思想,使你更好地使用你所希望使用的語言,就像拉丁語相對(duì)于英語。
但 請(qǐng)稍等。這個(gè)比喻并不完全恰當(dāng)。拉丁語無法使你得到一份工作,是因?yàn)闆]有人講拉丁語。如果你使用拉丁語書寫,沒有人能理解你的意思。但是Lisp是一種計(jì) 算機(jī)語言,計(jì)算機(jī)使用程序員對(duì)它講的任何一種語言。所以,如果 Lisp 使你成為一名更出色的程序員,就像他(Eric Raymond)說的那樣,為什么不使用它呢?如果一名畫家獲得一支可以使他成為更好的畫家的畫筆,我覺得他會(huì)在他所有的繪畫中都使用這支筆,不是么?我 并非在此開 Eric Raymond 的玩笑??偟膩碚f,他的建議是非常好的。他談?wù)摰腖isp就像常說的賢者。不過這位賢者有一個(gè)矛盾:Lisp 會(huì)使你成為一名更好的程序員,但之后你將不會(huì)使用它。

為什么不?編程語言只是工具而已。如果 Lisp 真的生成更好的程序,你會(huì)去使用它的。但如果它不能,誰會(huì)用它呢?
這 并不只是一個(gè)理論問題。軟件業(yè)是充滿競(jìng)爭(zhēng)的行業(yè),傾向于產(chǎn)生天然的壟斷。在其他條件相等的情況下,一家能夠更快更好的生產(chǎn)出軟件的公司,將淘汰它的競(jìng)爭(zhēng)對(duì) 手。當(dāng)你正在開始一家創(chuàng)業(yè)公司的時(shí)候,你會(huì)非常敏銳的感受到這一點(diǎn)。創(chuàng)業(yè)公司通常徘徊于天堂和地獄之間。你或者變得富有,或者變得一無所有。在一家創(chuàng)業(yè)公 司,如果你將賭注壓在錯(cuò)誤的技術(shù)上,競(jìng)爭(zhēng)對(duì)手將粉碎你。
羅伯特和我都很了解Lisp,并且我們看不到任何理由阻止我們憑著天性選擇 Lisp。我們知道很多人使用 C++ 或 Perl 編寫他們的軟件。但我們同樣知道那并不意味著任何事。如果你那樣選擇技術(shù),你一定在跑Windows。當(dāng)你選擇技術(shù)的時(shí)候,你必須忽略其他人的選擇, 而僅考慮什么技術(shù)能夠工作得最好。
對(duì)于一家創(chuàng)業(yè)公司來說尤為如此。在大公司,你可以照般所有其他那些大公司的做法。但是創(chuàng)業(yè)公司不能照搬其他創(chuàng)業(yè) 公的做法。我并不認(rèn)為有多少人了解這一點(diǎn),即使在創(chuàng)業(yè)公司。一般的大公司每年大概增長(zhǎng)十個(gè)百分點(diǎn)。所以如果你在經(jīng)營(yíng)一家大公司,并且照搬其他一般的大公司 的做法,假如和其它一般的大公司作得一樣好,那么每年可以增長(zhǎng)10個(gè)百分點(diǎn)。
當(dāng)然,在你經(jīng)營(yíng)創(chuàng)業(yè)公司時(shí),同樣的事情也會(huì)發(fā)生。如果你作的所有事情 只是照搬其他創(chuàng)業(yè)公司,你一定期待一個(gè)平均的回報(bào)。問題是,這時(shí)候,平均意味著你將出局。創(chuàng)業(yè)公司的存活率只有不到百分之五十。所以如果你在經(jīng)營(yíng)一家創(chuàng)業(yè) 公司,你最好作點(diǎn)不同凡響的事情。否則你將面臨麻煩。
回到1995年,我們知道我不認(rèn)為我們的競(jìng)爭(zhēng)者明白,甚至直到今天還很少有人明白:當(dāng)你編寫 跑在自己服務(wù)器上的軟件時(shí),你可以使用任何你想使用的語言。當(dāng)你在編寫桌面軟件時(shí),一個(gè)巨大的偏見導(dǎo)致應(yīng)用程序使用同一種語言編寫,運(yùn)行在同一種操作系統(tǒng) 上。十年前,編寫應(yīng)用程序意味著用 C 語言編寫圖形界面。但編寫 Web 軟件時(shí),特別是當(dāng)你同時(shí)用有編程語言和操作系統(tǒng)的源代碼時(shí),你可以使用任何你希望使用的語言。可是,這種新的自由是一柄雙刃劍?,F(xiàn)在你可以使用任何語言, 你必須思考使用哪一種。公司們都裝作沒有做出冒險(xiǎn)的轉(zhuǎn)變并試圖找到對(duì)手的真正意圖。
如果你可以使用任何語言,你用哪一種?我們選擇 Lisp。首先,顯而易見的是快速開發(fā)在這個(gè)市場(chǎng)上將非常重要。我們?nèi)紡牧闫鸩剑砸患夜究梢栽谒膶?duì)手獲得長(zhǎng)足進(jìn)步之前獲得新的特性。我們知道 Lisp 確實(shí)是一種適合快速編寫軟件的好語言,并且服務(wù)器端程序擴(kuò)大了這種快速開發(fā)的效果,因?yàn)槟憧梢栽谲浖瓿傻耐瑫r(shí)就發(fā)布它。
如果其他公司 不想使用 Lisp,那就更好了。這將帶給我們一個(gè)技術(shù)優(yōu)勢(shì),并且我們我們需要我們能夠獲得的所有幫助。當(dāng)我們開始 Viaweb,我們沒有任何關(guān)于業(yè)務(wù)的經(jīng)驗(yàn)。我們不知道關(guān)于市場(chǎng)/雇傭人力/籌集資金/或者獲得客戶的任何知識(shí)。甚至我們中間沒有人曾經(jīng)擁有過一份真正的 工作。我們唯一擅長(zhǎng)的就是編寫軟件。我們希望這可以拯救我們。我們將獲得軟件開發(fā)方面所有的優(yōu)勢(shì)。
所以你可以說,使用 Lisp 是一個(gè)大膽的嘗試。我們的假設(shè)是使用 Lisp 編寫我們的軟件可以使我們比競(jìng)爭(zhēng)對(duì)手更快獲得新特性,并且可以做到他們的軟件做不到的事情。并且,因?yàn)? Lisp 是這樣高階,我們不需要一個(gè)龐大的開發(fā)組,所以我們的成本將更低。如果是這樣,我們可以花更少的錢獲得更好的產(chǎn)品,并且持續(xù)盈利。我們最終將獲得所有用 戶,我們的競(jìng)爭(zhēng)對(duì)手將一無所獲,并且最終被淘汰出局。無論如何,這正是我們所期待的。
嘗試的結(jié)果如何?稍微有點(diǎn)驚喜,它能工作。我們的競(jìng)爭(zhēng)對(duì)手中 最后有20%~30%存活下來,但是沒有任何一個(gè)可以和我們相提并論。我們有一個(gè)跑在服務(wù)器上的在線商店構(gòu)建器,執(zhí)行時(shí)的感覺就像一個(gè)桌面程序一樣。我們 的競(jìng)爭(zhēng)對(duì)手使用CGI腳本。我們一直有領(lǐng)先他們的特性。有時(shí),對(duì)手使出渾身解數(shù)嘗試引入一個(gè)我們所沒有的特性。但是 Lisp 使我們的開發(fā)周期非常之快,以至于有時(shí)候在對(duì)手發(fā)布某個(gè)特性之后的一兩天內(nèi),我們就可以將其復(fù)制。當(dāng)記者們想把對(duì)手軟件登上封面而來找我們時(shí),我們也已經(jīng) 有了相同的新特性。
對(duì)手一定認(rèn)為我們用友某種秘密武器--比如我們破解了他們的加密通信之類的。實(shí)際上我們確實(shí)有一個(gè)秘密武器,只不過比他們的猜測(cè)更簡(jiǎn)單。沒有人泄露關(guān)于他們新特性的消息給我們。我們只是可以用超乎任何人想象的速度開發(fā)軟件。
我在九歲的時(shí)候,偶然間得到了一本小說《豺狼的假日》,主要情節(jié)描述一個(gè)殺手受到委托刺殺法國(guó)總統(tǒng)。殺手必須繞過警察進(jìn)入一間公寓眺望總統(tǒng)的路線。他裝扮成一個(gè)老人拄著拐杖從警察身邊走過,然而他們絲毫沒有注意到他。
我們的秘密武器與其類似。我們使用一種語法古怪的充滿了圓括號(hào)的語言編寫我們的軟件。多年以來,Lisp 被如此描述令我非常惱火。但現(xiàn)在它使我們處于領(lǐng)先地位。在商業(yè)競(jìng)爭(zhēng)中,一項(xiàng)對(duì)手無法理解的技術(shù)是無價(jià)之寶。商場(chǎng)如戰(zhàn)場(chǎng),出奇制勝與實(shí)力同樣重要。
所 以,有些羞于啟齒,在我們經(jīng)營(yíng) Viaweb 的時(shí)候我從未公開提起關(guān)于 Lisp 的任何事。我們從未公開提起它,如果你在我們的網(wǎng)站上搜索 Lisp,只能找到我的簡(jiǎn)介中提到的兩本書的書名。沒有意外。創(chuàng)業(yè)公司應(yīng)該盡可能向競(jìng)爭(zhēng)對(duì)手隱藏自己的信息。如果他們不知道或者不在乎我們使用何種語言編 寫我們的軟件,我希望保持這種狀態(tài)。[注2]
我們的顧客是最理解我們技術(shù)的人。他們不在乎 Viaweb 使用何種語言編寫,他們只知道它確實(shí)工作得很好。它使他們可以用幾分鐘構(gòu)建出看上去非常好的在線商店。所以,口口相傳,我們擁有了越來越多的用戶。 1996 年底,我們擁有大概 70 個(gè)在線商店。1997 年底,這個(gè)數(shù)字達(dá)到了 500。六個(gè)月后,當(dāng)雅虎收購(gòu)我們時(shí),我們有 1070 個(gè)用戶。直到今日,這個(gè)軟件作為 Yahoo Store 依舊繼續(xù)支配這它的市場(chǎng)。他是雅虎最賺錢的部門之一,它構(gòu)建的商店是Yahoo Shopping的基礎(chǔ)。我在 1999 年離開了雅虎,所以我不知道現(xiàn)在他們到底擁有多少用戶,但是我最后一次聽說它時(shí)大概有 14,000。
大家有時(shí)問我雅虎是否依舊在使用 Lisp。是的,所有的 Lisp 代碼依然在那兒。雅虎的服務(wù)器端使用了Eric Raymond提到的所有五種建議黑客學(xué)習(xí)的語言。
2. Blub 悖論
Lisp 真的這么好么?如果 Lisp 真的這么好,為什么不是所有人都用它?聽起來想一個(gè)語言游戲,但實(shí)際上他有一個(gè)簡(jiǎn)單的答案。Lisp 是如此出色并非因?yàn)閾碛幸恍﹥H僅它的信徒才能發(fā)覺的魔力,只是因?yàn)樗撬型ㄓ谜Z言中最強(qiáng)大的。大家不使用它是因?yàn)?,編程語言除了是技術(shù)之外也是思維習(xí) 慣,任何事物的轉(zhuǎn)變都需要時(shí)間。當(dāng)然這些答案都需要進(jìn)一步解釋。
我將從庸俗的編程語言能力之爭(zhēng)開始
可能會(huì)有些爭(zhēng)論,但至少,顯而易見的 是,高級(jí)語言比機(jī)器語言更強(qiáng)大。如今多數(shù)程序員通常情況下都不會(huì)想要使用機(jī)器語言編程。你需要使用一種高級(jí)語言編寫程序,并通過編譯器將它翻譯為機(jī)器語 言。如今這個(gè)想法甚至被納入硬件:20世紀(jì)80年代以來,已經(jīng)有為編譯器而不是為人類的程序員設(shè)計(jì)的指令集出現(xiàn)。
所有人都知道用機(jī)器碼手工編寫程序是一個(gè)錯(cuò)誤。鮮為人知的一條更普適的原則是:在其他條件相等的情況下,如果你可以在幾種語言中選擇,那么除了使用最強(qiáng)勁的語言之外的所有選擇都是錯(cuò)誤的。[注3]
對(duì) 于這條法則存在許多例外。如果你的程序必須接近某種特定語言編寫的程序,使用相同的語言是一個(gè)好主意。如果你的程序只需要作一些簡(jiǎn)單的工作,比如數(shù)字操作 或者位操作,你可能需要一種不那么抽象的語言,因?yàn)樗苍S會(huì)稍微快一些。如果你在編寫一個(gè)很短小的一次性程序,你最好選擇一種擁有最擅長(zhǎng)處理那種任務(wù)的庫(kù) 函數(shù)的語言。但是通常,對(duì)于應(yīng)用程序軟件來說,你希望使用你可以得到的最強(qiáng)勁的語言(因?yàn)楦咝В?,并且使用任何其他的都是錯(cuò)誤,同理,某種情況下可能需要 更低級(jí)的語言,比如機(jī)器語言。
顯而易見,機(jī)器語言非常低級(jí)。但是,至少作為一種約定俗成的慣例,高級(jí)語言之間經(jīng)常獲得同等的對(duì)待。而機(jī)器語言卻不 是。技術(shù)上說,“高級(jí)語言”不說明任何問題。沒有一條分割線將機(jī)器語言和高級(jí)語言隔開。所有語言,從最強(qiáng)勁的機(jī)器語言到機(jī)器語言,都擁有一致[注4]的抽 象性。
考慮一下 Cobol。Cobol 是一種高級(jí)語言,通常,它被編譯為機(jī)器語言。有人真的認(rèn)為 Cobol 和某種語言,比如說 Python,等價(jià)嗎?與 Python 相比,Cobol 更接近機(jī)器語言。
Perl4 怎么樣?在 Perl 4 向 Perl 5 的發(fā)展中,字典和閉包被加入語言。大多數(shù) Perl 黑客會(huì)同意 Perl 5 比 Perl 4 更加強(qiáng)大。一旦你承認(rèn)了這點(diǎn),你就承認(rèn)了一種高級(jí)語言可能比另一種高級(jí)語言更強(qiáng)大。更無情的事實(shí)是,除非特殊情況,你會(huì)使用你能得到的最強(qiáng)大的語言。盡管 這個(gè)想法很少跟隨著它的結(jié)論。超過一定年齡之后,程序員很少自愿的更換語言。不管別人開始使用什么語言,他們總是選擇剛好夠用的語言。
程序員們非常關(guān)注他們最喜愛的語言,我不想傷害任何人的感情,所以我將使用一種假想的語言Blub來解釋這一點(diǎn)。Blub剛好是一種中級(jí)語言。但是它比Cobol或者機(jī)器語言更強(qiáng)大。
實(shí)際上,使用我們的虛擬語言Blub的程序員不會(huì)使用他們中的任意一種。他當(dāng)然不會(huì)使用機(jī)器語言,那是編譯器干的事兒。對(duì)于Cobol,他不知道人們到底可以用這種東西寫出些什么來。它甚至連x(x是Blub語言的某種特性)都沒有。
只 要我們的Blub程序員按照語言能力俯視低級(jí)語言,他一定知道他是在俯視。那些語言是如此明顯的弱于Blub,因?yàn)樗鼈內(nèi)鄙倭四承┧?xí)慣于使用的Blub 語言特性。但是當(dāng)我們的Blub程序員向另一個(gè)方向,仰視某些高級(jí)語言的時(shí)候,他不知道他是在仰視。他認(rèn)為看到的只是些怪異的語言。
他可能會(huì)考慮Blub如何做到與這種語言等價(jià),但是沒有這些亂七八糟的內(nèi)容也沒什么不妥。Blub對(duì)于他來說足夠好了,因?yàn)樗肂lub思考。
然而,當(dāng)我們以某種比Blub語言更高級(jí)語言的程序員的視角來觀察的時(shí)候,我們就會(huì)發(fā)現(xiàn)我們?cè)诟┮旴lub?!澳闶窃趺从肂lub搞定所有事兒的呢?它甚至沒有y(沒有幽默感的譯者注:假設(shè)的某種高級(jí)語言的某種特性)”。
綜上,能夠看到所有不同語言能力差異的程序員只有那些理解了最強(qiáng)語言的程序員。(這可能是Eric Raymond認(rèn)為L(zhǎng)isp使你成為更好的程序員的原因)
你 不能相信其他人的想法,因?yàn)锽lub悖論:他們對(duì)他們開始時(shí)使用的語言感到滿意,因?yàn)樗撬麄儤?gòu)思程序的方式。在我還是一個(gè)寫B(tài)asic程序的高中生的時(shí) 候,我就憑經(jīng)驗(yàn)了解這一點(diǎn)。那種語言甚至不支持遞歸。很難想像如何寫一個(gè)不使用遞歸的程序,但是那是我沒有放棄它。我使用Basic思考。并且我是一個(gè) Basic神童。在接觸到的所有領(lǐng)域中,我都是專家。
Eric Raymond向黑客們推薦的五種語言擁有各自不同的特性。他們的能力高低是一個(gè)敏感的話題。我想說的是我認(rèn)為L(zhǎng)isp是最強(qiáng)的那種。為了支持這個(gè)觀點(diǎn)我 將告訴你們我發(fā)現(xiàn)其他四種語言缺少了什么。其它四種語言怎么可能搞定所有問題呢?--如果缺少了Lisp的某種特性的話。而對(duì)于我來說,他們?nèi)鄙俚淖钪匾? 的東西,是宏。[注5]
很多語言擁有稱為“宏”的東西。但是Lisp的宏是獨(dú)一無二的。無論你是否相信,它們與圓括號(hào)有關(guān)。Lisp的設(shè)計(jì)者并非 只是為了標(biāo)新立異才將圓括號(hào)加入語言。對(duì)于Blub程序員來說,Lisp代碼顯得怪異。但是這些圓括號(hào)的存在是有理由的。他們是Lisp與其他語言內(nèi)在不 同的外在表現(xiàn)。
Lisp代碼有Lisp數(shù)據(jù)對(duì)象構(gòu)成。并非是微觀上”源文件由字符構(gòu)成,字符串是語言支持的數(shù)據(jù)類型的一種”的含義。Lisp代碼,在其被解析器讀取之后,是可以被遍歷的數(shù)據(jù)結(jié)構(gòu)。
如果你理解編譯器的工作原理,實(shí)際上剩下容易解釋了,Lisp擁有奇怪的語法,因?yàn)長(zhǎng)isp沒有語法。你在使用在其他語言中由編譯器生成的語法解析樹寫程序 。但是這些解析樹完全可以被你的程序訪問。你可以編寫操作它們的程序。
在Lisp中,這些程序被稱為宏。他們是寫程序的程序。
寫 程序的程序?你何時(shí)會(huì)想做這樣的東西呢?如果你用Cobol思考,很少。如果你用Lisp思考,所有的時(shí)候??赡苋绻医o出一個(gè)強(qiáng)力的宏的例子以說明這一 點(diǎn)會(huì)比較合適。需要嗎?如果我那樣做了,它對(duì)于不懂Lisp的人來說會(huì)像是含混不清的鬼扯;這里沒有足夠的空間解釋你需要理解這些含義所需的所有東西。在 《Ansi Common Lisp》中我試圖盡可能快速的講解東西,同時(shí)我也沒有在160頁之前提到宏。
但是我想我可以給出一些比較合適的參 數(shù)。Viaweb編輯器的代碼大約20-25%由宏構(gòu)成。宏比普通的V函數(shù)更難寫,而且當(dāng)他們出現(xiàn)在不必要的場(chǎng)合的時(shí)會(huì)導(dǎo)致糟糕的風(fēng)格。所以每個(gè)宏代碼都 是無可或缺,事出有因的。這意味著這個(gè)程序至少有20-25%的代碼使用任何其他語言都很難編寫。盡管V程序員可能會(huì)對(duì)我宣稱的Lisp的神奇力量產(chǎn)生懷 疑,這應(yīng)該刺激了他的好奇心。我們不是為了個(gè)人的消遣才這樣寫程序的。我們是一家小創(chuàng)業(yè)公司,我們盡可能的編寫艱深的程序以設(shè)置留給競(jìng)爭(zhēng)對(duì)手們的技術(shù)門 檻。
多疑的人可能開始懷疑這些是否有關(guān)聯(lián)。我們有大段的代碼做了在其他語言中非常難實(shí)現(xiàn)的事情。我們的產(chǎn)品擁有競(jìng)爭(zhēng)對(duì)手產(chǎn)品無法實(shí)現(xiàn)的功能??赡苓@里有一些關(guān)聯(lián)。我鼓勵(lì)你跟進(jìn)。對(duì)于對(duì)于跛足的老人來說拐杖比眼睛更重要。
3. 創(chuàng)業(yè)公司的合氣道
但 我并不期盼任何人立刻開始學(xué)習(xí)Lisp。這篇文章的目的并非改變?nèi)魏稳说乃枷?,而是給那些開始對(duì)使用Lisp感興趣的人--那些知道Lisp是一種強(qiáng)勁語 言卻對(duì)其沒有被廣泛應(yīng)用而感到擔(dān)心的人--更強(qiáng)的信心。在競(jìng)爭(zhēng)中,這是一個(gè)優(yōu)勢(shì)。Lisp的威力因?yàn)槟愕母?jìng)爭(zhēng)對(duì)手沒有使用它而得到倍增。
如果你考慮在創(chuàng)業(yè)中使用Lisp,不必?fù)?dān)心它沒有被廣泛的理解。你應(yīng)該希望它一直不被理解。并且貌似事實(shí)上也是如此。這是大多數(shù)人安于他們當(dāng)前使用的語言的結(jié)果。計(jì)算機(jī)硬件的變化相對(duì)于個(gè)人習(xí)慣是如此的快速,以至于編程實(shí)踐通常落后處理器十到二十年。
在MIT那樣的地方,人們?cè)缭?960年代就開始使用高級(jí)語言編寫程序,但是很多公司在1980年代還在使用機(jī)器語言編寫代碼。我打賭很多人在被處理器--像急著關(guān)店回家的酒保一樣--踢出來轉(zhuǎn)向Risc指令集之前一直在使用機(jī)器碼寫程序。
普通技術(shù)更新得很快。但編程語言有所不同:編程并非僅僅是技術(shù),它還包含程序員的思想。
它們一半是技術(shù),一半是信仰。[注6]
所以中級(jí)語言,即大多數(shù)程序員使用的語言,改變得就像冰山融化一樣緩慢。
垃圾收集技術(shù)在 1960 年被 Lisp 引入,現(xiàn)在被廣泛的認(rèn)為是一樣好動(dòng)西。閉包,早在 70 年代就被 Lisp 引入,現(xiàn)在被人們廣泛地關(guān)注。宏,60 年代被 Lisp 引入,至今依然是鮮為人知的基礎(chǔ)。
當(dāng)然,中級(jí)語言擁有巨大的沖量。我并非建議你去違背這種強(qiáng)大的力量。恰恰相反,我只是建議你像合氣道修煉者那樣,用這種力量對(duì)抗你的敵人。
如 果你為一個(gè)大公司工作,這可能不那么簡(jiǎn)單。你將花費(fèi)巨量的時(shí)間說服尖頭老板(譯者注:尖頭老板,缺乏一般知識(shí)常識(shí)及職位所應(yīng)具有的管理能力,愛說大話且富 有向物理現(xiàn)實(shí)挑戰(zhàn)的精神,倒霉跟負(fù)責(zé)的往往是他的下屬。)允許你使用Lisp寫程序,而他只在紙面上讀到過一些平庸的語言,比如像Ada那種二十年前產(chǎn)生 而今早已被取代了的語言。但是,如果你在一家創(chuàng)業(yè)公司,沒有尖頭老板,你可以像我們一樣,將Blub悖論轉(zhuǎn)化為你的優(yōu)勢(shì):你可以使用那些被中級(jí)語言粘得動(dòng) 彈不得的競(jìng)爭(zhēng)對(duì)手們永遠(yuǎn)無法匹敵的技術(shù)。
如果你曾經(jīng)在一家創(chuàng)業(yè)公司工作,這里有一條可以評(píng)價(jià)你的競(jìng)爭(zhēng)對(duì)手們。讀他們的招聘啟事。他們的站點(diǎn)可能會(huì)做照片儲(chǔ)存或者其他類似的平平無奇的東西,但是招聘啟事必須指明他們想要的是什么,否則他們將得到錯(cuò)誤的應(yīng)聘者。
在 Viaweb工作的這些年來我讀過許多招聘啟事。似乎每個(gè)月都有新的競(jìng)爭(zhēng)對(duì)手浮出水面。在查看他們是否有在線的demo之后,我做的第一件事是就是查看他 們的招聘啟事。經(jīng)過這樣幾年后我可以指出哪些競(jìng)爭(zhēng)對(duì)手值得關(guān)注,而哪些不需要。招聘啟事中的IT味道越重,這家公司就越不值得關(guān)注。最不值得注意的是那些 需要Oracle經(jīng)驗(yàn)的公司。你永遠(yuǎn)不必?fù)?dān)心那些公司。如果他們需要C++或者Java開發(fā)者,你也同樣可以悠然自得。如果他們需要Perl或 Python程序員,就有一點(diǎn)值得小心了----這說明這家公司有點(diǎn)技術(shù)實(shí)力,至少被一些真正的黑客運(yùn)作著。如果見到有招聘啟事尋找Lisp黑客,我才會(huì) 真正的擔(dān)心。
在我寫那些關(guān)于Lisp的書的時(shí)候,我習(xí)慣于希望每個(gè)人都理解它。但是當(dāng)我開始Viaweb的時(shí)候,我發(fā)現(xiàn)我變了,我希望每個(gè)人都理解它,除了我們的競(jìng)爭(zhēng)對(duì)手。

[1] Viaweb 最初包含兩個(gè)部分:由 Lisp 編寫的編輯器,用戶可以用它創(chuàng)建自己的站點(diǎn),以及由 C 編寫的選購(gòu)系統(tǒng),用來處理指令。第一個(gè)版本大多數(shù)是 Lisp,因?yàn)槟菚r(shí)指令系統(tǒng)還很小。稍后我們添加了兩個(gè)模塊,一個(gè)由 C 編寫的圖片生成器, 一個(gè)大部分由 Perl 編寫的后端處理器。
[2]Robert Morris 說,我不需要保密,因?yàn)槿绻覀兊募词垢?jìng)爭(zhēng)對(duì)手知道,他們也無法理解我們使用 Lisp:“如果他們那么聰明,他們?cè)缇陀?Lisp 編程了?!?br>[3] 所有圖靈完備的語言具有相同的能力,但是程序員并不在乎這點(diǎn)。(沒有人希望給一個(gè)圖靈機(jī)編程)。程序員并不關(guān)心可以被形式化定義的能力,而是在意那些只能 由低級(jí)語言編寫的更強(qiáng)大語言的解釋器實(shí)現(xiàn)的功能。假設(shè)A語言擁有一個(gè)移除字符串中所有空格的操作符,而B語言中沒有,這可能并不能使得A更強(qiáng)大,因?yàn)槟慊? 許可以在B中使用一段子程序做到這一點(diǎn)。但是如果A支持,比如說遞歸之類的特性,而B不支持,那可能就不是可以通過函數(shù)庫(kù)解決的問題了。
[4] 請(qǐng)書呆子們注意:或許更像是一張?jiān)陧敳渴湛s的網(wǎng);相對(duì)于思想來說形狀并不重要,至少這兒有一個(gè)大致的順序。
[5]這可能會(huì)使大家誤以為宏是一個(gè)分離的特性。實(shí)際上他們的用處因其它一些Lisp特性而得到增強(qiáng),比如詞法閉包。
[6]編程語言之間的比較或者表現(xiàn)得像宗教戰(zhàn)爭(zhēng),或者像學(xué)生的教科書一樣堅(jiān)決的中立,無論如何,他們確實(shí)是在為整個(gè)人類工作??粗孛娜丝梢院雎赃@個(gè)話題。但這個(gè)問題只有一半是與信仰有關(guān)的;如果你想設(shè)計(jì)新的語言,還是有一些東西是值得從中學(xué)習(xí)的。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多