書名:黑客與畫家(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