【讀書筆記】《黑客與畫家》

書名:黑客與畫家(10萬冊紀(jì)念版)

作者:保羅·格雷厄姆

譯者:阮一峰


一灵临、概要

《黑客與畫家》是互聯(lián)網(wǎng)從業(yè)者的必讀書之一。這是一本講黑客(優(yōu)秀程序員)的書讼载,可以從三個(gè)維度去看這本書:第一是“黑客精神”和“創(chuàng)造者思維”轿秧;第二是“財(cái)富創(chuàng)造”;第三是“開拓未來”咨堤。本書通俗易懂菇篡,雖然此書已經(jīng)出版了很多年了,但其中思想至今還還很流行甚至超前一喘,強(qiáng)烈建議程序員或IT相關(guān)人員閱讀驱还。


二嗜暴、關(guān)于作者

有“創(chuàng)業(yè)教父”之稱的哈佛大學(xué)計(jì)算機(jī)博士保羅·格雷厄姆。

保羅·格雷厄姆和羅伯特·莫里斯(是一個(gè)非常聰明的黑客议蟆,曾經(jīng)在1988年編寫了歷史上第一個(gè)蠕蟲病毒——莫里斯蠕蟲闷沥。)開發(fā)了Viaweb產(chǎn)品,這是第一個(gè)通過互聯(lián)網(wǎng)使用的軟件咐容。1998年被雅虎收購舆逃,并改名為Yahoo Store。

作者保羅·格雷厄姆最大的成就是創(chuàng)立了YC戳粒,它既是一個(gè)創(chuàng)業(yè)公司的孵化器路狮,也是一個(gè)教導(dǎo)員,還是一個(gè)與投資人聯(lián)系的中介蔚约。YC是全球唯一一個(gè)可以實(shí)現(xiàn)規(guī)难俜粒化的創(chuàng)業(yè)加速器。YC來源于Lisp語言的Y Combinator炊琉,這是一個(gè)編程術(shù)語展蒂,意思是創(chuàng)造其他函數(shù)的函數(shù)。YC在每年的1月和6月舉辦兩次訓(xùn)練營苔咪,每次為期3個(gè)月锰悼。他們從中挑出20個(gè)項(xiàng)目。每個(gè)項(xiàng)目將得到1.1萬美元的啟動(dòng)資金团赏,外加每個(gè)項(xiàng)目成員3 000美元的生活津貼箕般,交換條件是YC將拿走該項(xiàng)目5%的股份5。如果項(xiàng)目成功舔清,5%的股份將非常值錢丝里。


三、摘記

◆ 贊譽(yù)

>> 《黑客與畫家》是互聯(lián)網(wǎng)從業(yè)者的必讀書之一体谒。十幾年前作者關(guān)于未來杯聚、關(guān)于創(chuàng)業(yè)、關(guān)于專業(yè)技術(shù)領(lǐng)域的很多前瞻性觀點(diǎn)都已成真∈阊鳎現(xiàn)在讀幌绍,依然能獲得思考問題的方向和思路。

——姬十三 果殼創(chuàng)始人故响、CEO

◆ 推薦序 “黑客精神”過時(shí)了嗎傀广?答案是永遠(yuǎn)不會(huì)

>> 在保羅的觀念里,以及在YC和奇績創(chuàng)壇的實(shí)踐觀察中彩届,我們發(fā)現(xiàn)伪冰,黑客精神的真諦是動(dòng)手去創(chuàng)造性地解決問題。

>> 只有通過好的設(shè)計(jì)樟蠕,技術(shù)才能源源不斷地滿足需求贮聂。

◆ 保羅·格雷厄姆其人其事

>> 保羅·格雷厄姆有一套完整的創(chuàng)業(yè)哲學(xué)靠柑,他的創(chuàng)業(yè)公式是:

(1)搭建原型;

(2)上線運(yùn)營(別管bug)吓懈;

(3)收集反饋病往;

(4)調(diào)整產(chǎn)品;

(5)成長壯大骄瓣。

>> 他認(rèn)為一定要特別關(guān)注用戶需要什么停巷,這樣才有辦法將一個(gè)壞項(xiàng)目轉(zhuǎn)變成好項(xiàng)目。

>> “許多偉大的公司榕栏,一開始的時(shí)候做的都是與后來業(yè)務(wù)完全不同的事情畔勤。

>> “Make something people want”(制造用戶需要的東西)

>> 小團(tuán)隊(duì)更容易成功,創(chuàng)始人總數(shù)最好不要超過三個(gè)扒磁。其中一個(gè)原因是庆揪,創(chuàng)始人越多,股權(quán)越不容易平等分配妨托,容易造成內(nèi)耗缸榛。

>> “以前創(chuàng)業(yè)很昂貴,你不得不找到投資人才能創(chuàng)業(yè)兰伤。而現(xiàn)在内颗,唯一的門檻就是勇氣《厍唬”

◆ 精裝版譯者序 向著未來而生

>> 德國哲學(xué)家馬丁·海德格爾(Martin Heidegger)說過一句著名的話:人應(yīng)該“向死而生”均澳。意思是人面對死亡,才會(huì)停止那些無謂瑣碎的關(guān)注和困擾符衔,體會(huì)到什么是重要的事情找前,從而達(dá)到真正的存在。

>> 我覺得格雷厄姆的哲學(xué)是“向著未來而生”

>> 如果這種預(yù)測是正確的判族,就意味著未來20年里躺盛,政府的力量將縮小,個(gè)人和小團(tuán)體將崛起形帮,成為推動(dòng)社會(huì)前進(jìn)的主要力量槽惫。

>> 只要把握大趨勢,技術(shù)就會(huì)把個(gè)人送到難以想象的高度沃缘。

>> 你要做的就是“活在未來躯枢,然后造出現(xiàn)在還沒有的部分”(Live in the future, then build what's missing)则吟。

◆ 平裝版譯者序

>> hack的本義是“砍(木頭)”

>> hacker槐臀,也就是黑客。

>> “出于興趣而解決某個(gè)難題氓仲,不管它有沒有用水慨,這就是黑客得糜。”

>> 根據(jù)理查德·斯托曼的說法晰洒,黑客行為必須包含三個(gè)特點(diǎn):好玩朝抖、高智商、探索精神谍珊。只有其行為同時(shí)滿足這三個(gè)標(biāo)準(zhǔn)治宣,才能被稱為“黑客”。另外砌滞,它們也構(gòu)成了黑客的價(jià)值觀侮邀,黑客追求的就是這三種價(jià)值,而不是實(shí)用性或金錢贝润。

>> “黑客倫理”的一個(gè)必然推論就是绊茧,黑客不服從管教,具有叛逆精神打掘。

>> 真正的黑客致力于改變世界华畏,讓世界運(yùn)轉(zhuǎn)得更好。

>> 在本書中尊蚁,“黑客”就是指最優(yōu)秀的程序員亡笑,而不是入侵計(jì)算機(jī)系統(tǒng)的人。

◆ 前言

>> 沒有一個(gè)編程語言的設(shè)計(jì)者會(huì)相信“不同的語言各有千秋”這種文縐縐的客套話横朋。


◆ 第一部分 黑客如何成長及看待世界

◆ 1 為什么書呆子不受歡迎

>> “書呆子”的目標(biāo)具有兩重性况芒。他們毫無疑問想讓自己受歡迎,但是他們更愿意讓自己聰明叶撒。

>> 文藝復(fù)興時(shí)期的代表人物阿爾伯蒂有一句名言:“任何一種藝術(shù)绝骚,不管是否重要,如果你想要在該領(lǐng)域出類拔萃祠够,就必須全身心投入压汪。”

>>“受歡迎”的英語單詞是popular古瓤,這個(gè)詞還有另一個(gè)意思止剖,即“大眾化的,多數(shù)人的”落君,

>> 事實(shí)上穿香,大多數(shù)“會(huì)畫”的人,本身就很喜歡畫畫绎速,將許多時(shí)間投入其中皮获,這就是他們擅長畫畫的原因。

>> 書呆子被教導(dǎo)追求正確答案纹冤,而受歡迎的小孩被教導(dǎo)要討人喜歡洒宝。

>> 在一個(gè)人產(chǎn)生良知之前购公,折磨就是一種娛樂。

>> 沒有什么比一個(gè)共同的敵人更能使得人們團(tuán)結(jié)起來了雁歌。

>> 你在其他地方有所得宏浩,就會(huì)在這個(gè)地方有所失。

>> 不過靠瞎,成年人很清楚不用在乎別人怎么想

>> 就像任何一場戰(zhàn)爭比庄,勝利方也是要付出代價(jià)的。

>> 青少年都不喜歡孤獨(dú)一人


◆ 2 黑客與畫家

>> 黑客與畫家的共同之處乏盐,在于他們都是創(chuàng)作者印蔗。與作曲家、建筑師和作家一樣丑勤,黑客和畫家都試圖創(chuàng)作出優(yōu)秀的作品华嘹。他們本質(zhì)上都不是在做研究,雖然在創(chuàng)作過程中法竞,他們可能會(huì)發(fā)現(xiàn)一些新技術(shù)(那樣當(dāng)然更好)耙厚。

>> 建筑學(xué)和工程學(xué)之間的界限并不是很分明,但就是存在區(qū)別岔霸。這表現(xiàn)在“做什么”和“怎么做”:建筑師決定做什么薛躬,工程師想出怎么做虫溜。

>> 在英語中饲化,“建筑師”(architect)和“架構(gòu)師”(architect)是同一個(gè)詞翰意,所以這里用的是雙關(guān)語梦湘,意思是優(yōu)秀程序員不僅負(fù)責(zé)建造,還負(fù)責(zé)架構(gòu)翼雀。

>> 當(dāng)然徒探,“做什么”和“怎么做”不應(yīng)該分得太開葬荷。如果你決定做一件事坑夯,卻不知道怎么做岖寞,你就是在自找麻煩。

>> 創(chuàng)造優(yōu)美事物的方式往往不是從頭做起柜蜈,而是在現(xiàn)有成果的基礎(chǔ)上做一些小小的調(diào)整仗谆,或者將已有的觀點(diǎn)用比較新的方式組合起來。這種類型的工作很難用研究性的論文表達(dá)淑履。

>> 黑客搞懂“計(jì)算理論”(theory of computation)的必要性隶垮,與畫家搞懂顏料化學(xué)成分的必要性差不多大。

>> 你需要知道如何計(jì)算“時(shí)間復(fù)雜度”和“空間復(fù)雜度”(time and space complexity)秘噪;如果你要寫一個(gè)解析器狸吞,可能還需要知道狀態(tài)機(jī)(state machine)的概念;除此以外,并不需要知道特別多的理論捷绒。

>> 你把整個(gè)程序想清楚的時(shí)間點(diǎn),應(yīng)該是在編寫代碼時(shí)贯要,而不是在編寫代碼之前暖侨,這與作家、畫家和建筑師的做法完全一樣崇渗。

>> 編程語言首要的特性應(yīng)該是允許動(dòng)態(tài)擴(kuò)展字逗。

>> 靜態(tài)類型是某些計(jì)算機(jī)語言的一個(gè)特性,指編譯時(shí)對變量類型進(jìn)行嚴(yán)格檢查宅广,典型代表是C葫掉、C++和Java。在這一類語言中跟狱,在聲明變量時(shí)俭厚,必須指定類型,而且以后不能再改變驶臊。

>> 大學(xué)和實(shí)驗(yàn)室強(qiáng)迫黑客成為科學(xué)家挪挤,企業(yè)強(qiáng)迫黑客成為工程師。

>> 開發(fā)優(yōu)秀軟件的方法之一就是自己創(chuàng)業(yè)关翎。

>> 事實(shí)上扛门,微軟的第一個(gè)產(chǎn)品就是一種編程語言

>> 如果你想賺錢,你可能不得不去干那些很麻煩很令人討厭的事情纵寝,因?yàn)檫@些事情沒人愿意義務(wù)來干论寨。

>> 黑客如何才能做自己喜歡的事情?我認(rèn)為這個(gè)問題的解決方法是一個(gè)幾乎所有創(chuàng)作者都知道的方法:找一份養(yǎng)家糊口的“白天工作”(day job)爽茴。這個(gè)詞是從音樂家身上來的葬凳,他們晚上表演音樂,所以白天可以找一份其他工作室奏。更一般地說沮明,“白天工作”的意思是,你有一份為了賺錢的工作窍奋,還有一份為了愛好的工作荐健。

>> 我說黑客解決生計(jì)問題的方法是找一份“白天工作”,然后在其余時(shí)間開發(fā)優(yōu)美的軟件琳袄,不過我并沒有說這是一個(gè)新方法江场。開源軟件界的黑客早就這樣做了。我想說的其實(shí)是窖逗,開源軟件的這種工作模式可能就是正確的模式址否,因?yàn)樗呀?jīng)被其他領(lǐng)域的創(chuàng)作者驗(yàn)證過了。

>> 如此之多的一流黑客都在從事開源項(xiàng)目

>> 某幅作品如果有特別出色之處,你往往能夠在更早的作品中發(fā)現(xiàn)一個(gè)小規(guī)模的初期版本

>> 也許對于黑客來說佑附,采取像畫家這樣的做法很有好處:應(yīng)該定期地從頭開始樊诺,而不要長年累月地在一個(gè)項(xiàng)目上不斷工作,并且試圖把所有的最新想法都以修訂版的形式包括進(jìn)去音同。

>> 黑客就不一樣词爬,從一開始做的就是原創(chuàng)性工作,根本沒有他人完美的成果可以依靠权均。

>> 黑客的出發(fā)點(diǎn)是原創(chuàng)顿膨,最終得到一個(gè)優(yōu)美的結(jié)果;而科學(xué)家的出發(fā)點(diǎn)是別人優(yōu)美的結(jié)果叽赊,最終得到原創(chuàng)性恋沃。

>> 繪畫還有一個(gè)值得借鑒的地方:一幅畫是逐步完成的。通常一開始是一張草圖必指,然后再逐步填入細(xì)節(jié)囊咏。但是,它又不單純是一個(gè)填入細(xì)節(jié)的過程塔橡。有時(shí)匆笤,原先的構(gòu)想看來是錯(cuò)的,你就必須動(dòng)手修改谱邪。無數(shù)古代油畫放在X光下檢視炮捧,就能看出修改痕跡,四肢的位置被移動(dòng)過惦银,或者臉部的表情經(jīng)過了調(diào)整咆课。

>> 眼下想必每個(gè)人都知道,過早優(yōu)化是一件危險(xiǎn)的事情扯俱。我認(rèn)為书蚪,我們應(yīng)該對“過早設(shè)計(jì)”也抱有同樣的擔(dān)憂,不要太早決定一個(gè)程序應(yīng)該怎么做迅栅。

>> 堅(jiān)持一絲不茍殊校,就能取得優(yōu)秀的成果,因?yàn)槟切┛床灰姷募?xì)節(jié)累加起來读存,就變得可見了为流。

>> 對于編程,這實(shí)際上意味著你可以把bug留到以后解決让簿。

>> 正確的合作方法是將項(xiàng)目分割成嚴(yán)格定義的模塊敬察,每一個(gè)模塊由一個(gè)人明確負(fù)責(zé)。模塊與模塊之間的接口經(jīng)過精心設(shè)計(jì)尔当,如果可能的話莲祸,最好把文檔說明寫得像編程語言規(guī)范那樣清晰。

>> 了解別人對于事情的看法,并不代表你為他的利益服務(wù)锐帜。在某些情況下田盈,比如在打仗的時(shí)候,了解對手正是為了打擊對手12缴阎。

>> 舉例來說允瞧,幾乎所有最偉大的繪畫作品都是畫人的,因?yàn)槿祟惪偸菍ψ陨砀信d趣药蜻。

>> 普通黑客與優(yōu)秀黑客的所有區(qū)別之中瓷式,會(huì)不會(huì)“換位思考”可能是最重要的單個(gè)因素替饿。

>> 判斷一個(gè)人是否具備“換位思考”的能力有一個(gè)好方法语泽,那就是看他怎樣向沒有技術(shù)背景的人解釋技術(shù)問題。

>> 程序必須寫得能夠供人們閱讀视卢,偶爾供計(jì)算機(jī)執(zhí)行踱卵。


◆ 3 不能說的話

不能說的話:

(1)真話,觸怒他人的言論据过;

(2)時(shí)空差異:將當(dāng)代觀念與不同時(shí)期的古代觀念diff一下惋砂,看下是否能說;

(3)道貌岸然:找那些一本正經(jīng)的衛(wèi)道者绳锅,看看他們到底在捍衛(wèi)什么西饵。

(4)機(jī)制:去觀察禁忌是如何產(chǎn)生的。

觀察不能說的話鳞芙,有如下好處:

>> 優(yōu)秀作品往往來自其他人忽視的想法眷柔,而最容易被忽視的想法就是那些被禁止的思想觀點(diǎn)。

>> 一個(gè)好的科學(xué)家原朝,并不僅僅是避開傳統(tǒng)觀點(diǎn)驯嘱,還要努力打破傳統(tǒng)觀點(diǎn)≡梗科學(xué)家就是要自找麻煩鞠评。

怎么做:

發(fā)現(xiàn)了不能說的話,最好守口如瓶壕鹉,但心里無所不想剃幌。如果一定要你說,好的回答是“我還沒想好”晾浴。

>> 你不要直接攻擊某個(gè)標(biāo)簽锥忿,而要攻擊它的“元標(biāo)簽”。所謂“元標(biāo)簽”怠肋,就是對某個(gè)標(biāo)簽的抽象描述敬鬓。如果人們開始討論元標(biāo)簽,那么原來的標(biāo)簽反而不會(huì)受到注意了。

永遠(yuǎn)質(zhì)疑:

>> 如果自己就是潮水的一部分钉答,怎么能看見潮流的方向呢础芍?你只能永遠(yuǎn)保持質(zhì)疑:什么話是我不能說的?為什么数尿?


◆ 第二部分 黑客如何工作及影響世界

◆ 4 良好的壞習(xí)慣

>> 黑客是不服從管教的

>> 只有深入了解當(dāng)前的技術(shù)仑性,黑客才能構(gòu)想下一代技術(shù)。

>> 1977年右蹦,IBM公司內(nèi)部肯定有一些部門正在開發(fā)下一代計(jì)算機(jī)诊杆。他們沒有料到的是,真正的下一代計(jì)算機(jī)不是誕生于IBM實(shí)驗(yàn)室何陆,而是由兩個(gè)與他們完全不相干的長頭發(fā)年輕人在舊金山的一間車庫里開發(fā)出來的晨汹。這兩個(gè)年輕人,一個(gè)是史蒂夫·喬布斯贷盲,另一個(gè)是史蒂夫·沃茲尼亞克

>> 1977年淘这,蘋果公司推出的Apple II計(jì)算機(jī)是世界上第一臺(tái)個(gè)人計(jì)算機(jī)。

>> 最新的版權(quán)法設(shè)置了前所未有的障礙巩剖,禁止外部人員了解專有技術(shù)的內(nèi)部細(xì)節(jié)铝穷,從而也就禁止了外部人員經(jīng)由這個(gè)途徑獲得新構(gòu)想。

>> 如果我們不可以研究當(dāng)前的技術(shù)佳魔,不能思考如何改進(jìn)它曙聂,那么我們怎樣才能開發(fā)出新技術(shù)呢?

>> 具有諷刺意味的是鞠鲜,這種局面正是黑客自己造成的宁脊。

>> 對于適當(dāng)?shù)牟环墓芙瘫3謱捜荩@不會(huì)有太大的壞處镊尺,反而很有利于造就美國的國家優(yōu)勢朦佩,它使得美國不僅能吸引聰明人,還能吸引那些很自負(fù)的人庐氮。黑客永遠(yuǎn)是自負(fù)的语稠。


◆ 5 另一條路

>> 我們的軟件Viaweb是最受歡迎的網(wǎng)上商店生成器,用戶超過2萬人弄砍。

◆◆ 下一個(gè)潮流仙畦?

>> 互聯(lián)網(wǎng)軟件運(yùn)行在服務(wù)器上,用戶界面就是網(wǎng)頁音婶。對于普通用戶來說慨畸,這種新型軟件將更容易、更便宜衣式、更機(jī)動(dòng)寸士、更可靠檐什,通常也比桌面軟件更強(qiáng)大。

>> 所以弱卡,大多數(shù)時(shí)候乃正,你不需要一臺(tái)全功能的計(jì)算機(jī)(即本身可以運(yùn)行軟件的計(jì)算機(jī)),你所需要的設(shè)備只要有鍵盤婶博、屏幕和瀏覽器就夠了瓮具,可能還有無線網(wǎng)卡。

>> 有些公司生產(chǎn)輕量級的消費(fèi)類電子產(chǎn)品凡人,它們意識(shí)到“服務(wù)才賺錢”以后名党,往往就會(huì)把在線服務(wù)與硬件捆綁在一起賣。這個(gè)模式效果不好挠轴,第一個(gè)原因是传睹,消費(fèi)類電子產(chǎn)品和在線服務(wù)是兩種類型的業(yè)務(wù),需要兩種不同的公司來做忠荞;第二個(gè)原因是蒋歌,消費(fèi)者不喜歡硬件和服務(wù)捆綁在一起收費(fèi)帅掘。

◆◆ 用戶的勝利

>> 互聯(lián)網(wǎng)應(yīng)用程序能夠同時(shí)被多人使用委煤,所以非常適合團(tuán)隊(duì)協(xié)作性的工作。

>> 安全問題的關(guān)鍵是不要有漏洞修档,而不是任何設(shè)計(jì)上的決策碧绞。

◆◆ 軟件的發(fā)布

>> 常見的桌面軟件可能一年發(fā)布一到兩個(gè)新版本,而我們在Viaweb經(jīng)常是一天發(fā)布三到五個(gè)版本吱窝。

>> 對于互聯(lián)網(wǎng)軟件來說讥邻,大部分的變化是細(xì)微和漸進(jìn)的,所以引入bug的機(jī)會(huì)比較小院峡。

>> 互聯(lián)網(wǎng)軟件的發(fā)布規(guī)則是:它運(yùn)行不了兴使,你就無法發(fā)布;一旦它能運(yùn)行了照激,你就可以立刻發(fā)布发魄。

>> “版本”這個(gè)概念不適用于互聯(lián)網(wǎng)軟件。

◆◆ 軟件bug

>> 早一點(diǎn)發(fā)現(xiàn)bug就不容易形成復(fù)合式bug俩垃,也就是互相影響的兩個(gè)bug励幼。

>> 在軟件中,復(fù)合式bug是最難發(fā)現(xiàn)的bug

>> 復(fù)合式bug有一個(gè)子類型:兩個(gè)bug是互相彌補(bǔ)的口柳,好比“負(fù)負(fù)得正”苹粟,軟件反而能正常運(yùn)行。這種bug可能才是最難發(fā)現(xiàn)的bug跃闹。當(dāng)你修正了其中的一個(gè)bug嵌削,另一個(gè)bug才會(huì)暴露出來毛好。這時(shí)你會(huì)覺得剛才修正錯(cuò)了,因?yàn)槟鞘悄阕詈笮薷牡牡胤娇溜酰憔蛻岩勺约涸谀抢镒鲥e(cuò)了睛榄,但是你其實(shí)是對的。

◆◆ 客戶支持

>> Viaweb不是這樣想帅。我們的客戶支持是免費(fèi)的场靴,因?yàn)槲覀兿M烙脩舻姆磻?yīng)。如果他們使用時(shí)遇到困難港准,我們希望立刻知道旨剥,這樣就能再現(xiàn)錯(cuò)誤,從而解決問題并發(fā)布新版本浅缸。

>> 我們的政策是當(dāng)場修復(fù)bug轨帜,這改變了客服人員與黑客之間的關(guān)系。

◆◆ 全身心投入

>> 構(gòu)思這種東西有一個(gè)特點(diǎn)衩椒,那就是它會(huì)導(dǎo)致更多的構(gòu)思蚌父。

>> 將一個(gè)構(gòu)思束之高閣,不僅意味著延遲它的實(shí)現(xiàn)毛萌,還意味著延遲所有在實(shí)現(xiàn)過程中激發(fā)的構(gòu)思苟弛。

>> 大公司的做法不是立刻實(shí)現(xiàn)新功能,而是先為新功能做一個(gè)計(jì)劃阁将。

>> 我們有改進(jìn)的想法膏秫,但是如果我們想到應(yīng)該怎么改進(jìn),就已經(jīng)把它實(shí)現(xiàn)了做盅。

◆◆ 逆向的《人月神話》

>> 當(dāng)項(xiàng)目進(jìn)度落后時(shí)缤削,光靠增加人力到該項(xiàng)目中,并不會(huì)加快進(jìn)度吹榴,反而有可能使進(jìn)度更加延后亭敢。

◆◆ 關(guān)注用戶

>> 基準(zhǔn)測試(benchmark test)指的是先設(shè)置一個(gè)基本的數(shù)據(jù)環(huán)境,測試應(yīng)用程序的表現(xiàn)图筹,然后把這個(gè)表現(xiàn)當(dāng)作“基準(zhǔn)”(benchmark)帅刀,用來比較其他情況下應(yīng)用程序的表現(xiàn)。

◆◆ 金錢問題

>> 20世紀(jì)90年代早期婿斥,我讀過一篇文章劝篷,它稱應(yīng)該讓用戶像訂報(bào)紙那樣按照使用時(shí)間長短訂購軟件的使用權(quán)。第一眼看上去民宿,這種說法好像很滑稽娇妓,但是后來我意識(shí)到這個(gè)觀點(diǎn)是對的,因?yàn)樗从沉塑浖_發(fā)的現(xiàn)實(shí):軟件開發(fā)不是靜態(tài)的活鹰,而是一個(gè)持續(xù)不斷的動(dòng)態(tài)過程哈恰。

>> 互聯(lián)網(wǎng)軟件是一個(gè)很理想的收入來源只估。你每個(gè)季度的銷售額不是從零開始,而是擁有一個(gè)持續(xù)的現(xiàn)金流着绷。因?yàn)榛ヂ?lián)網(wǎng)軟件每時(shí)每刻都可以升級蛔钙,所以你不用擔(dān)心做錯(cuò)什么事。事實(shí)上荠医,你不可能真的做錯(cuò)什么事吁脱,因?yàn)槿绻脩敉春弈銓浖男薷模泷R上就會(huì)知道彬向。你也不會(huì)有壞賬的煩惱兼贡,如果誰不付錢,你就停止對他的服務(wù)娃胆。此外遍希,你也不可能遇到盜版問題。

>> 我覺得里烦,軟件公司明白這個(gè)道理凿蒜,所以故意對某些盜版行為睜一只眼閉一只眼。

>> 由于互聯(lián)網(wǎng)軟件無法盜版胁黑,所以軟件公司必須想出其他策略推廣軟件废封。

>> 軟件公司有時(shí)會(huì)采用分銷模式,讓ISP分銷互聯(lián)網(wǎng)軟件别厘。這樣做很不好虱饿。服務(wù)器必須在你自己的控制之中拥诡,因?yàn)槟阈枰粩喔倪M(jìn)硬件和軟件触趴。如果你放棄對服務(wù)器的直接控制,就放棄了互聯(lián)網(wǎng)軟件的大部分優(yōu)勢渴肉。

◆◆ 目標(biāo)客戶

>> 不少公司很想知道冗懦,什么事情可以外包,什么事情不可以外包仇祭。一個(gè)可能的答案是披蕉,公司內(nèi)部所有不直接感受到競爭壓力的部門都應(yīng)該外包出去,讓它們暴露在競爭壓力之下乌奇。

◆◆ 桌面電腦

>> 在那個(gè)時(shí)候没讲,VisiCalc太先進(jìn)了,人們?yōu)榱四軌蚴褂眠@個(gè)軟件礁苗,紛紛去購買蘋果計(jì)算機(jī)爬凑。

>> 桌面電腦開始成為主流,因?yàn)樵S多創(chuàng)業(yè)公司為它寫軟件试伙。

>> 現(xiàn)在嘁信,創(chuàng)業(yè)公司有更多的理由選擇互聯(lián)網(wǎng)軟件創(chuàng)業(yè)于样,因?yàn)殚_發(fā)桌面軟件越來越乏味了。如果你現(xiàn)在開發(fā)桌面軟件潘靖,就不得不接受微軟公司的授權(quán)條款,調(diào)用它的API,為它那個(gè)bug百出的操作系統(tǒng)傷透腦筋洼畅。歷盡了千辛萬苦泵殴,你最終寫出了一個(gè)大受歡迎的軟件,這時(shí)你可能會(huì)發(fā)現(xiàn)单寂,你所做的一切其實(shí)只是在為微軟公司做市場調(diào)查啄刹。

◆◆ 微軟公司

>> 微軟的成功就是利用了IBM的疏忽。

>> 優(yōu)秀的開源瀏覽器最大的優(yōu)點(diǎn)則是會(huì)推動(dòng)HTTP和HTML繼續(xù)向前發(fā)展

◆◆ 創(chuàng)業(yè)公司

>> 你必須打破常規(guī)凄贩、快速行動(dòng)誓军,循規(guī)蹈矩不可能成功。

>> 互聯(lián)網(wǎng)軟件永遠(yuǎn)沒有收工的那一天疲扎,如果你愿意昵时,可以一直干下去,每天忙上16個(gè)小時(shí)椒丧。

>> “帕金森定律”成為官僚主義的代名詞壹甥,有一條就是“因?yàn)槟惚仨氉龅剑阅隳軌蜃龅健薄?/p>

>> 本文作者稱“因?yàn)槟隳軌蜃龅胶阅惚仨氉龅健笔悄嫦虻呐两鹕伞?/p>

>> 桌面軟件迫使用戶變成系統(tǒng)管理員句柠,互聯(lián)網(wǎng)軟件則迫使程序員變成系統(tǒng)管理員:用戶的壓力變小了,程序員的壓力變大了棒假。這未必是壞事溯职。

◆◆ 勉強(qiáng)夠用的網(wǎng)頁

>> 有一件事可能會(huì)打消你通過互聯(lián)網(wǎng)軟件創(chuàng)業(yè)的念頭,那就是網(wǎng)頁作為用戶界面帽哑,功能實(shí)在是太弱了谜酒。我承認(rèn),這確實(shí)是一個(gè)問題妻枕。我們真的想改造HTML語言和HTTP協(xié)議僻族,對許多地方進(jìn)行加強(qiáng)。不過必須指出屡谐,目前階段的網(wǎng)頁剛好能滿足需要述么。

>> 對于相當(dāng)一部分使用者來說,打開瀏覽器就能使用軟件本身

>> 相比之下愕掏,互聯(lián)網(wǎng)軟件不需要做任何關(guān)于安裝的假設(shè)度秘,只要能上網(wǎng)的地方,它就能運(yùn)行亭珍。

◆◆ 為什么不嘗試一下

>> 首先敷钾,管理企業(yè)其實(shí)很簡單枝哄,只要記住兩點(diǎn)就可以了:做出用戶喜歡的產(chǎn)品,保證開支小于收入阻荒。只要做到這兩點(diǎn)挠锥,你就會(huì)超過大多數(shù)創(chuàng)業(yè)公司。隨著事業(yè)的發(fā)展侨赡,你自己就能琢磨出來其他的訣竅蓖租。

>> 比較軟件的標(biāo)準(zhǔn)應(yīng)該是看對手的軟件將來會(huì)有什么功能,而不是現(xiàn)在有什么功能羊壹。

>> 如果你不打算自己動(dòng)手設(shè)計(jì)和開發(fā)蓖宦,那就不要?jiǎng)?chuàng)業(yè)。

>> 微軟公司的恐怖之處在于油猫,它大到可以開發(fā)任何軟件稠茂,就像一座能夠行走的大山。

>> 不要被微軟嚇到情妖。你能做到它做不到的事情睬关,正如它能做到你做不到的事情一樣。

◆ 6 如何創(chuàng)造財(cái)富

>> 如果你想致富毡证,應(yīng)該怎么做电爹?我認(rèn)為最好的辦法就是自己創(chuàng)業(yè),或者加入創(chuàng)業(yè)公司料睛。

>> 創(chuàng)業(yè)公司其實(shí)就是解決了某個(gè)技術(shù)難題的小公司丐箩。

◆◆ 一個(gè)命題

>> 從經(jīng)濟(jì)學(xué)觀點(diǎn)看,你可以把創(chuàng)業(yè)想象成一個(gè)壓縮過程恤煞,你的所有工作年份被壓縮成了短短幾年屎勘。你不再是低強(qiáng)度地工作40年,而是以極限強(qiáng)度工作4年阱州。在高技術(shù)領(lǐng)域挑秉,這種壓縮的回報(bào)尤其豐厚,工作效率越高苔货,額外報(bào)酬就越高。

>> 往往只有在創(chuàng)業(yè)公司里立哑,你才能得到一種寶貴的工作環(huán)境夜惭,就叫作“不受干擾”。

>> 這里的假設(shè)是铛绰,如果每個(gè)員工按照他創(chuàng)造的財(cái)富獲得報(bào)酬诈茧,那么整個(gè)公司的利潤將最大化。

>> 我沒有說放大因子不多不少正好是36捂掰,但肯定是大于10的敢会,在個(gè)別情況下甚至高達(dá)100曾沈。

>> 這里有一個(gè)守恒定律:如果你想賺100萬美元,就不得不忍受相當(dāng)于100萬美元的痛苦鸥昏。

◆◆ 運(yùn)氣的成分

>> 但微軟公司碰巧是歷史上最大商業(yè)錯(cuò)誤之一——DOS操作系統(tǒng)的授權(quán)協(xié)議——的受益者塞俱。

>> 如果IBM按照常理要求獨(dú)家購買微軟的產(chǎn)品,不許微軟向第三方提供吏垮,微軟也只能乖乖地簽字障涯。

>> 如果IBM沒有犯下這個(gè)錯(cuò)誤,微軟依然會(huì)是一家成功的公司膳汪,但是不會(huì)膨脹得這么大這么快唯蝶。

>> 致富的方法有許多種,本文只談?wù)撈渲械囊环N遗嗽,也就是通過創(chuàng)造有價(jià)值的東西在市場上得到回報(bào)粘我,從而致富。

>> 通過創(chuàng)造有價(jià)值的東西而致富痹换,這種方法的優(yōu)勢不僅僅在于它是合法的(許多其他方法如今都是不合法的)涂滴,還在于它更簡單,你只需要做出別人需要的東西就可以了晴音。

◆◆ 金錢不等于財(cái)富

>> 即使你沒有錢柔纵,你也能擁有財(cái)富。

>> 財(cái)富才是你的目標(biāo)锤躁,金錢不是搁料。

>> 如果財(cái)富真的這么重要,為什么大家都把掙錢掛在嘴邊呢系羞?部分原因是郭计,金錢是財(cái)富的一種簡便的表達(dá)方式:金錢有點(diǎn)像流動(dòng)的財(cái)富,兩者往往可以互相轉(zhuǎn)化椒振。

>> 使用“掙錢”這個(gè)詞會(huì)不利于理解如何才能掙錢昭伸。

>> 金錢就是交換媒介,它必須數(shù)量稀少澎迎,并且便于攜帶庐杨。

>> 交換媒介的優(yōu)點(diǎn)是,它使得交易可以進(jìn)行下去夹供。缺點(diǎn)是灵份,它往往模糊了交易的實(shí)質(zhì)。人們覺得做生意就是為了掙錢哮洽,但是金錢其實(shí)只是一種媒介填渠,讓大家可以更方便地獲得自己想要的東西。大多數(shù)生意的目的是創(chuàng)造財(cái)富,做出人們真正需要的東西氛什。

>> 我這里指的只是一種特定的技術(shù)層面上的“財(cái)富”——人們用金錢和你交換的東西莺葫。

>> 對于自己感興趣的東西,你會(huì)覺得它們很有價(jià)值枪眉,但是它們恰恰最不可能與他人眼中有價(jià)值的東西發(fā)生重合捺檬。

◆◆ 大餅謬論

>> 但是大多數(shù)情況下,世界上可供交換的財(cái)富不是一個(gè)恒定不變的量瑰谜。人類歷史上的財(cái)富一直在不停地增長和毀滅(總體上看是凈增長)欺冀。

>> 假設(shè)你擁有一輛老爺車,你可以不去管它萨脑,在家中悠閑度日隐轩,也可以自己動(dòng)手把它修葺一新。這樣做的話渤早,你就創(chuàng)造了財(cái)富职车。世界上因?yàn)槎嗔艘惠v修葺一新的車,財(cái)富就變得更多了一點(diǎn)

◆◆ 手工藝人

>> 最可能明白財(cái)富能被創(chuàng)造出來的人就是那些善于制作東西的人鹊杖,也就是手工藝人悴灵。

>> 隨著工業(yè)化時(shí)代的來臨,手工藝人越來越少骂蓖。目前還存在的最大的手工藝人群體就是程序員积瞒。

>> 我們這個(gè)世界,你向下沉淪或者向上奮進(jìn)都取決于你自己登下,不能把原因推給外界茫孔。

>> 創(chuàng)造出來的財(cái)富不一定非要通過出售實(shí)現(xiàn)價(jià)值。

◆◆ 工作是什么

>> 公司一切行為的目的都是盈利被芳,從而生存下去缰贝。創(chuàng)造財(cái)富是大多數(shù)公司盈利的手段。

>> 我們說畔濒,財(cái)富就意味著人們需要的東西剩晴,那么把商品送到顧客手中也是人們需要的。許許多多不生產(chǎn)物質(zhì)商品的公司都是在如此創(chuàng)造財(cái)富侵状。幾乎所有情況下赞弥,公司的存在目的就是滿足人們的某種需要。

>> 真正重要的是做出人們需要的東西壹将,而不是加入某個(gè)公司嗤攻。

◆◆ 更努力地工作

>> 真正的問題實(shí)際上在于公司無法測量你的貢獻(xiàn)。

>> 銷售員是一個(gè)例外诽俯。他們產(chǎn)生的收入很容易測量,他們的薪水往往是銷售額的一個(gè)百分比。如果一個(gè)銷售員想更努力地工作暴区,他馬上就可以這樣做闯团,并且自動(dòng)按比例得到更多的報(bào)酬。

>> 除了銷售員以外仙粱,還有一個(gè)職位房交,大公司可以雇到頂級人才,那就是高級的管理職位伐割。

>> 你想更努力地工作候味,但是你的工作與其他許多人的工作混雜在一起,這樣就產(chǎn)生了問題隔心。在大公司中白群,個(gè)人的表現(xiàn)無法單獨(dú)測量,公司里其他人會(huì)拖累你硬霍。

◆◆ 可測量性和可放大性

>> 要致富帜慢,你需要兩樣?xùn)|西:可測量性和可放大性。你的職位產(chǎn)生的業(yè)績應(yīng)該是可測量的唯卖,否則你做得再多粱玲,也不會(huì)得到更多的報(bào)酬。此外拜轨,你還必須有可放大性抽减,也就是說你做出的決定能夠產(chǎn)生巨大的效應(yīng)。

>> CEO也是一種同時(shí)具備可測量性和可放大性的工作橄碾。公司的表現(xiàn)就是CEO的表現(xiàn)卵沉,所以它具備可測量性;CEO的決策決定了整個(gè)公司的方向堪嫂,所以它具備可放大性偎箫。

>> 我認(rèn)為,任何一個(gè)通過自身努力而致富的個(gè)人皆串,在他身上應(yīng)該都能同時(shí)發(fā)現(xiàn)可測量性和可放大性淹办。我能想到的例子就有CEO、電影明星恶复、基金經(jīng)理和專業(yè)運(yùn)動(dòng)員怜森。

◆◆ 小團(tuán)隊(duì) = 可測量性

>> 你最好找出色的人合作,因?yàn)樗麄兊墓ぷ骱湍愕囊黄鹌骄?jì)算谤牡。

>> 喬布斯曾經(jīng)說過副硅,創(chuàng)業(yè)的成敗取決于最早加入公司的那10個(gè)人。我基本同意這個(gè)觀點(diǎn)翅萤,雖然我覺得真正決定成敗的其實(shí)只是前5人恐疲。小團(tuán)隊(duì)的優(yōu)勢不在于它本身的小,而在于你可以選擇成員。我們不需要小村莊的那種“小”培己,而需要全明星第一陣容的那種“小”碳蛋。

>> 所以,在不考慮其他因素的情況下省咨,對一個(gè)非常能干的人來說肃弟,待在大公司里可能是一件很糟的事情,因?yàn)樗谋憩F(xiàn)被其他不能干的人拖累了零蓉。

>> 一個(gè)非常能干而且在乎回報(bào)的人笤受,通常在同類人組成的小團(tuán)隊(duì)中會(huì)有更出色的表現(xiàn),自己也會(huì)感到更滿意敌蜂。

◆◆ 高科技 = 可放大性

>> 什么是技術(shù)箩兽?技術(shù)就是某種手段,就是我們做事的方式紊册。如果你發(fā)現(xiàn)了一種做事的新方式比肄,它的經(jīng)濟(jì)價(jià)值就取決于有多少人使用這種新方式。技術(shù)就是釣魚的魚竿囊陡,而不是那條魚芳绩。這就是創(chuàng)業(yè)公司與餐館或理發(fā)店的區(qū)別。餐館煎雞蛋撞反,理發(fā)店剪頭發(fā)妥色,每次只能為一個(gè)顧客提供服務(wù),但是如果你解決了一個(gè)熱門的技術(shù)難題遏片,別人都會(huì)使用你的解決方案嘹害。這就是可放大性。

>> 回顧歷史吮便,大多數(shù)因?yàn)閯?chuàng)造財(cái)富而發(fā)財(cái)?shù)娜耸峭ㄟ^開發(fā)新技術(shù)而實(shí)現(xiàn)的笔呀。

>> 17世紀(jì),荷蘭人掌握了造船術(shù)和航海知識(shí)髓需,那也是當(dāng)時(shí)的高科技许师,因此荷蘭人主宰了歐洲前往遠(yuǎn)東的航線。

>> 大公司開發(fā)出來的新技術(shù)只出現(xiàn)在那些需要大規(guī)模資本投入的領(lǐng)域僚匆,比如微處理器微渠、電廠和大型民用飛機(jī)等,因?yàn)樵谶@些領(lǐng)域內(nèi)創(chuàng)業(yè)公司沒有能力與之競爭咧擂。

>> 生物科技類和軟件類的創(chuàng)業(yè)公司很顯然都是解決高難度技術(shù)問題的逞盆。

>> 沃爾瑪也是如此,它的創(chuàng)始人山姆·沃頓(Sam Walton)并不是因?yàn)榻?jīng)營零售業(yè)而致富松申,而是因?yàn)樵O(shè)計(jì)出了一種新型商店云芦。

>> 選擇公司要解決什么問題應(yīng)該以問題的難度作為指引俯逾,而且此后的各種決策都應(yīng)該以此為原則。Viaweb的一條經(jīng)驗(yàn)法則就是“更上一層樓”焕数。

>> 在實(shí)際操作中纱昧,這就意味著我們故意選擇那些很困難的技術(shù)問題刨啸。

>> 風(fēng)險(xiǎn)投資人(Venture Capitalist堡赔,VC)知道這個(gè)道理,并為它起了一個(gè)名字——進(jìn)入壁壘设联。如果你有一個(gè)新點(diǎn)子善已,你去找風(fēng)險(xiǎn)投資人,問他是否投資离例,他首先就會(huì)問你幾個(gè)問題换团,其中之一就是其他人復(fù)制你的模式是否很困難。

>> 設(shè)置“進(jìn)入壁壘”的方法之一就是申請專利宫蛆。

>> 費(fèi)羅·法恩斯沃斯艘包,電視機(jī)的發(fā)明者,可是沒有人知道他耀盗,因?yàn)樗墓緵]有從電視機(jī)上面賺到錢想虎。賺到錢的公司是RCA,發(fā)明電視機(jī)給法恩斯沃斯帶來的結(jié)果就是一場長達(dá)10年的專利訴訟叛拷。

>> 總的來說舌厨,這也是很好的處事原則。如果你有兩個(gè)選擇忿薇,就選較難的那個(gè)裙椭。

◆◆ 潛規(guī)則

>> 但創(chuàng)業(yè)是有一些潛規(guī)則的,其中一條就是很多事情由不得你署浩。真正創(chuàng)業(yè)以后揉燃,你的競爭對手決定了你到底要有多辛苦

>> 另一條潛規(guī)則是,創(chuàng)業(yè)的付出與回報(bào)雖然總體上是成比例的筋栋,但是在個(gè)體上是不成比例的炊汤。

◆◆ 用戶數(shù)量

>> 我認(rèn)為,如果你的公司有機(jī)會(huì)被收購二汛,那將是不錯(cuò)的選擇婿崭。管理一家公司與創(chuàng)立一家公司是不同的兩件事。當(dāng)情況基本穩(wěn)定下來以后肴颊,不妨讓大公司來接手氓栈。

>> 潛在的買家會(huì)盡可能地拖延收購。收購這件事最難的地方就是讓買方真正拿出錢婿着。大多數(shù)時(shí)候授瘦,促成買方掏錢的最好辦法不是讓買家看到有獲利的可能醋界,而是讓他們感到失去機(jī)會(huì)的恐懼。對于買家來說提完,最強(qiáng)的收購動(dòng)機(jī)就是讓他們看到競爭對手可能收購你形纺,我們發(fā)現(xiàn)這會(huì)使得CEO們連夜行動(dòng)。次強(qiáng)的動(dòng)機(jī)則是讓他們擔(dān)心如果現(xiàn)在不收購你徒欣,你的高速成長將使得未來的收購耗資巨大逐样,甚至你本身可能變成他們的一個(gè)競爭對手。

>> 在這兩種收購動(dòng)機(jī)中打肝,歸根結(jié)底的因素都是用戶數(shù)量脂新。你以為買家在收購前會(huì)做很多研究,搞清楚你的公司到底值多少錢粗梭,其實(shí)根本不是這么回事争便,他們真正在意的只是你擁有的用戶數(shù)量。

>> 事實(shí)上断医,買家假定用戶知道誰有最好的技術(shù)滞乙。

>> 你開辦創(chuàng)業(yè)公司不是單純地為了解決問題,而是為了解決那些用戶關(guān)心的問題鉴嗤。

>> 盡快拿出1.0版斩启,然后根據(jù)用戶的反映而不是自己的猜測優(yōu)化軟件。

>> 你必須時(shí)刻牢記的最基本的原則就是躬窜,創(chuàng)造人們需要的東西浇垦,也就是創(chuàng)造財(cái)富。

>> 如果你想通過創(chuàng)造財(cái)富致富荣挨,那么你必須知道人們需要什么男韧。

◆◆ 財(cái)富和權(quán)力

>> 資產(chǎn)階級在歷史上首先出現(xiàn)在意大利北部和荷蘭,這可能不是偶然默垄,因?yàn)槟抢餂]有強(qiáng)大的中央政府此虑。這兩個(gè)地區(qū)是那時(shí)最富裕的地方,后來變成了文藝復(fù)興向外擴(kuò)散的兩大中心口锭。

>> 沒有財(cái)富的激勵(lì)朦前,技術(shù)革新就會(huì)逐漸停頓。

>> 緩慢工作的后果并不僅僅是延遲了技術(shù)革新鹃操,而且很可能會(huì)扼殺技術(shù)革新韭寸。

>> 要鼓勵(lì)大家去創(chuàng)業(yè),只要懂得藏富于民荆隘,國家就會(huì)變得強(qiáng)大恩伺。讓“書呆子”保住他們的血汗錢,你就會(huì)無敵于天下椰拒。

◆ 7 關(guān)注貧富分化

>> 有沒有可能晶渠,在現(xiàn)代社會(huì)中凰荚,收入差距拉大實(shí)際上是一種健康的信號(hào)?

◆◆ 財(cái)富的老爹模式

>> 金錢只是用來交易財(cái)富的一種手段褒脯,財(cái)富才是有價(jià)值的東西便瑟,我們購買的商品和服務(wù)都屬于財(cái)富。

>> 如果你想要更多的財(cái)富番川,自己生產(chǎn)就可以了到涂。

>> 每個(gè)人的技能不同,導(dǎo)致收入不同,這才是貧富分化的主要原因

>> “奧卡姆剃刀原理”所說站故,簡單的解釋就是最好的解釋。

>> 一個(gè)人的工作具有多少價(jià)值不是由政府決定的,而是由市場決定的渺鹦。

>> 但是在現(xiàn)實(shí)中,財(cái)富是用工作成果衡量的

◆◆ 偷竊

>> 不管是戰(zhàn)爭還是政治斗爭舌稀,本質(zhì)上都屬于偷竊硬萍。

>> 在控制程度更高的社會(huì),統(tǒng)治者和官僚階層用稅收代替直接充公虎锚。但是硫痰,根本的一點(diǎn)并沒有變,那就是致富的方法不是創(chuàng)造財(cái)富窜护,而是以統(tǒng)治者的強(qiáng)權(quán)進(jìn)行搜刮掠奪效斑。

>> 在中世紀(jì),中產(chǎn)階級其實(shí)是一個(gè)獨(dú)立的團(tuán)體柱徙。封建社會(huì)只有兩個(gè)階級:貴族與農(nóng)奴(為貴族服務(wù)的人)缓屠。中產(chǎn)階級是一個(gè)新的第三類團(tuán)體,他們出現(xiàn)在城鎮(zhèn)中护侮,以制造業(yè)和貿(mào)易為生敌完。

>> 事實(shí)上,他們創(chuàng)造出來的東西使得人類的物質(zhì)生活變得更富有羊初。他們只能這樣做滨溉,否則不會(huì)有人付錢給他們的。

◆◆ 技術(shù)的杠桿效應(yīng)

>> 技術(shù)應(yīng)該會(huì)引起收入差距的擴(kuò)大长赞,但是似乎能縮小其他差距晦攒。

>> 現(xiàn)在,由于技術(shù)的發(fā)展得哆,富人的生活與普通人的差距縮小了脯颜。

>> 現(xiàn)在不是這樣了,石英表被發(fā)明出來了柳恐,一塊普通的石英表反而比幾十萬美元的名牌機(jī)械表走時(shí)更準(zhǔn)伐脖。

>> 一塊普通的石英表热幔,每天的誤差大約是0.5秒。

>> 富人最喜歡的就是那些方便易用的產(chǎn)品讼庇。

>> 如今绎巨,確實(shí)有很多人非常有錢,完全不必再去工作蠕啄,他們之所以還在工作场勤,不是因?yàn)楦械缴鐣?huì)壓力,而是因?yàn)闊o所事事使人感到孤獨(dú)和消沉歼跟。

>> 今天的人們多多少少還是有一些互相隔離的趨勢和媳,但主要是因?yàn)榻逃龑哟蔚牟顒e,而不是財(cái)富的差別哈街。

>> 無論在物質(zhì)上留瞳,還是在社會(huì)地位上,技術(shù)好像都縮小了富人與窮人之間的差距骚秦,而不是讓這種差距擴(kuò)大了她倘。

>> 如果參觀雅虎、英特爾或思科公司作箍,你會(huì)看到每個(gè)人都穿著差不多的衣服硬梁,有著同樣的辦公室(或者小隔間)、同樣的家具胞得,彼此直呼對方的名字荧止,不加任何頭銜或敬語。

>> 技術(shù)在加大收入差距的同時(shí)阶剑,縮小了大部分其他差距跃巡。

◆◆ 公理的不同意見

>> 這種收入差距只是因?yàn)榍罢叩募寄鼙群笳叩囊靛X得多。

>> 如果得不到報(bào)酬个扰,人們是否愿意創(chuàng)造財(cái)富瓷炮?唯一的可能就是,工作必須能提供樂趣递宅。會(huì)有人愿意免費(fèi)寫一個(gè)操作系統(tǒng)娘香,但是他們不愿意免費(fèi)為你安裝、提供電話支持办龄、進(jìn)行客戶培訓(xùn)等烘绽。即使是最先進(jìn)的高科技公司,也有至少90%的工作沒有樂趣俐填、令人生厭安接。

>> 總的來說,你要避免的是絕對貧窮英融,而不是相對貧窮盏檐。如果必須在這兩種社會(huì)之間做選擇歇式,根據(jù)目前的證據(jù),我選擇個(gè)人相對貧窮但是整體上更富裕的社會(huì)胡野。

◆ 8 防止垃圾郵件的一種方法

>> 如果你與奴隸比賽材失,你也會(huì)變成一個(gè)奴隸。

>> 我對貝葉斯方法寄予厚望硫豆,因?yàn)樗倪^濾能力可以隨著垃圾郵件一起進(jìn)化龙巨。

◆ 9 設(shè)計(jì)者的品味

>> 所謂“品味沒有好壞之分”的公理也就頓時(shí)見鬼去了。

>> 眾多不同學(xué)科對“美”的認(rèn)識(shí)有著驚人的相似度熊响。

>> 好設(shè)計(jì)是簡單的設(shè)計(jì)旨别。

>> 好設(shè)計(jì)是永不過時(shí)的設(shè)計(jì)。

>> 如果解決方法是丑陋的汗茄,那就肯定還有更好的解決方法秸弛,只是還沒有發(fā)現(xiàn)而已。

>> 以永不過時(shí)作為目標(biāo)是一種幫助自己找到最佳答案的方法:如果你不愿別人的答案取代你的答案剔难,你就只好自己給出最佳答案胆屿。

>> “風(fēng)潮”這個(gè)詞,從字面上就可以看出偶宫,它就像一陣風(fēng)似的,隨著時(shí)間經(jīng)常改變环鲤。

>> 如果你希望自己的作品對未來的人們有吸引力纯趋,方法之一就是讓你的作品對上幾代人有吸引力

>> 好設(shè)計(jì)是解決主要問題的設(shè)計(jì)。

>> 幽默感是強(qiáng)壯的一種表現(xiàn)冷离,始終擁有幽默感就代表你對厄運(yùn)一笑了之吵冒,而喪失幽默感則表示你被厄運(yùn)深深傷到。

>> 好的設(shè)計(jì)并非一定要有趣西剥,但是很難想象完全無趣的設(shè)計(jì)會(huì)是好的設(shè)計(jì)痹栖。

>> 如果你工作得不艱苦,你可能正在浪費(fèi)時(shí)間瞭空。

>> 在繪畫上揪阿,肖像畫通常占據(jù)最高地位。

>> 人們常常覺得野生動(dòng)物非常優(yōu)美咆畏,原因就是它們的生活非常艱苦南捂,在外形上不可能有多余的部分了。

>> 好設(shè)計(jì)是對稱的設(shè)計(jì)旧找。

>> 對稱有兩種:重復(fù)性對稱和遞歸性對稱溺健。

>> 在軟件中,能用遞歸解決的問題通常代表已經(jīng)找到了最佳解法钮蛛。

>> 對稱的危險(xiǎn)在于它可以用來取代思考鞭缭,在大量使用重復(fù)的時(shí)候剖膳,這種危險(xiǎn)性更大。

>> 好設(shè)計(jì)是能夠復(fù)制的設(shè)計(jì)岭辣。

>> 愛因斯坦并不想讓相對論變得很奇特吱晒,他只想找出真理,是真理本身顯得很奇特易结。

>> 達(dá)·芬奇之所以成為達(dá)·芬奇枕荞,主要原因不僅僅是他的天賦,更重要的是他生活在當(dāng)時(shí)的佛羅倫薩搞动,而不是米蘭躏精。

>> 單單是無法容忍丑陋的東西還不夠,只有對這個(gè)領(lǐng)域非常熟悉鹦肿,你才可能發(fā)現(xiàn)哪些地方可以動(dòng)手改進(jìn)矗烛。


◆ 第三部分 黑客的工具和設(shè)計(jì)方法

◆ 10 編程語言解析

機(jī)器語言:所有機(jī)器都有一張操作命令清單,這種操作命令的總和就是計(jì)算機(jī)的機(jī)器語言箩溃。

匯編語言:命令清單還是一樣的瞭吃,就是每個(gè)命令換了一個(gè)更人性化的名字。機(jī)器語言的加法命令是11001101涣旨,這可能就是計(jì)算機(jī)內(nèi)部的加法表達(dá)方式歪架,但是在匯編語言中,這條命令就改成了add霹陡。

◆◆ 高級語言

>> 所謂“編譯器”和蚪,本身就是一個(gè)程序,作用是將以簡便方式書寫的程序(就像上面這一行命令)轉(zhuǎn)變?yōu)橛布梢岳斫獾恼Z言烹棉。

>> 高級語言還有一個(gè)優(yōu)點(diǎn)攒霹,它使得程序更具有可移植性。不同計(jì)算機(jī)的機(jī)器語言都不是完全相同的浆洗,所以你無法將為某一種機(jī)型寫的機(jī)器語言程序放到另一種機(jī)型上運(yùn)行催束,只有徹底重寫才能實(shí)現(xiàn)。但是伏社,如果你的程序是用高級語言寫的抠刺,你只需要重寫編譯器就可以了。

>> 編譯器不是高級語言唯一的實(shí)現(xiàn)方法洛口,另一種方法是使用解釋器矫付,它的作用是實(shí)時(shí)地將代碼解釋為相應(yīng)的機(jī)器語言,然后一行行運(yùn)行第焰。相比之下买优,編譯器則是先將整個(gè)程序全部翻譯成機(jī)器語言,然后再運(yùn)行。

◆◆ 開放源碼

>> 編譯器處理的高級語言代碼又叫作源碼杀赢。它經(jīng)過翻譯以后產(chǎn)生的機(jī)器碼就叫作目標(biāo)碼烘跺。顧客購買市場上的商業(yè)軟件時(shí)得到的往往只是目標(biāo)碼

◆◆ 語言的戰(zhàn)爭

>> 程序員的時(shí)間要比計(jì)算機(jī)的時(shí)間昂貴得多,后者已經(jīng)變得很便宜了

>> 只有少數(shù)最關(guān)鍵的部分可能還會(huì)用到匯編語言

>> 事實(shí)介于這兩個(gè)極端之間脂崔。語言之間確實(shí)有差別滤淳,但是很難確定地說哪一種語言是最好的。這個(gè)領(lǐng)域依然還在快速發(fā)展砌左。

◆◆ 抽象性

>> 如果你非常關(guān)注運(yùn)行速度脖咐,那么最好使用接近機(jī)器的語言。

>> 使用越高級的語言汇歹,越不容易被攻擊屁擅。最常見的幾種入侵計(jì)算機(jī)的手法都是利用了C語言的某些特點(diǎn)。當(dāng)你在C語言中為輸入的內(nèi)容分配出一片內(nèi)存(也叫“緩存”)時(shí)产弹,它會(huì)被分配在當(dāng)前運(yùn)行代碼的返回地址旁邊派歌。所謂“返回地址”指的是一塊特定內(nèi)存,當(dāng)前代碼運(yùn)行完畢以后痰哨,就要運(yùn)行這塊內(nèi)存中包含的代碼胶果。也就是說,它實(shí)際上是計(jì)算機(jī)下一步要做的事情斤斧。假定有人打算入侵你的計(jì)算機(jī)早抠,他們猜出你會(huì)為某種輸入分配256字節(jié)的緩存,于是他們就提交多于256字節(jié)的內(nèi)容撬讽,目的是覆蓋旁邊的“返回地址”贝或。那么,當(dāng)前代碼運(yùn)行完畢之后锐秦,程序的控制權(quán)就交給了他們指定的內(nèi)存地址。這個(gè)地址通常是緩存的首地址盗忱,緩存中是入侵者事前編好的機(jī)器碼酱床。于是,入侵者的程序就運(yùn)行在你的計(jì)算機(jī)上了趟佃。如果使用更抽象的高級語言扇谣,上面的事情是不可能發(fā)生的。但是闲昭,在C語言中罐寨,一旦接受用戶輸入的時(shí)候你沒有檢查輸入長度,就創(chuàng)造出了一個(gè)安全漏洞序矩。利用這種漏洞的攻擊行為就被稱為“緩沖區(qū)溢出攻擊”鸯绿。在這種攻擊中,還有其他方法可以控制計(jì)算機(jī),但是覆蓋返回地址是最經(jīng)典的一種瓶蝴。

◆◆ 安全帶還是手銬

>> 在靜態(tài)類型語言中毒返,寫代碼時(shí)必須知道每個(gè)變量的類型。而在動(dòng)態(tài)類型語言中舷手,隨便什么時(shí)候拧簸,你都可以把變量設(shè)為任意類型的值。


◆ 11 一百年后的編程語言

>> 很難預(yù)測一百年后的人類生活男窟,只有少數(shù)幾件事是可以確定的盆赤。那時(shí),汽車將具備低空飛行能力歉眷,城市規(guī)劃的法規(guī)將放寬牺六,大樓可以造到幾百層,大街上一天到晚看不見太陽姥芥,女性個(gè)個(gè)都學(xué)過防身術(shù)兔乞。

>> 一百年后,人們使用什么語言開發(fā)軟件凉唐?

>> 為什么這個(gè)問題值得思考庸追?原因不是我們最終會(huì)用上這些語言,而是幸運(yùn)的話台囱,我們從現(xiàn)在開始就能用上這些語言淡溯。

>> 之所以要問這個(gè)問題,不是為了一百年后讓后人感嘆我們曾經(jīng)如此英明簿训,而是為了找到進(jìn)化的主干咱娶。它會(huì)啟發(fā)我們?nèi)ミx擇那些靠近主干的語言,這樣對當(dāng)前的編程最有利强品。

>> 無論何時(shí)膘侮,選擇進(jìn)化的主干可能都是最佳方案。

>> 這有點(diǎn)像買房子的時(shí)候你應(yīng)該先考慮地理位置的榛。別的地方將來出問題都有辦法彌補(bǔ)琼了,但是地理位置是沒法變的。

>> 發(fā)現(xiàn)冗余的代碼會(huì)導(dǎo)致更多冗余的代碼

>> 如果其他條件不變夫晌,現(xiàn)在被認(rèn)為運(yùn)行速度慢(即運(yùn)行效率不高)的語言將來會(huì)有更大的發(fā)展空間雕薪。

>> 我已經(jīng)預(yù)測了一旦未來硬件性能大幅提高將會(huì)發(fā)生什么事:新增加的運(yùn)算能力都會(huì)被糟蹋掉。

>> 我們應(yīng)該有意識(shí)地問自己晓淀,什么時(shí)候可以放棄一些性能所袁,換來一點(diǎn)點(diǎn)便利性的提高。

>> 正確做法應(yīng)該是將語言的語義與語言的實(shí)現(xiàn)予以分離凶掰。

>> 一百年后的程序員最需要的編程語言就是可以讓你毫不費(fèi)力地寫出程序第一版的編程語言燥爷,哪怕它的效率低下得驚人(至少按我們今天的眼光來看是如此)

>> 如果我們想要減少語言內(nèi)核中基本公理的數(shù)目蜈亩,不妨把眼光放得遠(yuǎn)一點(diǎn)

>> 另一種消耗硬件性能的方法就是,在應(yīng)用軟件與硬件之間設(shè)置很多的軟件層局劲。這也是我們已經(jīng)看到的一種趨勢勺拣,許多新興的語言就被編譯成字節(jié)碼

>> 每增加一個(gè)解釋層,軟件的運(yùn)行速度就會(huì)慢一個(gè)數(shù)量級鱼填。但是药有,多余的軟件層可以讓編程靈活起來。

>> 某些使用面向?qū)ο缶幊涕_發(fā)出來的軟件確實(shí)具有可重用性苹丸,但是這不是因?yàn)樗褂昧嗣嫦驅(qū)ο缶幊谭叨瑁且驗(yàn)樗拈_發(fā)方法是自下而上的。

>> 面向?qū)ο缶幊淌沟媚阌修k法對面條式代碼進(jìn)行可持續(xù)性開發(fā)赘理。通過不斷地打補(bǔ)丁宦言,它讓你將軟件一步步做大。大公司總是傾向于采用這樣的方式開發(fā)軟件商模。我預(yù)計(jì)一百年后也是如此奠旺。

>> 既然是談?wù)撐磥恚詈谜務(wù)劜⑿杏?jì)算

>> 除了某些特定的應(yīng)用軟件施流,一百年后并行計(jì)算不會(huì)很流行响疚。如果應(yīng)用軟件真的大量使用并行計(jì)算,那就屬于過早優(yōu)化了瞪醋。

>> 一百年后強(qiáng)大的硬件只會(huì)使得語言數(shù)目變得更多忿晕。

>> 性能分析器

>> 靜態(tài)類型語言看來無法真正支持宏(在我看來,一種語言不支持宏银受,那就不值得使用了)践盼。

>> 新語言更多地以開源項(xiàng)目的形式出現(xiàn),而不是以研究性項(xiàng)目的形式出現(xiàn)宾巍。這是語言的一種發(fā)展趨勢咕幻。另一種發(fā)展趨勢是,新語言的設(shè)計(jì)者更多的是本身就需要使用它們的應(yīng)用軟件作者顶霞,而不是編譯器作者

>> 采用程序長度作為它耗費(fèi)的工作量的近似指標(biāo)是一個(gè)很有用的技巧谅河。

>> 觀古而知今

>> 在學(xué)習(xí)開車的時(shí)候,一個(gè)需要記住的原則就是要把車開直确丢,不是通過將車身對齊畫在地上的分隔線,而是通過瞄準(zhǔn)遠(yuǎn)處的某個(gè)點(diǎn)吐限。


◆ 12 拒絕平庸

>> 把軟件放在服務(wù)器端鲜侥,使用普通的網(wǎng)頁作為用戶界面。

>> Viaweb是第一個(gè)互聯(lián)網(wǎng)應(yīng)用程序诸典。

◆◆ 秘密武器

>> Lisp語言確實(shí)可以使你成為更好的程序員

>> 選擇使用哪一種技術(shù)的時(shí)候描函,你不能考慮別人的做法,只能考慮什么樣的技術(shù)能最好地完成工作。

>> Lisp語言真的非常適合快速開發(fā)軟件

>> 因?yàn)長isp是一種抽象層次非常高的語言舀寓,所以就不需要非常龐大的開發(fā)團(tuán)隊(duì)胆数,這會(huì)降低成本。

>> 在競爭中互墓,你的對手無法理解你的技術(shù)優(yōu)勢必尼,這可是再寶貴不過了。

◆◆ Blub困境

>> Lisp語言到底好在什么地方篡撵?如果它真的這么好判莉,為什么沒有得到廣泛使用呢?這種問題聽起來有點(diǎn)像繞口令育谬,但是實(shí)際上回答起來很簡單券盅。Lisp語言的好處不在于它有一些狂熱愛好者才明白的優(yōu)點(diǎn),而只在于它是目前最強(qiáng)大的編程語言膛檀。它沒有得到廣泛使用就是因?yàn)榫幊陶Z言不僅僅是技術(shù)锰镀,也是一種習(xí)慣性思維,非常難于改變咖刃。

>> 徒手用機(jī)器語言寫出整個(gè)程序是一件很蠢的事泳炉。

>> 如果你有好幾種語言可以選擇,在不考慮其他因素的情況下僵缺,你不選擇最強(qiáng)大的那種語言就是一件很蠢的事胡桃。

>> 總的來看,對于應(yīng)用程序來說磕潮,還是應(yīng)該選擇總體最強(qiáng)大翠胰、效率也在可接受范圍內(nèi)的編程語言

假設(shè)有一種Blub語言。它的抽象程度正好落在編程能力曲線的中點(diǎn)自脯。這位程序員看低層次語言之景,覺得Blub語言強(qiáng)大,但看高層次語言膏潮,覺得可能差不多锻狗,因此覺得Blub語言夠用了,就不會(huì)考慮高層次語言了焕参。

>> 唯一洞悉所有語言優(yōu)劣的人必然是懂得最強(qiáng)大的那種語言的人轻纪。

>> Lisp的宏是獨(dú)一無二的。信不信由你叠纷,Lisp宏的作用與括號(hào)有關(guān)。Lisp語言的設(shè)計(jì)者大量使用括號(hào)并不是為了標(biāo)新立異涩嚣。

>> 它們是Lisp與其他語言存在巨大差異的外在表現(xiàn)崇众。

>> Lisp代碼由Lisp數(shù)據(jù)對象構(gòu)成掂僵。其他語言的源代碼一般由字符組成,字符串是主要數(shù)據(jù)類型之一顷歌,但是Lisp語言不完全是這樣锰蓬。經(jīng)過解析器處理之后,Lisp代碼就變成了你可以遍歷的數(shù)據(jù)結(jié)構(gòu)眯漩。

>> 如果你理解編譯器的工作原理芹扭,那么事實(shí)是,與其說Lisp有一種很奇特的語法坤塞,還不如說它根本沒有語法冯勉。一般的源代碼程序經(jīng)過編譯器解析會(huì)生成解析樹。Lisp的奇特之處就在于摹芙,你完全可以寫出程序灼狰,控制這種解析樹,進(jìn)行任意的存取操作浮禾。Lisp的這種程序就叫作宏交胚,它可以用來生成其他程序。

◆◆ 創(chuàng)業(yè)公司的合氣道

>> 合氣道(Aikido)是一種日本的武術(shù)盈电,主要特點(diǎn)是“以柔克剛”“借勁使力”“不主動(dòng)攻擊”蝴簇。

>> 編程語言的特點(diǎn)之一就是它會(huì)使得大多數(shù)使用它的人滿足于現(xiàn)狀,不想改用其他語言匆帚。

>> 編程語言的發(fā)展通常比CPU的發(fā)展落后一二十年熬词。

>> 精簡指令集計(jì)算機(jī)(Reduced Instruction Set Computer,RISC)是CPU的一種架構(gòu)吸重,對指令數(shù)目和尋址方式都做了精簡互拾,使其實(shí)現(xiàn)更容易,執(zhí)行速度更快嚎幸,編譯器的效率更高颜矿。

>> 技術(shù)的變化速度通常是很快的,但是編程語言不一樣嫉晶,與其說它是技術(shù)骑疆,還不如說是程序員的思考模式。

>> 閉包是20世紀(jì)60年代Lisp語言引入的功能替废,現(xiàn)在的接受程度還很低箍铭。


◆ 13 書呆子的復(fù)仇

>> Java語言之父詹姆斯·高斯林在第一份《Java白皮書》中說得很清楚,之所以要設(shè)計(jì)Java椎镣,就是想解決C++的一些弱點(diǎn)坡疼。

>> 認(rèn)為所有語言都一樣的看法的缺點(diǎn)是自欺欺人

>> 另一些人則認(rèn)為Ruby語言是取代Python的最佳選擇。

>> 當(dāng)你按照J(rèn)ava衣陶、Perl柄瑰、Python和Ruby這樣的順序觀察這些語言,你會(huì)發(fā)現(xiàn)一個(gè)有趣的結(jié)果剪况。如果你是一個(gè)Lisp黑客,你就看得出來,排在越后面的語言越像Lisp准谚。

>> 編程語言現(xiàn)在的發(fā)展不過剛剛趕上1958年時(shí)Lisp語言的水平积暖。

◆◆ 朝著數(shù)學(xué)的方法發(fā)展

>> 1958年,約翰·麥卡錫第一個(gè)提出了Lisp語言孙咪。

>> 1958年的計(jì)算機(jī)的運(yùn)算能力還不如今天的電子表堪唐,而體積卻大得像冰箱

>> 他想用更簡潔的方式定義圖靈機(jī)。

>> Lisp比圖靈機(jī)表達(dá)起來更簡潔翎蹈。

>> Steve Russell淮菠,做出了Lisp解釋器,也是歷史上第一個(gè)計(jì)算機(jī)游戲的作者荤堪,1962年他寫了《太空大戰(zhàn)》

>> 由此也就得出了20世紀(jì)50年代的編程語言到現(xiàn)在還沒有過時(shí)的原因合陵。簡單說,因?yàn)檫@種語言本質(zhì)上不是一種技術(shù)澄阳,而是數(shù)學(xué)拥知。數(shù)學(xué)是不會(huì)過時(shí)的。

>> Lisp和Fortran代表了編程語言發(fā)展的兩大方向碎赢。前者的基礎(chǔ)是數(shù)學(xué)低剔,后者的基礎(chǔ)是硬件架構(gòu)。從那時(shí)起肮塞,這兩大方向一直在互相靠攏襟齿。

◆◆ 為什么Lisp語言很特別

>> Lisp語言誕生的時(shí)候就包含了9種新思想

>> (1) 條件結(jié)構(gòu)

>> (2) 函數(shù)也是一種數(shù)據(jù)類型。

>> (3) 遞歸峦嗤。Lisp是第一種支持遞歸函數(shù)的高級語言蕊唐。3

>> (4) 變量的動(dòng)態(tài)類型。

>> 所有變量實(shí)際上都是指針

>> (5) 垃圾回收機(jī)制烁设。

>> (6) 程序由表達(dá)式組成替梨。Lisp程序是一些表達(dá)式樹的集合,每個(gè)表達(dá)式都返回一個(gè)值装黑。這與Fortran和大多數(shù)后來的語言截然不同副瀑,它們的程序由表達(dá)式和語句組成。

>> (7) 符號(hào)類型恋谭。符號(hào)實(shí)際上是一種指針糠睡,指向存儲(chǔ)在散列表中的字符串。所以疚颊,比較兩個(gè)符號(hào)是否相等狈孔,只要看它們的指針是否一樣就行了信认,不用逐個(gè)字符地比較。

>> (8) 代碼使用符號(hào)和常量組成的樹形表示法均抽。

>> (9) 無論什么時(shí)候嫁赏,整個(gè)語言都是可用的。Lisp并不真正區(qū)分讀取期油挥、編譯期和運(yùn)行期潦蝇。你可以在讀取期編譯或運(yùn)行代碼,也可以在編譯期讀取或運(yùn)行代碼深寥,還可以在運(yùn)行期讀取或者編譯代碼攘乒。

>> 說Lisp語言古怪倒不是因?yàn)樗恼Z法很古怪,而是因?yàn)樗緵]有語法惋鹅,程序直接以解析樹的形式表達(dá)出來则酝。

>> 它由列表構(gòu)成,而列表則是Lisp的基本數(shù)據(jù)結(jié)構(gòu)负饲。

◆ 語言優(yōu)勢真正體現(xiàn)的地方

>> Lisp的最大優(yōu)勢體現(xiàn)在編程任務(wù)的另一端堤魁,就是在激烈競爭的條件下開發(fā)那些解決困難問題的復(fù)雜程序。ITA軟件公司為Orbitz旅行社開發(fā)的飛機(jī)票價(jià)搜索程序就是一個(gè)很好的例子返十。

>> ITA的軟件核心是一個(gè)20萬行的Common Lisp程序妥泉,它的搜索能力比競爭對手高出許多個(gè)數(shù)量級。

◆◆ 向心力

>> 使用一種不常見的語言會(huì)出現(xiàn)的問題我想到了三個(gè):你的程序可能無法很好地與使用其他語言寫的程序協(xié)同工作洞坑;你可能找不到很多函數(shù)庫盲链;你可能不容易雇到程序員。

>> 為什么像Perl和Python這樣的新語言會(huì)流行起來迟杂。它們之所以流行刽沾,不是因?yàn)槿藗兪褂盟鼈冮_發(fā)Windows應(yīng)用程序,而是因?yàn)槿藗冊诜?wù)器上使用它們排拷。

>> 如果你創(chuàng)業(yè)的話侧漓,千萬不要為了取悅風(fēng)險(xiǎn)投資商或潛在并購方而設(shè)計(jì)你的產(chǎn)品,讓用戶感到滿意才是你的設(shè)計(jì)方向监氢。只要贏得用戶布蔗,其他事情就會(huì)接踵而來。如果沒有用戶浪腐,誰會(huì)關(guān)心你選擇的“正統(tǒng)”技術(shù)是多么令人放心纵揍。

◆◆ 隨大流的代價(jià)

>> 衡量語言的編程能力的最簡單方法可能就是看代碼數(shù)量。所謂高級語言议街,就是能夠提供更強(qiáng)大的抽象能力的語言泽谨,從某種意義上,就像能夠提供更大的磚頭,所以砌墻的時(shí)候用到的磚頭數(shù)量就變少了吧雹。因此骨杂,語言的編程能力越強(qiáng)大,寫出來的程序就越短

>> 強(qiáng)大的編程語言如何讓你寫出更短的程序雄卷?一個(gè)技巧就是(在語言允許的前提下)使用“自下而上”的編程方法腊脱。你不是用基礎(chǔ)語言開發(fā)應(yīng)用程序,而是在基礎(chǔ)語言之上先構(gòu)建一種你自己的語言龙亲,然后再用后者開發(fā)應(yīng)用程序,這樣寫出來的代碼會(huì)比直接用基礎(chǔ)語言開發(fā)出來的短得多悍抑。

>> “1行Lisp代碼相當(dāng)于20行C代碼”

◆◆ 一個(gè)訣竅

>> 在大型組織內(nèi)部鳄炉,有一個(gè)專門的術(shù)語描述這種跟隨大多數(shù)人的選擇的做法,叫作“業(yè)界最佳實(shí)踐”搜骡。

◆◆ 附錄:編程能力

>> 閉包(即一個(gè)函數(shù)拂盯,通過它可以引用由包含這個(gè)函數(shù)的代碼所定義的變量

>> “格林斯潘第十定律”:任何C或Fortran程序復(fù)雜到一定程度之后,都會(huì)包含一個(gè)臨時(shí)開發(fā)的记靡、只有一半功能的谈竿、不完全符合規(guī)格的、到處都是bug的摸吠、運(yùn)行速度很慢的Common Lisp實(shí)現(xiàn)空凸。

>> 如果你想解決一個(gè)困難的問題,關(guān)鍵不是你使用的語言是否強(qiáng)大寸痢,而是好幾個(gè)因素同時(shí)發(fā)揮作用:(a)使用一種強(qiáng)大的語言呀洲;(b)為這個(gè)難題寫一個(gè)事實(shí)上的解釋器;(c)你自己變成這個(gè)難題的人肉編譯器啼止。

>> 舉例來說道逗,在面向?qū)ο缶幊痰氖澜缰校覀兇罅柯牭健澳J健保╬attern)這個(gè)詞献烦,我覺得那些模式就是現(xiàn)實(shí)中的因素(c)滓窍,也就是人肉編譯器。

>> 彼得·諾維格發(fā)現(xiàn)巩那,總共23種設(shè)計(jì)模式之中吏夯,有16種在Lisp語言中“本身就提供,或者被大大簡化”拢操。


◆ 14 夢寐以求的編程語言

>> 當(dāng)且僅當(dāng)黑客喜歡一種語言時(shí)锦亦,這種語言才能成為合格的編程語言

◆◆ 流行的秘訣

>> 語言流行,專家級黑客的看法是最重要的因素令境。

◆◆ 外部因素

>> 編程語言總是與它們依附的系統(tǒng)聯(lián)系在一起的杠园。

>> 編程語言還需要有一本介紹它的書。這本書應(yīng)該不厚舔庶,文筆流暢抛蚁,而且包含大量優(yōu)秀的范例陈醒。布萊恩·柯尼漢1和丹尼斯·里奇合寫的《C程序設(shè)計(jì)語言》(C Programming Language)就是這方面的典范。眼下瞧甩,我大概還能再加一句钉跷,這一類書之中必須有一本由O’Reilly公司出版發(fā)行。這正在變成是否能吸引黑客的前提條件了肚逸。

◆◆ 簡潔

>> 假定你的語言已經(jīng)能夠滿足上面三項(xiàng)條件(一種免費(fèi)的實(shí)現(xiàn)爷辙,一本相關(guān)圖書,以及語言所依附的計(jì)算機(jī)系統(tǒng))朦促,那么還需要做什么才能使得黑客喜歡上你的語言膝晾?

黑客欣賞的一個(gè)特點(diǎn)就是簡潔。

>> 簡潔性是靜態(tài)類型語言力所不及之處务冕。不考慮其他因素血当,沒人愿意在程序的頭部寫上一大堆聲明語句。只要計(jì)算機(jī)可以自己推斷出來的事情禀忆,都應(yīng)該讓計(jì)算機(jī)自己去推斷臊旭。

◆◆ 可編程性

>> 黑客喜歡破解,而破解就意味著深入內(nèi)部箩退,揣測原始設(shè)計(jì)者的意圖离熏。

>> 對于制造工具的人來說,總是會(huì)有用戶以違背你本意的方式使用你的工具乏德。

>> 一種真正優(yōu)秀的編程語言應(yīng)該既整潔又混亂撤奸。“整潔”的意思是設(shè)計(jì)得很清楚喊括, 內(nèi)核由數(shù)量不多的運(yùn)算符構(gòu)成胧瓜,這些運(yùn)算符易于理解,每一個(gè)都有很完整的獨(dú)立用途郑什「“混亂”的意思是它允許黑客以自己的方式使用。

◆◆ 一次性程序

>> 很容易裝備不僅僅指很容易安裝或者已經(jīng)安裝蘑拯,還指很容易與使用者互動(dòng)钝满。一種有命令行界面、可以實(shí)時(shí)反饋的語言就具有互動(dòng)性申窘,那些必須先編譯后使用的語言就不具備互動(dòng)性弯蚜。

◆◆ 函數(shù)庫

>> 我認(rèn)為,未來50年中剃法,編程語言的進(jìn)步很大一部分與函數(shù)庫有關(guān)碎捺。

>> 優(yōu)秀函數(shù)庫的重要性將超過語言本身。某種語言到底是靜態(tài)類型還是動(dòng)態(tài)類型,是面向?qū)ο缶幊踢€是函數(shù)式編程收厨,這些都不如函數(shù)庫重要晋柱。

◆◆ 效率

>> 編程時(shí)提高代碼運(yùn)行速度的關(guān)鍵是使用好的性能分析器

>> 好的性能分析器對程序的幫助可能大于編譯器的作用。

>> 越來越多的程序主要不是受限于計(jì)算機(jī)的運(yùn)算速度诵叁,而是受限于I/O速度雁竞。加快I/O速度將是很值得做的一件事。在這方面拧额,編程語言也能起到作用碑诉,有些措施是顯而易見的,比如采用簡潔侥锦、快速联贩、格式化輸出的函數(shù),還有些措施則需要深層次的結(jié)構(gòu)變化捎拯,比如采用緩存和持久化對象。

>> 帕金森定律4被證明與摩爾定律一樣顛撲不破盲厌。軟件不斷膨脹署照,消耗光所有可以得到的資源。

>> 帕金森定律的一種原始表達(dá)形式是“工作總是到最后一刻才會(huì)完成”吗浩,后來引申到計(jì)算機(jī)領(lǐng)域就變成了“數(shù)據(jù)總是會(huì)填滿所有空間”建芙,更一般性的總結(jié)則是“對一種資源的需求總是會(huì)消耗光這種資源的所有供應(yīng)”懂扼。

>> 在一些應(yīng)用程序中灾挨,處理器的運(yùn)算能力是瓶頸,那么最重要的優(yōu)化對象就是軟件的運(yùn)行速度食磕。但是歉提,一般情況下內(nèi)存才是瓶頸,你能夠同時(shí)支持的用戶數(shù)量取決于用戶數(shù)據(jù)所消耗的內(nèi)存活翩。編程語言在這方面也能發(fā)揮作用沮焕,對線程的良好支持將使得所有用戶共享同一個(gè)內(nèi)存堆。持久化對象和語言內(nèi)核級別的延遲加載支持也有助于減少內(nèi)存需求拉宗。

◆◆ 時(shí)間

>> 我有一個(gè)朋友峦树,在他的客戶第一次提出某種需求時(shí)辣辫,他很少理會(huì),因?yàn)樗廊藗冇袝r(shí)候會(huì)想要自己并不真正需要的東西魁巩。為了避免浪費(fèi)時(shí)間急灭,只有當(dāng)客戶第三次或第四次提出同樣的需求時(shí),他才認(rèn)真對待谷遂。

>> 所以葬馋,發(fā)明新事物的人必須有耐心,要長年累月不斷地做市場推廣肾扰,直到人們開始接受這種發(fā)明畴嘶。

>> 人們真正注意到你的時(shí)候,不是第一眼看到你站在那里集晚,而是發(fā)現(xiàn)過了這么久你居然還在那里窗悯。

>> 新技術(shù)被市場接納的方式有兩種,一種是自然成長式偷拔,另一種是大爆炸式蒋院。

>> 最終來看,自然成長式會(huì)比大爆炸式產(chǎn)生更好的技術(shù)莲绰,能為創(chuàng)始人帶來更多的財(cái)富悦污。如果你研究一下目前的主流技術(shù),就會(huì)發(fā)現(xiàn)大部分是源于自然成長式钉蒲。

◆◆ 再設(shè)計(jì)

>> 為了寫出優(yōu)秀軟件,你必須同時(shí)具備兩種互相沖突的信念彻坛。一方面顷啼,你要像初生牛犢一樣,對自己的能力信心萬丈昌屉;另一方面钙蒙,你又要像歷經(jīng)滄桑的老人一樣,對自己的能力抱著懷疑態(tài)度间驮。在你的大腦中躬厌,有一個(gè)聲音說“千難萬險(xiǎn)只等閑”,還有一個(gè)聲音卻說“早歲那知世事艱”竞帽。

>> 這里的難點(diǎn)在于你要意識(shí)到扛施,實(shí)際上這兩種信念并不矛盾。你的樂觀主義和懷疑傾向分別針對兩個(gè)不同的對象屹篓。你必須對解決難題的可能性保持樂觀疙渣,同時(shí)對當(dāng)前解法的合理性保持懷疑。

>> 如果用戶數(shù)量龐大堆巧,修改語言帶來的痛苦就將持續(xù)很長時(shí)間妄荔。

>> 一種可能的解決方法是泼菌,將軟件內(nèi)部的接口設(shè)計(jì)成垂直接口而不是水平接口。這意味著軟件內(nèi)部的模塊是一個(gè)個(gè)垂直堆積起來的抽象層啦租,層與層之間的接口完全由其中的一層控制哗伯。如果較高的一層使用了較低的一層定義的語言,那么接口就由較低的一層控制篷角;如果較低的一層從屬于較高的一層焊刹,那么接口就由較高的一層控制。

◆◆ 夢寐以求的編程語言

>> 讓我們試著描述黑客心目中夢寐以求的語言來為以上內(nèi)容做個(gè)小結(jié)内地。這種語言干凈簡練伴澄,具有最高層次的抽象和互動(dòng)性,而且很容易裝備阱缓,可以只用很少的代碼就解決常見的問題非凌。不管是什么程序,你真正要寫的代碼幾乎都與你自己的特定設(shè)置有關(guān)荆针,其他具有普遍性的問題都有現(xiàn)成的函數(shù)庫可以調(diào)用敞嗡。

>> 這種語言的抽象程度很高,使得你可以快速寫出一個(gè)程序的原型航背。然后喉悴,等到你開始優(yōu)化的時(shí)候,它還提供一個(gè)真正出色的性能分析器玖媚,告訴你應(yīng)該重點(diǎn)關(guān)注什么地方箕肃。


◆ 15 設(shè)計(jì)與研究

>> 可是,讓用戶滿意并不等于迎合用戶的一切要求今魔。用戶不了解所有可能的選擇勺像,也經(jīng)常弄錯(cuò)自己真正想要的東西。做一個(gè)好的設(shè)計(jì)師就像做一個(gè)好醫(yī)生一樣错森。你不能頭痛醫(yī)頭吟宦,腳痛醫(yī)腳。病人告訴你癥狀涩维,你必須找出他生病的真正原因殃姓,然后針對病因進(jìn)行治療。

>> 除非設(shè)定目標(biāo)用戶瓦阐,否則一種設(shè)計(jì)的好壞根本無從談起蜗侈。

>> 如果你覺得自己在為傻瓜設(shè)計(jì)產(chǎn)品,那么很可能不僅無法設(shè)計(jì)出優(yōu)秀產(chǎn)品睡蟋,而且就連傻瓜也不喜歡你的設(shè)計(jì)宛篇。

>> 舉例來說,不考慮其他因素薄湿,肖像畫就是比風(fēng)景畫更能引發(fā)觀眾的興趣叫倍。文藝復(fù)興時(shí)期的經(jīng)典繪畫作品都是畫人的偷卧,這并非巧合。

>> 不管你喜不喜歡吆倦,編程語言也是以人為本的听诸。

>> 人類似乎不善于處理精細(xì)的工作,所以最好還是交給計(jì)算機(jī)處理蚕泽。

>> 評價(jià)一種語言的優(yōu)劣晌梨,不能簡單地看最后的程序是否表達(dá)得很漂亮,而要看程序從無到有的那條完成路徑是否很漂亮须妻。

>> 有時(shí)候仔蝌,更少的功能(弱)反而是更好的選擇(強(qiáng)),因?yàn)檫@會(huì)使得軟件的可用性提高荒吏。

>> 與之對照敛惊,還有另一種軟件設(shè)計(jì)思想,也許可以被稱為“萬复赂瑪麗亞”模式瞧挤。它不要求盡快拿出原型,然后再逐步優(yōu)化儡湾,它的觀點(diǎn)是你應(yīng)該等到完整的成品出來以后再一下子隆重地推向市場特恬,就像圣母瑪麗亞降臨一樣

>> 在互聯(lián)網(wǎng)泡沫時(shí)期,無數(shù)創(chuàng)業(yè)公司因?yàn)橄嘈帕诉@種模式而自毀前程徐钠。

>> 以繪畫為例癌刽,你真正應(yīng)該采用的方法是快速地用幾根線畫出一個(gè)大致準(zhǔn)確的輪廓,然后再逐步地加工草稿尝丐。

>> 大多數(shù)藝術(shù)領(lǐng)域显拜,原型使用的材料與成品的材料一般來說是不一樣的。印刷活字先畫在紙上摊崭,然后才做成鉛字。雕塑先用石蠟創(chuàng)作杰赛,然后才用青銅澆鑄呢簸。地毯圖案先用墨水畫出紙型,然后才織成地毯乏屯。建筑物先做出木模型根时,然后才做成石頭建筑

>> 為什么15世紀(jì)油畫首次亮相會(huì)引起轟動(dòng)并很快流行起來?原因就是油彩使得畫家可以在原型上直接畫出最后的樣子辰晕。你可以按照自己的想法畫出初稿蛤迎,但是它并不對你構(gòu)成限制。接下來你可以逐步加上細(xì)節(jié)含友,甚至對初稿做出重大修改替裆,直到最后完成校辩。

>> 軟件開發(fā)也可以這樣做。原型并不只是模型辆童,不等于將來一定要另起爐灶宜咒,你完全能夠在原型的基礎(chǔ)上直接做出最后的成品。

>> 先做出原型把鉴,再逐步加工做出成品故黑,這種方式有利于鼓舞士氣,因?yàn)樗沟媚汶S時(shí)都可以看到工作的成效庭砍。在開發(fā)軟件的時(shí)候场晶,我有一條規(guī)則:任何時(shí)候,代碼都必須能夠運(yùn)行怠缸。如果你正在寫的代碼一個(gè)小時(shí)之后就可以看到運(yùn)行結(jié)果诗轻,這好比讓你看到不遠(yuǎn)處就是唾手可得的獎(jiǎng)勵(lì),你因此會(huì)受到激勵(lì)和鼓舞凯旭。

>> 畫家之間甚至流傳著一句諺語:“畫作永遠(yuǎn)沒有完工的一天概耻,你只是不再畫下去而已」藓簦”


◆ 術(shù)語表

>> Algorithm 算法:完成任務(wù)的方法鞠柄。

>> ASP/Application Service Provider 應(yīng)用服務(wù)提供商:這種軟件公司允許用戶通過網(wǎng)絡(luò)使用存放在服務(wù)器上的軟件

>> Bayesian 貝葉斯定理:一種統(tǒng)計(jì)推斷的方法,又稱貝葉斯算法嫉柴。

>> Bit Manipulation 位操作

>> Block-Structured 塊結(jié)構(gòu):某些語言支持的子區(qū)域結(jié)構(gòu)厌杜。有了這種語法,就可以實(shí)現(xiàn)結(jié)構(gòu)化編程计螺,而不是簡單地一條條按順序執(zhí)行命令夯尽。

>> Blub Paradox Blub困境:程序員的思想往往會(huì)受到自己正在使用的語言的束縛,不相信還存在更強(qiáng)大的語言登馒。

>> Brooks's Hypothesis 布魯克斯假說:程序員一天寫出的代碼行數(shù)是一個(gè)常量匙握,與他使用什么語言無關(guān)。

>> Buffer 緩沖區(qū):一個(gè)內(nèi)存區(qū)域陈轿,用來保存程序需要的輸入數(shù)據(jù)圈纺,或者將程序的輸出數(shù)據(jù)累積起來,到一定數(shù)量后再輸出麦射。

>> Collocated 托管:通常指放在ISP處蛾娶。

>> Common Gateway Interface Script CGI腳本/通用網(wǎng)關(guān)接口腳本:當(dāng)網(wǎng)絡(luò)服務(wù)器需要進(jìn)行某種運(yùn)算(比如數(shù)據(jù)庫搜索)而不是直接傳輸現(xiàn)有文件時(shí)所運(yùn)行的一種程序。

>> Common Lisp:Lisp語言的一種流行的方言潜秋,20世紀(jì)80年代由一個(gè)委員會(huì)設(shè)計(jì)蛔琅。

>> Complexity 復(fù)雜度

>> CPU/Central Processing Unit 中央處理器

>> Crash 崩潰:

>> Cruft 冗余

>> Cycle 周期:執(zhí)行一個(gè)機(jī)器指令的最少時(shí)間。

>> C語言:一種簡潔優(yōu)美的計(jì)算機(jī)語言峻呛,由丹尼斯·里奇(Dennis Ritchie)在20世紀(jì)70年代初設(shè)計(jì)罗售。廣泛用于操作系統(tǒng)和路由器的編程辜窑。

>> Data Structure 數(shù)據(jù)結(jié)構(gòu)

>> Deprecated 廢棄

>> Embedded Language 嵌入式語言

>> Field 字段

>> Freeware 自由軟件:自由傳播的軟件。

>> Garbage Collection 垃圾回收

>> Glue Program 膠水程序:在應(yīng)用程序之間整理或者轉(zhuǎn)移數(shù)據(jù)的程序莽囤。

>> Hack 破解:一種破壞規(guī)則的解決方法

>> Hacker 黑客:解釋一谬擦,優(yōu)秀程序員;解釋二朽缎,侵入他人電腦的人惨远。

>> Heuristic 啟發(fā)

>> High-Level Programming Language 高級編程語言:比機(jī)器語言抽象得多的語言。

>> HTML/HyperText Markup Language 超文本標(biāo)記語言:用來撰寫網(wǎng)頁的一套書寫法话肖。

>> HTTP/HyperText Transfer Protocol 超文本傳輸協(xié)議:網(wǎng)絡(luò)服務(wù)器與瀏覽器之間的通信協(xié)議北秽。

>> I/O 輸入(Input)和輸出(Output)

>> Indented 縮進(jìn)

>> Infinite Loop 無限循環(huán)

>> Instrument 記錄儀

>> Interpreter 解釋器

>> 而是每次讀入一行代碼,然后執(zhí)行相應(yīng)的機(jī)器語言命令最筒,之后再去讀下一行代碼贺氓。

>> IT/Information Technology 信息技術(shù)

>> Larval Startup 雛形創(chuàng)業(yè)公司:

>> Legacy Software 歷史遺留軟件

>> 現(xiàn)狀。

Lexical Closure 閉包:一個(gè)函數(shù)床蜘,通過它可以引用由包含這個(gè)函數(shù)的代碼所定義的變量辙培。

>> Linux:Unix操作系統(tǒng)的一個(gè)開源版本。

>> Lisp:一種編程語言的分支邢锯,由約翰·麥卡錫(John McCarthy)在20世紀(jì)50年代末的研究成果衍生而來扬蕊。它的兩種最著名的方言是Common Iisp和Scheme。如今的開源編程語言越來越多地借鑒Lisp的設(shè)計(jì)丹擎。

>> Machine Instruction 機(jī)器指令

>> Macro 宏:一個(gè)能夠生成其他程序的程序尾抑。要在不同語言中實(shí)現(xiàn)這一點(diǎn),就意味著不同語言的宏差異很大蒂培,一種語言的宏可能比另一種語言的宏強(qiáng)大得多再愈。

>> Metacircular 元循環(huán):當(dāng)一種語言的解釋器用這種語言本身開發(fā)時(shí),就會(huì)出現(xiàn)這種情況护戳。

>> Moore's Law 摩爾定律:摩爾定律的正式版本是指翎冲,一塊芯片上的晶體管數(shù)量每2年就會(huì)翻一番。但是媳荒,大多數(shù)人提到這個(gè)術(shù)語時(shí)抗悍,指的卻是處理器的運(yùn)算速度每18個(gè)月就會(huì)翻一番。

>> Object Code 目標(biāo)碼:編譯器產(chǎn)生的機(jī)器語言肺樟。

>> Occam's Razor “奧卡姆剃刀”原則:簡單的解釋就是較好的解釋檐春。

>> Open Source Software 開源軟件:源代碼可以被任何人自由傳播和修改的軟件逻淌,前提條件往往是修改后的軟件源代碼也必須保持自由狀態(tài)。

>> Optimization 優(yōu)化:調(diào)整程序,使得它的效率更高贪嫂。

>> Orthogonal 正交的:彼此獨(dú)立、能夠以多種方式組合在一起的一組東西俐巴。

>> OS/Operating System 操作系統(tǒng)

>> Parkinson's Law 帕金森定律:完成一項(xiàng)任務(wù)所需要的資源會(huì)不斷擴(kuò)展,直至把這種資源消耗光為止硬爆。

>> Parser Tree 解析樹:解析器讀取源碼后生成的數(shù)據(jù)結(jié)構(gòu)欣舵。它是將源碼翻譯成機(jī)器語言的第一步。

>> Patch 補(bǔ)丁

>> PDA/Personal Digital Assistant 個(gè)人數(shù)字助理:一種可以隨身攜帶的小型計(jì)算機(jī)缀磕。

>> Pipe 管道:將操作系統(tǒng)的各種命令連接起來的一種方式缘圈,使得一個(gè)命令的輸出變成另一個(gè)命令的輸入。

>> Pointer Arithmetic 指針運(yùn)算

>> Polynomial 多項(xiàng)式的

>> Portable 可移植性

>> 高級語言程序比機(jī)器語言程序更具備可移植性袜蚕,因?yàn)榍罢叩拇a(幾乎)與硬件無關(guān)糟把。

>> Portal 門戶:網(wǎng)站。

>> Premature Design 過早設(shè)計(jì):過早決定一個(gè)程序的行為牲剃。

>> Premature Optimization 過早優(yōu)化:還沒有寫完程序遣疯,你就開始考慮它的性能問題。

>> Profiler 性能分析器

>> Pseudocode 偽代碼

>> Python:一種由吉多·范羅蘇姆(Guido van Rossum)開發(fā)的開源編程語言凿傅。帶有強(qiáng)烈的面向?qū)ο箫L(fēng)格缠犀,被愛好者看作是Perl語言的一種較為簡潔的替代品。

>> QA/Quality Assurance 質(zhì)量保證

>> RAID/Redundant Array of Independent Disks 獨(dú)立磁盤冗余陣列

>> Recursive 遞歸

>> Regular Expression 正則表達(dá)式:一種分解字符串的模式聪舒,就像篩子一樣從字符串中取出想要的部分辨液。

>> Risc/Reduced Instruction Set Computer 精簡指令集計(jì)算機(jī)

>> Socket 套接字:Unix操作系統(tǒng)的一種內(nèi)部渠道,不同計(jì)算機(jī)的進(jìn)程通過它可以在網(wǎng)絡(luò)上交換信息过椎。

>> Software Engineer 軟件工程師:程序員的一種正式名稱室梅。

>> SSH/Secure Shell 安全外殼:可以安全連接遠(yuǎn)程計(jì)算機(jī)的一種程序。

>> SSL/Secure Sockets Layer 安全套接字層

>> State Machine 狀態(tài)機(jī)

>> Subroutine 子程序

>> Subset 子集

>> Turing Machine 圖靈機(jī):一種完全虛構(gòu)的計(jì)算機(jī)疚宇,作用是證明計(jì)算理論亡鼠。由于所有計(jì)算機(jī)的程序都可以被轉(zhuǎn)換成圖靈機(jī)程序,所以在這個(gè)意義上敷待,你不可能做出比圖靈機(jī)更強(qiáng)大的計(jì)算機(jī)间涵。但是沒有人能保證這一點(diǎn),因?yàn)椤坝?jì)算機(jī)”這個(gè)詞并沒有被正式定義過榜揖。

Turing-Complete 圖靈完備:如果一種編程語言寫出的所有程序都能被轉(zhuǎn)換成圖靈機(jī)程序勾哩,并且反之也成立,那么這種編程語言就是圖靈完備的举哟。所有當(dāng)代編程語言都是圖靈完備的思劳,這意味著(在理論上)它們的功能都是一樣強(qiáng)大的。圖靈完備又稱圖靈等價(jià)(Turing-Equivalent)妨猩。

>> UDP/User Datagram Protocol 用戶數(shù)據(jù)報(bào)協(xié)議:一種網(wǎng)絡(luò)傳播信息的協(xié)議潜叛。

>> UI/User Interface:用戶界面。

>> Uptime 正常運(yùn)行時(shí)間

>> 它的另一個(gè)意思一指某臺(tái)計(jì)算機(jī)從上次宕機(jī)到現(xiàn)在的時(shí)間長度。

>> URL/Uniform Resource Locator 統(tǒng)一資源定位符:網(wǎng)頁的地址威兜。

>> VC/Venture Capitalist 風(fēng)險(xiǎn)投資人

>> XML/Extensible Markup Language 可擴(kuò)展標(biāo)記語言


◆ 貝葉斯推斷與過濾垃圾郵件

(詳細(xì)如何過濾垃圾郵件销斟,見該書籍對應(yīng)章節(jié))

◆◆ 什么是貝葉斯推斷

>> 貝葉斯推斷是一種統(tǒng)計(jì)學(xué)方法,用來估計(jì)統(tǒng)計(jì)量的某種性質(zhì)椒舵。它是貝葉斯定理的應(yīng)用蚂踊。

◆◆ 貝葉斯定理

>> 要理解貝葉斯推斷,必須先理解貝葉斯定理笔宿。后者實(shí)際上就是計(jì)算“條件概率”的公式犁钟。

>> 所謂條件概率,就是指在事件B發(fā)生的情況下泼橘,事件A發(fā)生的概率特纤,用P(A|B)來表示。

>> 這就是條件概率的計(jì)算公式侥加。

◆◆ 全概率公式

>> 這就是全概率公式

>> 條件概率的另一種寫法

◆◆ 貝葉斯推斷的含義

>> 對條件概率公式進(jìn)行變形捧存,可以得到如下形式:

>> 我們把P(A)稱為“先驗(yàn)概率”,即在B事件發(fā)生之前担败,我們對A事件發(fā)生概率的一個(gè)判斷昔穴。P(A|B)稱為“后驗(yàn)概率”,即在B事件發(fā)生之后提前,我們對A事件發(fā)生概率的重新評估吗货。P(B|A)/P(B)稱為“可能性函數(shù)”,這是一個(gè)調(diào)整因子狈网,使得預(yù)估概率更接近真實(shí)概率宙搬。

>> 條件概率可以理解成下面的式子:

后驗(yàn)概率=先驗(yàn)概率×調(diào)整因子

>> 這就是貝葉斯推斷的含義。

◆◆ 【例子】假陽性問題

>> 現(xiàn)有一個(gè)病人的檢驗(yàn)結(jié)果為陽性拓哺,請問他確實(shí)得病的可能性有多大勇垛?

>> 即陽性結(jié)果完全不足以說明病人得病。為什么會(huì)這樣士鸥?為什么這種檢驗(yàn)的準(zhǔn)確率高達(dá)99%闲孤,但是可信度卻不到2%?答案與它的誤報(bào)率太高有關(guān)烤礁。

◆◆ 聯(lián)合概率的計(jì)算

>> 所謂聯(lián)合概率讼积,就是指在多個(gè)事件發(fā)生的情況下,另一個(gè)事件發(fā)生的概率有多大脚仔。

>> 這就是聯(lián)合概率的計(jì)算公式(不明白勤众,這如何推導(dǎo)的)

◆◆ 最終的計(jì)算公式

>> 一封郵件是不是垃圾郵件,就用這個(gè)式子進(jìn)行計(jì)算鲤脏。


四们颜、其他

>> 亞歷克西斯·奧哈尼安(Alexis Ohanian,論壇網(wǎng)站Reddit的聯(lián)合創(chuàng)始人)和山姆·阿爾特曼[Sam Altman,Loopt聯(lián)合創(chuàng)始人掌桩,后來擔(dān)任了YC的掌門人,并與埃隆·馬斯克(Elon Musk)聯(lián)合創(chuàng)立了OpenAI

>> 陸奇創(chuàng)建了YC中國(后更名為奇績創(chuàng)壇)

>> 1946年姑食,第一臺(tái)電子計(jì)算機(jī)ENIAC在美國誕生

>> 唐氏綜合征(Down's Syndrome波岛,多了一條21號(hào)染色體)是一種先天性疾病,主要指幼兒的智力和體格發(fā)育遲緩音半,特征為低智商则拷、身材矮小、表情呆滯曹鸠。

>> 約翰·納什(John Nash煌茬,1928—2015),美國著名數(shù)學(xué)家彻桃,因其對博弈論的突出貢獻(xiàn)而獲得1994年的諾貝爾經(jīng)濟(jì)學(xué)獎(jiǎng)坛善。納什從小性格孤僻,不合群邻眷,讀大學(xué)期間以行為古怪而聞名眠屎,30歲時(shí)就患上了嚴(yán)重的精神分裂癥。電影《美麗心靈》講述的就是他的故事肆饶。

>> 今天改衩,說地球圍繞太陽運(yùn)轉(zhuǎn)真是再平常不過了,如果換在17世紀(jì)的歐洲驯镊,這么說就大難臨頭了葫督。伽利略說了這樣的話,結(jié)果遭到了宗教法庭的審判板惑。

>> 伽利略因?yàn)樾麄魅招恼f而遭到教廷的審判橄镜,這件事諷刺的地方在于,他只是在宣傳哥白尼的觀點(diǎn)冯乘,而后者卻安然無恙蛉鹿。

>> 2001年“9·11”事件以后,美國通過了《愛國者法案》往湿,以遏制恐怖主義為目的大大擴(kuò)大了警察機(jī)關(guān)的權(quán)限妖异。

>> 經(jīng)濟(jì)學(xué)里有一條拉弗曲線,認(rèn)為隨著稅率的上升领追,稅收收入會(huì)先增加后減少他膳。

>> IBM在推出個(gè)人計(jì)算機(jī)時(shí),懶得自己開發(fā)操作系統(tǒng)绒窑,就與微軟公司簽了一個(gè)很大方的授權(quán)協(xié)議棕孙,將微軟的DOS作為默認(rèn)操作系統(tǒng),每賣出一臺(tái)計(jì)算機(jī),微軟都可以拿到提成蟀俊,并且還可以把DOS授權(quán)給其他公司使用钦铺。這份授權(quán)協(xié)議的結(jié)果無疑讓IBM感到非常吃驚。

>> 蘋果公司的iPhone手機(jī)已于2007年6月上市肢预。

>> Altair 指的是MITS公司在1975年推出的Altair 8800微型計(jì)算機(jī)矛洞,CPU為Intel 8080。它是第一批微型計(jì)算機(jī)中最成功的產(chǎn)品烫映,被認(rèn)為是最早的個(gè)人計(jì)算機(jī)沼本。

>> Edward Roberts(1941—2010),美國工程師锭沟。1970年創(chuàng)立MITS公司抽兆,1975年設(shè)計(jì)出了歷史性的產(chǎn)品——微型計(jì)算機(jī)Altair 8800,開創(chuàng)了個(gè)人計(jì)算機(jī)的時(shí)代族淮,后來被稱為“個(gè)人計(jì)算機(jī)之父”辫红。

>> 當(dāng)時(shí),哈佛大學(xué)二年級的學(xué)生比爾·蓋茨就是因?yàn)榭吹搅诉@篇報(bào)道祝辣,才決定和保羅·艾倫一起為Altair開發(fā)Basic語言的解釋器厉熟,并于1975年7月成立微軟公司,可以說這篇報(bào)道直接促成了微軟公司的成立较幌。

>> 古希臘數(shù)學(xué)家埃拉托色尼(Eratosthenes揍瑟,公元前276—前195)通過測量不同地點(diǎn)建筑物的陰影長度,估算出了地球周長乍炉。他的結(jié)果只比正確值小了約2%绢片。

>> SETI@home是一個(gè)尋找地球以外智慧生命的科學(xué)實(shí)驗(yàn),由加州大學(xué)伯克利分校發(fā)起并主持岛琼。它使用射電望遠(yuǎn)鏡監(jiān)聽太空中的無線電信號(hào)底循,然后用計(jì)算機(jī)進(jìn)行數(shù)據(jù)分析,如果發(fā)現(xiàn)有些信號(hào)不可能自然產(chǎn)生槐瑞,就可以證明外星文明的存在熙涤。

end

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市困檩,隨后出現(xiàn)的幾起案子祠挫,更是在濱河造成了極大的恐慌,老刑警劉巖悼沿,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件等舔,死亡現(xiàn)場離奇詭異,居然都是意外死亡糟趾,警方通過查閱死者的電腦和手機(jī)慌植,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門甚牲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蝶柿,你說我怎么就攤上這事丈钙。” “怎么了交汤?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵雏赦,是天一觀的道長。 經(jīng)常有香客問我蜻展,道長,這世上最難降的妖魔是什么邀摆? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任纵顾,我火速辦了婚禮,結(jié)果婚禮上栋盹,老公的妹妹穿的比我還像新娘施逾。我一直安慰自己,他們只是感情好例获,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布汉额。 她就那樣靜靜地躺著,像睡著了一般榨汤。 火紅的嫁衣襯著肌膚如雪蠕搜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天收壕,我揣著相機(jī)與錄音妓灌,去河邊找鬼。 笑死蜜宪,一個(gè)胖子當(dāng)著我的面吹牛虫埂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播圃验,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼掉伏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了澳窑?” 一聲冷哼從身側(cè)響起斧散,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摊聋,沒想到半個(gè)月后颅湘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闯参,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年鹿寨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了新博。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脚草,死狀恐怖赫悄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馏慨,我是刑警寧澤埂淮,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站写隶,受9級特大地震影響倔撞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜慕趴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一痪蝇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冕房,春花似錦躏啰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至详拙,卻和暖如春想际,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背溪厘。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工胡本, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畸悬。 一個(gè)月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓侧甫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蹋宦。 傳聞我的和親對象是個(gè)殘疾皇子披粟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 作者其人 作者Paul Graham 和他的伙伴兩個(gè)人 做出了互聯(lián)網(wǎng)程序的軟件Viaweb——因?yàn)樗麄儧]太學(xué)過Wi...
    凡有所講皆是虛妄閱讀 302評論 0 1
  • 這也是2016年寫的讀書筆記了,拿來湊個(gè)數(shù)吧 前幾天回合肥辦理赴臺(tái)簽注的時(shí)候冷冗,在火車上無聊守屉,就把《黑客與畫家》這本...
    丁不鈍閱讀 401評論 0 0
  • 《黑客與畫家》 關(guān)于作者保羅·格雷厄姆,美國著名程序員蒿辙,暢銷技術(shù)書作家拇泛,硅谷的連續(xù)創(chuàng)業(yè)者滨巴,著名的天使投資人。他在大...
    地球心閱讀 302評論 0 1
  • 為什么書呆子不受歡迎俺叭? ??通常恭取,”書呆子“與”高智商“有強(qiáng)烈的正相關(guān)關(guān)系,而且這類人普遍不受同齡人歡迎熄守,其主要原...
    月敢為你忘缺閱讀 284評論 0 1
  • 《黑客與畫家》讀書筆記作者:【美】格雷厄姆 保羅·格雷厄姆其人其事 Y Combinator (Y運(yùn)算子蜈垮,簡稱YC...
    Cytosine閱讀 1,110評論 0 3