122. 十年学会编程

这篇文章已经有很多人翻译过了,我之所以再搞一次,首先是我觉得这文章真的很好,值得一搞再搞,其次,几乎所有的版本都漏掉了一些语句,我猜可能是英文版更新过,但是,中文版没有与时俱进,最后是我没有找到那种一段英文,一段翻译的版本。如果再有人在我的公众号里问我如何学习编程的话,我就可以把这个发给他了。

Teach Yourself Programming in Ten Years

Peter NorviG

Why is everyone in such a rush?

为何每个人都急于求成?

Walk into any bookstore, and you’ll see how to Teach Yourself Java in 24 Hours alongside endless variations offering to teach C, SQL, Ruby, Algorithms, and so on in a few days or hours. The Amazon advanced search for [title: teach, yourself, hours, since: 2000 and found 512 such books. Of the top ten, nine are programming books (the other is about bookkeeping). Similar results come from replacing “teach yourself” with “learn” or “hours” with “days.”

随便走进一家书店,都会看到类似《24小时学会Java》这样的书,旁边摆着的是大量诸如在几天,几小时之内学会C语言,SQL,Ruby以及算法这样的书。如果使用Amazon上的高级搜索,使用title: teach, yourself, hours, since: 2000这个关键字来搜索,将会返回512本书。最靠前的10本书中,有9本是编程的书(唯一的例外是一本记账的书)。如果把关键字”teach yourself”替换成”learn”,或者将”hours”替换成”days”,返回的结果大同小异。

The conclusion is that either people are in a big rush to learn about programming, or that programming is somehow fabulously easier to learn than anything else. Felleisen et al. give a nod to this trend in their book How to Design Programs, when they say “Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies.” The Abtruse Goose comic also had their take.

很明显,人们在学习编程的时候喜欢大跃进,或者认为编程比起其它事情来,是小菜一碟的事。Felleisen在他的书《How to Design Program》里说:“编烂程一点也不难。傻瓜也可以在21天内学会,即使他们是傻逼。”在搞笑漫画网站Abtruse Goose也在这个漫画中表达了同样的看法。

Let’s analyze what a title like Teach Yourself C++ in 24 Hours could mean:

我们来看看类似《24小时自学C++》这种标题党,到底说的什么鬼东西:

  • Teach Yourself: In 24 hours you won’t have time to write several significant programs, and learn from your successes and failures with them. You won’t have time to work with an experienced programmer and understand what it is like to live in a C++ environment. In short, you won’t have time to learn much. So the book can only be talking about a superficial familiarity, not a deep understanding. As Alexander Pope said, a little learning is a dangerous thing.
  • 自学: 24小时之内,你没有时间写几个有意义的程序,也就无法从成功或失败中学到经验。24小时之内,你没有时间和一个有经验的程序员合作交流,也就无从理解使用C++编程的真实场景。简单来说,时间太短,你啥也学不到。因此,有这种干货标题的速成书,只是让你走马观花的瞧一下,绝非深入的理解。18世纪的英国诗人亚历山大·蒲柏[……1]曾说过:“一知半解”是一件危险的事情。[……1]:这个哥哥还给牛顿写了最出名的墓志铭之一:“自然和自然律隐没在黑暗中;上帝说,让牛顿去吧!遂一片光明。
  • C++: In 24 hours you might be able to learn some of the syntax of C++ (if you already know another language), but you couldn’t learn much about how to use the language. In short, if you were, say, a Basic programmer, you could learn to write programs in the style of Basic using C++ syntax, but you couldn’t learn what C++ is actually good (and bad) for. So what’s the point?  Alan Perlis once said: “A language that doesn’t affect the way you think about programming, is not worth knowing”. One possible point is that you have to learn a tiny bit of C++ (or more likely, something like JavaScript or Processing) because you need to interface with an existing tool to accomplish a specific task. But then you’re not learning how to program; you’re learning to accomplish that task.
  • C++: (如果你有一定的编程基础),在24小时之内,能学会一些C++的语法,但是,仅此而已了。如果你以前是个Basic语言的程序员,你可以写一些语法是C++,但是风格是Basic的程序,但是,24小时之内,C++语言的精华或糟粕,你都学不到。重点是什么?(首界图灵奖得主)Alan Perlis曾说过:“不能影响你编程思维方式的语言,是不值得学习的。”一个更加可能的场景是,在工作中,你不得不学习C++(或者JavaScript,Processing之类)的一小部分,来调用一些原有的接口,完成某个特定的任务。这种情况下,表面上说是在学习如何编程,其实只是在应付一下手上的活。
  • in 24 Hours: Unfortunately, this is not enough, as the next section shows.
  • 24小时内:很不幸,24小时太少了,原因下面告诉你。

Teach Yourself Programming in Ten Years

十年学会编程

Researchers (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, telegraph operation, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. The key is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes. Then repeat. And repeat again. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music. In another genre, the Beatles seemed to burst onto the scene with a string of #1 hits and an appearance on the Ed Sullivan show in 1964. But they had been playing small clubs in Liverpool and Hamburg since 1957, and while they had mass appeal early on, their first great critical success, Sgt. Peppers, was released in 1967. 

研究表明,想在任何领域成为专家,大概需要10年的时间,这些领域包括下棋,作曲,发电报,弹钢琴,游泳,打网球,研究神经心理学和拓扑学。关键在于有针对性的训练,而不是漫无目的重复,训练的内容要刚好超过你现有的水平,练习以后要分析你的表现,改正发现的错误,然后重复,再重复。没有什么捷径可走,即使是Mozart,一个4岁就能弹琴的音乐天才,也是用了13年的时间,才真正的写出世界级的音乐作品。在流行音乐上,Beatles好像是在1964年访美期间一夜成名的。实际上,他们从1957年就已经开始在利物浦和汉堡的小酒馆里唱歌了,他们组建乐队的时间就更早了,他们第一张取得巨大成功的专辑《佩帕军士》,是在1967年发行的。

Malcolm Gladwell has popularized the idea, although he concentrates on 10,000 hours, not 10 years. Henri Cartier-Bresson (1908-2004) had another metric: “Your first 10,000 photographs are your worst.” (He didn’t anticipate that with digital cameras, some people can reach that mark in a week.) True expertise may take a lifetime: Samuel Johnson (1709-1784) said “Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.” And Chaucer (1340-1400) complained “the lyf so short, the craft so long to lerne.” Hippocrates (c. 400BC) is known for the excerpt “ars longa, vita brevis”, which is part of the longer quotation “Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”, which in English renders as “Life is short, [the] craft long, opportunity fleeting, experiment treacherous, judgment difficult.” Of course, no single number can be the final answer: it doesn’t seem reasonable to assume that all skills (e.g., programming, chess playing, checkers playing, and music playing) could all require exactly the same amount of time to master, nor that all people will take exactly the same amount of time. As Prof. K. Anders Ericsson puts it, “In most domains it’s remarkable how much time even the most talented individuals need in order to reach the highest levels of performance. The 10,000 hour number just gives you a sense that we’re talking years of 10 to 20 hours a week which those who some people would argue are the most innately talented individuals still need to get to the highest level.”

马尔科姆·格拉德威尔让这个理论广为人知,虽然他说的是另一个说法,10,000个小时而不是10年(这本书有中文翻译版异类 : 不一样的成功启示录)。法国现实主义摄影大师亨利·卡蒂埃-布列松有另外一个标准,他说你的前10,000张照片是你最差的。(当然,这个摄影大师没有意识到数码相机的出现,很多人能在一周内就可以拍10,000张照片)真正的大师要用一生来完成,英国作家,文学评论家和诗人塞缪尔·约翰逊说过:“在任何领域取得卓越的成就都要用一生的努力,不要妄想可以投机取巧。”英国的诗人乔叟也曾经说过:”吾生也有涯 而知也无涯。”同样,公元前400年的希波克拉底也表达过类似的意思,他也认为艺术没有止境,生命却有尽头。他说的这句话有个更长的版本,翻译成英语的意思是:“生命有尽头,艺术无止境,机遇转瞬即逝,练功走火入魔,决定优柔寡断。”当然,不会有一个确定的答案告诉你需要多长时间,毕竟,假设掌握所有的技能(比如编程,下棋,跳棋和音乐)需要相同的时间也不合适,不同的人也会用不同的时间。K.Anders Ericsson教授说过:“值得注意的是,在大多数领域,即使你是个天才,要达到专家级别的高水平仍然需要时间。10,000个小时只是给你一个概念,一个天才,如果每周练习10到20个小时的时间,仍然需要数年时间才能达到专家级别的水平。”

So You Want to be a Programmer

所以你想成为一个程序员

Here’s my recipe for programming success:

这是我编程成功的秘笈:

Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in your ten years/10,000 hours.

要对编程感兴趣,要从中能获得快乐。保证编程足够有趣,这样才能让你花10年的时间或者10,000个小时在上面也不觉得枯燥无味。

Program. The best kind of learning is learning by doing. To put it more technically, “the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve.” (p. 366) and “the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors.” (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.

动手编程。最好的学习方法是边学边做。常言道:“人的最高功力并不能通过做一天和尚撞一天钟这样的重复经验获得,但是,最高的功力可以通过有针对性的日复一日年复一年的训练来获得。”并且,“最有效果的学习需要有针对性的任务,这些任务的难度还要因人而异,并且有合理的反馈渠道,并能够根据这些反馈作出相应的改进。”这些观点引用自《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》这本书里。

Talk with other programmers; read other programs. This is more important than any book or training course.

和其他的程序员交流;阅读别人的代码。这比看书或者参加培训课程要重要。

If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don’t enjoy school, you can (with some dedication) get similar experience on your own or on the job. In any case, book learning alone won’t be enough. “Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter” says Eric Raymond, author of The New Hacker’s Dictionary. One of the best programmers I ever hired had only a High School degree; he’s produced a lot of greatsoftware, has his own news group, and made enough in stock options to buy his own nightclub.

如果你愿意,在大学里花上四年时间(或者再读个研)。这能让你获得一些工作机会,也能让你在这个领域有更深入的了解。但是,如果你一上学就头痛,直接去工作也能获得相同的经验。无论是什么情况,读死书肯定是不行的。计算机科学不会让你成为编程专家,就像学习画笔和颜料不可能让你成为画家一样。这是Eric Raymond说的,他是New Hacker’s Dictionary字典的作者。我雇佣过的最好的程序员是个高中毕业的学生,他创造了伟大的软件,Mozilla,他拥有自己的新闻组,赚到了足够多的钱买了自己的酒吧。

Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you’re the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you’re the worst, you learn what the masters do, and you learn what they don’t like to do (because they make you do it for them).

和其他的程序员一起参与一些项目。在一些项目中成为最出色的程序员;在另一些项目中当最差劲的程序员。在当最出色的程序员的时候,要测试你领导项目的能力,用你的视野来启发别人。如果你是项目中最差的那个,要学习牛人们在做什么,如果他们不喜欢做的,你要拿来做。

Work on projects after other programmers. Understand a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain them after you.

接手并推进别人的项目。理解其他人写的代码。如果别人有没有考虑到的问题,你能理解并修复这些问题。思考并设计你的软件,让这些软件容易被他人维护。

Learn at least a half dozen programming languages. Include one language that emphasizes class abstractions (like Java or C++), one that emphasizes functional abstraction (like Lisp or ML or Haskell), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), and one that emphasizes parallelism (like Clojure or Go). 

学习至少6种(我不太清楚英语中的half dozen是什么意思,是虚指还是就是6种)编程语言。这6种语言中,包括一种支持抽象类的(例如Java或者C++),一种支持函数的(Lisp, ML或者Haskell),一种支持语义抽象的(Lisp),一种支持声明规范的(Prolog或者C++模板),还有一种支持并发的(Clojure或Go)。

Remember that there is a “computer“ in “computer science”. Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk. (Answers here.) 

记住,在“计算机科学”中在“计算机”这个词语。理解执行一条指令要花多长时间,从内存中取一个字(要考虑缓存有没有命中的情况)要多久,从硬盘中连续读字节要多久,在硬盘中寻址定位要多久?

Get involved in a language standardization effort. It could be the ANSI C++ committee, or it could be deciding if your local coding style will have 2 or 4 space indentation levels. Either way, you learn about what other people like in a language, how deeply they feel so, and perhaps even a little about why they feel so.

参加语言的标准化工作。这可能是有关 ANSI C++ 委员会,也可能是缩进的风格是两格缩进或四格缩进。无论如何,你能从中学到其他人对语言的喜好,也能了解到他们热爱的程度,甚至也许能知道一点他们为什么他们会这样认为?

Have the good sense to get off the language standardization effort as quickly as possible.

知道何时能从标准化语言的工作中脱身,越快越好。

With all that in mind, its questionable how far you can get just by book learning. Before my first child was born, I read all the How To books, and still felt like a clueless novice. 30 Months later, when my second child was due, did I go back to the books for a refresher? No. Instead, I relied on my personal experience, which turned out to be far more useful and reassuring to me than the thousands of pages written by experts.

很难说能从书本中学到多少东西。我第一个小孩出生的时候,我读了所有的“如何做”系列的书,但是,没有什么头绪。30个月以后,当我的第二个孩子出生,我还要重温一下那些书么?当然不用了!我都已经是老司机了,我完全靠我自己的经验,事实也证明我自己的经验要胜过那些专家们写的上千页的书。

Fred Brooks, in his essay No Silver Bullet identified a three-part plan for finding great software designers:

弗雷德·布鲁克斯在他的书《没有银弹》中给出了三条建议:

  1. Systematically identify top designers as early as possible.尽早地系统地识别出顶级设计师
  2. Assign a career mentor to be responsible for the development of the prospect and carefully keep a career file.每个人给分配一个职业规划的导师
  3. Provide opportunities for growing designers to interact and stimulate each other.让成长中的设计师有机会互相切磋武艺

This assumes that some people already have the qualities necessary for being a great designer; the job is to properly coax them along.  Alan Perlis put it more succinctly: “Everyone can be taught to sculpt: Michelangelo would have had to be taught how not to. So it is with the great programmers”. Perlis is saying that the greats have some internal quality that transcends their training. But where does the quality come from? Is it innate? Or do they develop it through diligence? As Auguste Gusteau (the fictional chef in Ratatouille) puts it, “anyone can cook, but only the fearless can be great.” I think of it more as willingness to devote a large portion of one’s life to deliberative practice. But maybe fearless is a way to summarize that. Or, as Gusteau’s critic, Anton Ego, says: “Not everyone can become a great artist, but a great artist can come from anywhere.”

此处假设有一些人天生有成为伟大设计师的潜质,然后,就是正确的去引导他们。艾伦·佩里斯一针见血地说:”假如每个人都可以学会雕刻,那就得教米开朗基罗哪些事不要去做。对于伟大程序员,也是如此。”Perlis认为,伟大的人有一种内在的特质,这种特质往往比接受训练更重要。但是,这些特质是从哪里来的呢?与生俱来的?还是通过后天勤奋而来的?正如 动画片《料理鼠王》里的幻象大厨Auguste Gusteau说的那样:“谁都能做饭,但只有那些无所畏惧的人才能成为大厨!”我认为“把你生命中的大部分时间花在有针对性的练习上”这种精神,看作一种自愿奉献的精神!但或许“无所畏惧”才是体现这种精神的真谛。或者,就像是《料理鼠王》里那个与 Gusteau 作对的刻薄的美食评论家 Anton Ego 说的那样:“不是任何人都能成为伟大的艺术家,不过,伟大的艺术家可以来自任何地方。”

So go ahead and buy that Java/Ruby/Javascript/PHP book; you’ll probably get some use out of it. But you won’t change your life, or your real overall expertise as a programmer in 24 hours or 21 days. How about working hard to continually improve over 24 months? Well, now you’re starting to get somewhere…

所以,尽管买本 Java/Ruby/Javascript/PHP 的书吧。你可能会从中学到点儿有用的东西。但作为一个程序员,在 21 天内或 24 小时内改变你的人生,或者提高你实际的编程水平,这是不可能的。你尝试过连续 24 个月不间断的努力提高自己么?好吧,好吧,你该上路了……

121. 孤独的圣斗士:拉里•埃里森(下)

我们都知道司马迁老先生的《史记》里面有一篇《项羽本纪》,如果听我的电台时间相对比较长的听众,可能知道,我非常的推宠《史记》这本书,为什么呢,因为我只看过一本书,就是《史记》,所以,我经常推宠这本书。如果你的一生中只看一本历史书的话,那就看《史记》,其它的历史书都是拍皇上马屁的,只有《史记》,写这本书的出发点不是拍马屁。像同时期的《汉书》,班固和班超这两兄弟,文采没得说,但是,这本书是国家拨款写的,公款写书,目的是为了说明我这个汉朝太NB了,而且吧,竟然把刘邦的传记写在和秦始皇,项羽放在一起,不成体统,这马屁拍的,让皇上太爽了。所以如果纯粹读故事,我推荐读《史记》,如果学拍马屁,我推荐读《汉书》。司马迁直接了当的说本朝的汉武帝,是个糊涂蛋,用反语说明君不深晓。后来的《史书》都是小骂大帮忙,都是皇上为民做主,太苦了… 所以鲁迅说《史记》是史家之绝唱,真的是绝唱啊。司马迁之后,都是马屁精了。

在史记上,在《项羽本纪》里,有个故事是这样的,范增说项羽曰:“沛公居山东时,贪于财货,好美姬。今入关,财物无所取,妇女无所幸,此其志不在小。”这个故事说明了一个淳朴的道理:不图小利,必有大谋。显然,红帽子公司里面没有人读过司马迁的《史记》,埃里森是什么人,也是贪于财货,好美姬的人,和我老刘家的沛公一样,也和我一样,见钱眼开,见色忘义。但是,埃里森竟然和红帽子公司说,我打算拥抱开源软件了,我要免费给红帽子公司打工。

甲骨文在此前一直没有自己的操作系统,和IBM有过节,和微软势同水火,自己的伙伴又不太成器,比如Solaris和VMS,而且,当时的趋势是个人电脑使用的CPU已经越来越NB了,Linux越来越成气候。Linux是基于Intel的X86芯片免费出的一款操作系统,源代码公开,而且和Unix几乎一模一样,差别只是Unix要几千几万美金,Linux免费。只要有点智商的人,肯定会选Linux,而不是Unix。Linux就一下子普及了,Redhat公司是众多Linux公司中,最厉害的一个,收用户的服务费用。

埃里森说他要和红帽子公司合作,而且诚意满满,免费放了几百个程序员开发Linux,工资是Oracle出,代码归全人类。然后,大家都以为沛公改邪归正了,不好色了,也不爱钱了,挺好。当时的媒体也是一阵夸,我估计如果埃里森看到当时媒体上的报道,也会脸红的像个小女孩。Oracle宣布,新版的Oracle数据库首先支持Redhat的操作系统。

Redhat这家公司很愉快的接受了Oracle的橄榄枝,可能他们认为是自己开源的精神感染了埃里森,让埃里森立地成佛了。实际上,这个世界上有很多这种人,认为自己的魅力太强大了,比如有个隔壁老王总是给你家帮忙,你以为是你的魅力太强大,实际上老王看上的不是你的魅力,而是你老婆的美丽。红帽子公司就是如此,见到一顶绿帽子,有一股迫不及待想戴上去的冲动。在Oracle派出了100多人到Redhat工作以后,Oracle公司对Linux的开发有了主动权,完全掌握了Redhat开发的流程,并且,由Oracle提交的核心代码超过了Redhat公司,从某种意义上来说,Redhat被Oracle给架空了。然后,图穷匕现,埃里森说我们Oracle的功劳比你们都要大,所以,有两条路你们来选,第一条,你们听我的;第二条,我们发布自己的Linux。这真是一个痛苦的选择,Oracle从此有了自己的Linux,在很大程度上,比Redhat的性能还要好。在甲骨文的帝国拼图中,操作系统这一块就补全了。

在拥有了自己的应用软件,有了自己的操作系统以后,Oracle还缺少自己的硬件,这样,一个从硬件到操作系统到应用软件的公司才是一个真正的不受制于人的公司。接下来,Oracle开始在硬件领域寻找自己的猎物。一个叫SUN的公司出现了。

SUN公司是个什么公司呢?简单的来说也是属于手里的牌有王有炸,但是,最后还是没跑了的那种公司。这个公司在硬件上没搞定IBM,DELL这些公司,自己的Solaris操作系统没搞定Linux,手里还有个名声巨好,放在任何一家其它公司都有可能玩出各种花样的编程言语,Java,结果,这么多好牌,SUN公司的人活生生的给玩死了。Oracle花了70多亿美金就把这样一个曾经辉煌的公司给买了下来,这点钱不够曾经SUN市值的3%。

SUN公司是硅谷最有名的公司之一,在各行各业都有广泛的影响力。Oracle在拥有了SUN以后,很快就借助SUN公司的硬件实力,在2009年推出了一个数据库的一体机,从硬件到操作系统再到应用软件都是Oracle一家生产的。以前,这个硬件是用HP公司的,毕竟用别人家的产品,总是有些性能上的问题,这样全是自己家的以后,一下子把性能提高了不少。和苹果公司一样,从硬件到软件都是自己来设计。在有了软件,有了硬件以后,Oracle还进军了云计算。

在2004年的时候,埃里森就退休了。一代枭雄,也抵抗不过岁月的痕迹,在2004年以后,他的八卦故事也越来越少,互联网的发展也慢慢的由硅谷的新秀Google,Facebook等来带动,但是,埃里森的故事,值得流传。

硅谷从来就不缺少改变世界的人,几乎每个公司都说自己的使命是改变世界,甚至苹果公司的的Jobs也说自己是为了改变世界,只有拉里•埃里森说他不想改变世界,他只想赚钱,他也不喜欢写软件,他不擅长编程。埃里森的众多传记中,有一本是威尔逊写的,这本书的名字叫《上帝和埃里森的区别》,有个笑话是这样的,有人问:上帝和埃里森有什么区别?上帝回答说:我不是埃里森,埃里森说:我是上帝。

当人们问他,你为什么选择从事软件这个行业,他沉思了片刻,慢慢的说:我一无所有,经营软件不用大量的资金,有一点钱就可以创业。所有伟大的软件公司都是这么开始的,也许不是所有,但是,我们是的,我们刚开始的时候一无所有。我相信,他一生虽然说了无数的谎话,在回答这个问题的时候,他起码是真诚的,他没有用所谓的兴趣,没有用所谓的改变世界这样的P话来敷衍大家,他对着记者说出了自己当年的处境。

纵观埃里森的一生,虽然有过各种的小曲折,但是他几乎没有犯过任何重大的失误。在1990年的时候,甲骨文一年就把公司的市值损失了82%,公司也到了破产的边缘,但是,他用强大的执行力,把公司从破产的边缘拉了回来。当时,大股东纷纷的和他打官司,连美国证券委员会也开始调查Oracle公司是不是有欺诈。他的好朋友,苹果公司的Jobs开玩笑说,甲骨文要把客服电话修改一下,比如改成英语请按1,控告埃里森请按2,控告甲骨文请按3。当时,埃里森可真的是焦头烂额,而且,他也没法像乐视的贾老板一样,拍拍屁股走人,就只好自己一个人死抗。

在所有官司都解决的差不多以后,《商业周刊》来采访他,他只是轻描淡写的说了一句:这是一次昂贵的经验。经过这次打击,埃里森真的像圣斗士星矢一样,只要打不死,就越来越强大。他复原以后,只用了4年的时间,到1998年,利润首次超过10亿美元。到了90年代末,他已经成了第4大富豪。和其他公司的文化不同,埃里森根本就不在乎员工是不是对公司忠诚。比如像松下啊,HP这样的公司,公司和员工之间,有一种比较亲和的关系,有那么一点把公司当成家的感觉,但是,Oracle公司不在乎这个。

现在的IT新贵也是如此,比如Google,Facebook也是如此,经常是秀公司多么好,和员工是一种非常天然的亲密关系,这个在Oracle是不存在的。埃里森也不用搞这些来维持公司,所以,当公司遇到困难的时候,Oracle的员工那是纷纷的跳船跑路,埃里森也不在乎,等公司的情况好转了,这些人就又回来,埃里森也不丰乎,这种关系有一种夫妻本是同林鸟,大难临头各自飞的和谐观。但是,只要是埃里森在,公司就没事。在1997年12月,公司8小时,股票没了30%,埃里森一天就丢了21亿美元,但是他也不是很在乎,然后,接下来的一个月,他又没了20多亿,相当于一个月,个人的账户丢了50亿美元,他还是不在乎,期间,他还换了一个女朋友。他在Oracle有一个专用的办公室,在甲骨文大道500号顶楼,网上有照片,我也不知道是真的还是假的,就不贴了。网上有很多关于埃里森的传闻,如果没有出现在传记里的,我也没说,大家有兴趣的可以去搜搜。

我在最开始的时候说了,他的父亲是个飞行员,但是,好像他一生都没有见过他的父亲。但是,他从他的父亲那里遗传了一个爱好,就是开飞机。因此,他一生都热爱飞行。因为他的客户好多都是各国政府,政府是有真的飞机的。可惜,美国政府不肯卖给私人现役的飞机,他一直想买一个F15战斗机玩。有一年,以色列政府要买他的数据库,他不卖,以色列政府就想,给钱也不卖么?他说,听说,你们有F15战斗机,用飞机来换吧。后来美国政府出面,才让以色列用钱买了Oracle的数据库。再后来,沙特政府又来买数据库,他又故技重演,这次玩真的了,谁说也不卖,除非用F15,用钱是不卖的。结果,沙特的王子真就给了他两架F15,但是,这次美国政府着急了,我去!用法律是阻止不了这家伙了,直接不允许这两架飞机运到美国来,所以,埃里森如果想开F15了,就去沙特玩两下。

埃里森总共结婚了4次,有一个儿子有一个女儿,虽然他的父母抛弃了他,但是他还是个非常非常好的父亲的,这一点和微软的那个鲍尔默有的一拼,非常的负责,是个能打100分的好父亲。他的儿子也喜欢开飞机,所以,他们爷俩经常会一人开一架飞机,在天上玩真的模拟飞行。

我好像看到最近的关于他的消息是他又找了个20多岁的乌克兰的模特,叫Nikita Kahn。我很羡慕他的一生,好了,关于他的故事就讲到这里吧。

120.孤独的圣斗士:拉里•埃里森(中)

在1970年,IBM的一个研究员,他的名字泰德•科德(Edgar Frank Ted Codd),他发表了一篇论文,名字叫“大型数据库的系统模型”,这篇论文介绍了关系数据库的理论。这篇论文我早就打印下来,读了好几遍了,如果你也想读的话,我已经放在我的网站上了,或者在我的公众号里看看,总共就11页,这个论文在IBM没有引起什么重视,但是,碰巧艾利森读到了这个论文,他觉得有戏。所以,我还是很服艾利森的,人家没事就去读论文,我们没事就去直播网站看人家的大胸,还给人家刷火箭,看完以后再抱怨这个社会的不公正。那些说艾利森没什么原创的,起码你应该先读懂这篇论文吧。

A relational Model of Data for Large Shared Data Banks

在关系数据库以前,如果你要使用数据库,首先要了解数据的存储方式,然后还要了解如何检索,否则根本没法用。但是,有了关系数据库,人们只要使用一种基于英语的电脑语言,这就是我们现在每个计算机系的人都会的SQL语言(Structured English Query Language),这个语言也是IBM的人发明的,并不是Oracle发明的,然后,IBM提供了所有的工具以后,就去忙其他的事情了,这个伟大的发明就束之高阁了。

IBM对关系数据库完全不上心,这也不能算是一件令人费解的事情!当时IBM有一个卖的很好的数据库叫IMS,如果这时候再推出一个与自己产品相竞争的产品,看起来也比较蠢。等到Oracle都赚了很多钱,艾里森已经是亿万富翁了以后,IBM才推出自己的关系数据库产品,叫DB2,这已经是1985的的事情了。在Oracle看到IBM的论文的时候,是1970年,也就是说IBM有15年时间,没有真正的使用自己的成果。Oracle也不是没有竞争对手,当时的加州大学伯克利分校也在研究关系数据库,名字叫Ingres。这个数据库后来也算成了气候,就是PostgreSQL的前身,当然,比起Oracle来,比起MySQL来,还是要落后一些的。这个可能有人,尤其是PostgreSQL的粉丝,就觉得不服气,觉得PostgreSQL是世界上最好的数据库,其实这就有点自欺欺人了。如果说Oracle是清华的话,MySQL是北大的话,PostgreSQL大概类似于我的母校山东省莱芜市广播电视大学的水平吧,我是读的电台播音专业,所以我的普通话才这么标准。正经的大公司是不用PostgreSQL的,我厂曾经用过,数据量小的时候还是很好的,等数据量上来以后,等着哭就是了。如果你的应用或者网站就几万人,甚至顶多10万人,那用PostgreSQL还是非常非常棒的。这个世界上绝大部分的网站,app用PostgreSQL一点问题没有。所以,我并不是黑PostgreSQL。

简单来说,关系数据库就是一个有组织有条理的数据表格,这些数据表格在理论上是无限大的。但是,当时的电脑速度不快,虽然关系数据库的理论看起来不错,还是太慢了。也正是因为这个原因,当时看过这论文的人,几乎都认为这东西没有多少前途,就是搞着玩玩。在艾里森成了亿万富翁以后,给艾利森写传记的作家威尔森说,是的,关系数据库是IBM的创意,但是,IBM没有给Oracle一分钱的投资。Oracle的成功来自艾利森忘我的工作,不屈不挠的意志和冷静的分析。对这个评价,我还是非常认可的。

现阶段来说,关系数据库还是没什么争议的王者,如果大家做一些小项目的话,关系数据库还是首选。所以还是选MySQL啊,Postgres这样的数据库,不要用NoSQL,毕竟关系数据库已经发展了40-50年了,省心很多。当然,关系数据库有个大家都知道的问题,就是数据量太大了,扩展性不太好,比如,一天有10亿的访问量。但是,如果一天有10亿的访问量了,你的银行账户里早就有10亿美金了,自然有人帮你操心数据库的问题。我们这里有好多小创业公司,用户加上自己,总共100个,然后啥技术新用啥技术,比如各种JS框架,这个世界上每天至少有100个JS框架问世,还有各种NoSQL,比如听说Google啊,uber,facebook都已经用NoSQL了,自己也用,但是,人家每天有几亿访问量,你每天有几十个访问量,还是老老实实的用MySQL,用Postgre比较省心。所以,我想讲一下关系数据库的基本原理,非常的简单。`

我是在做路由器的公司工作,所以有比较多的机会接触运营商。大家也许知道,现在中国是不允许重婚的,就是你同时和两个人结婚是不行的,只能一个一个来。在2000年左右的时候,国内没有联网,你每个省结一次婚是没问题的,现在我不知道了,反正当年肯定没问题,我当时只结了7-8次吧。现在如果有谁想试试,记得回来告诉我还行不行。正是因为这个婚姻法和人的本性相冲突,所以,抓外遇成了一个行业。我在运营商那边的时候,经常会看到一个中年妇女,找关系打印她老公的通话记录,经常打印个2-3年的,100张A4的纸。经常看到她一边打印,一边就像冲了电一样,脸慢慢的的变红了,身体开始颤抖,大口大口的喘气。这个时候,她就是在建立自己的关系数据库,她的脑子里一直在考虑一个问题,他和她到底是什么关系?他和她到底是什么关系,这就是关系数据库考虑的终极问题!这个时候,我就想跑过去和她说,别在脑子里想了,用个关系数据库来分析一下吧,但是,我怕她当时在气头上,把我打一顿。

她回到家以后,抓住她老公,问的第一个问题肯定是:你和她到底什么关系?这个世界上出轨的男男女女这么多,这个问题每年每天每时每刻都在不停的被问来问去,你和她什么关系?但是,只有艾利森真正的从这个问题中获得了巨大的利益,关系数据库的作用,就是根据打印的那些通话记录,建立起一个一个的表项,你可以通过简单的查询语言问这个数据库,他和她每天平均通话多长时间,经过简单的计算,这个数据库会告诉你,平均每天充电3分钟,通话3小时。其实,这就是关系数据库的作用。让数据之间的关系明朗化。

在1977年的时候,艾利森和2个朋友,是的,他也有朋友,这两个朋友都是不太善于言辞,技术又非常不错的人。艾利森是技术不太好,但是特别能说的人。所以,好多的创业公司都是这种组合,一个能忽悠,一个有技术,如果都是忽悠或者都是技术,这就不太好办了,比如苹果公司,HP公司,Yahoo公司,都算是这种组合。他这两个朋友的名字我就给翻译成鲍勃和爱德华吧,这两个人技术没得说,当时在一家叫Ampex的公司做存储设备的,艾利森也去了这个公司,做销售,然后他发现这个公司太蠢了,就拉了这两个技术高手,3个人成立了一个新的公司。艾利森出资1200美元,占60%的股份,这两个哥们每人出资400美元,各占20%的股份。那两个人做软件,艾利森出去卖软件,当然,当时的软件只能干一件事,就是查询输入进去的数据,非常的简陋。所有人对这个软件公司没什么信心,除了艾利森,软件公司当副业成立的时候,他的主业一直没闲着,1977年成立公司,1977年,他又一次遇到了自己的真爱,一个年轻的金发美女,这样的事情,在他的一生中还会发生很多次,这只是第二次。他在1978年就离婚了,离婚的时候,他前妻分了30%的公司股票,结果,老婆死活不肯要这些股票,非要卖给艾利森,这些股票本来是值600美金的,但是,艾利森坑了前妻一把,少给了100,就给了500美金。现在,这些股权市值大概500亿美元。

然后,就这么一个几乎什么都不能干的软件,只能查询输入进去的东西,竟然被艾利森包装了一下,卖给了美国海军和美国中央情报局,所以,我总会觉得这两个地方的人,是不是特别容易忽悠。其实Oracle的名字当时并不叫Oracle,而是一个很土的名字,叫SDL,取的是Software Development Laboratories, Inc.的首字母。后来艾利森为了推广自己的关系数据库,直接又把名字改了,叫RSI(Relational Software Inc, RSI)。当时的机器都是VAX机,或者IBM的大型机,数据库在不同的机器上,跑的是不同的数据库,因为当时还没有多少跨平台的东西。但是,艾利森就先宣布,本公司的数据库是用C语言写的,而且,3.0就要上市了。其实,这都是忽悠,但是,用户就是相信艾利森说的话,因为当时个人是没钱买电脑的,买的人都是大型公司,政府机构或者学校,显然用一个数据库要比用多个数据库来的方便。

在1982年的时候,公司才真正改名为Oracle公司,在此之前,Oracle只是公司数据库的名字,到1986年的时候,公司上市了,上市以后,艾利森成了亿万富翁,他的两个哥们也成了千万富翁。

我对早期的事情非常感兴趣,在关系数据库之前,人们是如何查询并利用数据的呢?现在的大数据时代,是不是也能从中吸取一点什么经验呢?在早期,数据是存储在磁带上的,现在很多数据也是存储在磁带上,因为用磁带成本非常的低。磁带有个问题是,非常的慢,用起来不爽,对有大量数据的地方,比如中央情报局这种地方,磁带太慢了,当时的磁盘容量又太少,Oracle公司就是在这种有需求,但是没法满足的情况下诞生的。有需求自然就能产生市场,如果看Oracle的最初几年,都是几倍几倍的增长,用了6年时间,从0长到了10亿的销售额。

Oracle成立以后,从只有3个人的公司,到上市时候的100来个人,再到仅次于微软的公司,艾利森也成了仅次于盖茨的人。在早期的时候,微软专注于个人用户,Oracle专注于企业用户,两个公司井水不犯河水,但是一旦长大了,这两个公司难免会互相看到对方。起初,Oracle没有自己的操作系统,因为艾里森看不上IBM,所以IBM的系统他从来不用,艾里森也看不上比尔盖茨,并且盖茨也看不上艾里森,自己也有SQL Server这个数据库,因此,在最初的时候,Oracle只能用DEC的VMS系统,还有SUN的Solaris系统。等到他看到盖茨非常讨厌Linux以后,按照敌人的敌人是朋友的原则,Oracle决定支持Linux,Redhat公司的Linux成了Oracle的一个选择。

在和Redhat合作了几年以后,艾利森开始打起了Linux的主意。我们都知道,Redhat是Linux届最出名的公司,属于谁也不理型的公司,就自己一个人在众多的Linux发行版中独自骄傲,但是,这次来的对手是Oracle。微软对Linux几乎没有什么威胁,但是Oracle就不同了,艾利森是第一个,也是唯一一个让Redhat公司屈服的公司。这个故事留到下一期再讲。

119. 孤独的圣斗士:甲骨文的拉里•埃里森(上)

这个世界上有这样一种人,你可以爱他,也可以恨他,但是,你却不能忽略他。这个世界上最大的数据库公司——甲骨文——的创始人和前CEO就是这样的人。甲骨文的产品并不是为个人用户准备的产品,但是,每一次交易,每一次打电话,每一次飞机的起落,每一次银行的存款和取款,都和数据库有关,而在这个领域,甲骨文是最大的玩家。所以,无论是艾里森好也罢,坏也罢,这个人都是无法被忽视的。

继续阅读“119. 孤独的圣斗士:甲骨文的拉里•埃里森(上)”