MySQL創(chuàng)始人:寫(xiě)代碼比打游戲還爽,程序員應(yīng)該多泡開(kāi)源社區(qū)
編者按:根據(jù)StackOverflow的最新調(diào)查,MySQL仍然是全世界最流行的數(shù)據(jù)庫(kù),受訪(fǎng)的開(kāi)發(fā)者中有44.3%的人在使用,超過(guò)了第二位的SQL Server 10多個(gè)百分點(diǎn)??墒悄阒繫ySQL是怎么誕生的嗎?openocean 的一篇有關(guān)MySQL開(kāi)發(fā)者M(jìn)ichael “Monty” Widenius的傳記為我們 揭秘 。
大學(xué)計(jì)算機(jī)專(zhuān)業(yè)的數(shù)量總是會(huì)隨著技術(shù)公司的興衰而起伏,而現(xiàn)在,計(jì)算機(jī)科學(xué)正處在全盛時(shí)期。這意味著,不管怎樣,計(jì)算機(jī)科學(xué)專(zhuān)業(yè)的畢業(yè)生絕大部分可能都會(huì)去敲2年的代碼,再轉(zhuǎn)到產(chǎn)品管理,然后過(guò)渡到企業(yè)、創(chuàng)業(yè)或者商學(xué)院,接著再轉(zhuǎn)為既有公司的中層管理,32歲的時(shí)候結(jié)婚,有了2個(gè)孩子,一個(gè)兒子,一個(gè)女兒,一條狗,還有一棟2層的漂亮房子。對(duì)于大多數(shù)人來(lái)說(shuō),成為程序員就是一份朝九晚五的工作,一份有保障的6位數(shù)薪水來(lái)償還高昂的學(xué)費(fèi),一種達(dá)到目的的手段,沒(méi)人應(yīng)該為此受到責(zé)備。但對(duì)于千千萬(wàn)萬(wàn)無(wú)論好壞的程序員來(lái)說(shuō),只有一個(gè)Monty Widenius。
Monty是一位編程天才。19歲的時(shí)候,他從赫爾辛基理工大學(xué)輟學(xué)開(kāi)始全職工作,因?yàn)榇髮W(xué)已經(jīng)沒(méi)有什么東西可以教他了。在獨(dú)自一人寫(xiě)完除了一個(gè)庫(kù)以外的全部代碼之后,33歲時(shí),他發(fā)布了MySQL,后來(lái)后者成為了全世界最流行的開(kāi)源數(shù)據(jù)庫(kù)。55歲時(shí),他藐視著對(duì)老年人的歧視,仍然是自己公司最好的程序員。
Monty1962年出生于赫爾辛基,1978年他用暑假鋪瀝青掙來(lái)的錢(qián)買(mǎi)下自己的第一臺(tái)個(gè)人計(jì)算機(jī)的。Monty迅速意識(shí)到自己相當(dāng)擅長(zhǎng)寫(xiě)代碼——對(duì)于別人來(lái)說(shuō)很復(fù)雜的事情他卻覺(jué)得很簡(jiǎn)單,而且他對(duì)工作非常投入。Monty用一種在講瑞典語(yǔ)的芬蘭人中常見(jiàn)的濃厚口音說(shuō):“基本上這就像是在閱讀一本真的非常非常好的書(shū)。或者像在玩視頻游戲。你知道開(kāi)始玩游戲然后嘣一聲3小時(shí)的時(shí)間就過(guò)去了的那種感覺(jué)嗎?寫(xiě)代碼對(duì)我來(lái)說(shuō)就是這種感覺(jué)。”
當(dāng)別人跑去聚會(huì)的時(shí)候,Monty卻呆在家里編程。他把計(jì)算機(jī)從里到外都摸透了。他把BASIC的能力推到了極限。Monty說(shuō):“學(xué)校并不理解編程不是像語(yǔ)言或者歷史這樣的東西,它不是靠學(xué)就能學(xué)來(lái)的。所以學(xué)校是不夠的。拔尖的黑客是萬(wàn)里挑一。他們奉獻(xiàn)了所有能用的時(shí)間,10小時(shí),16小時(shí),每一天,年復(fù)一年周而復(fù)始。大多數(shù)人都不愿意做這樣的事情。大多數(shù)人寧愿好好生活。”在Monty眼里,好的代碼是寫(xiě)過(guò)一次就永遠(yuǎn)不需要再碰的那種。從性能角度來(lái)看它已經(jīng)是最優(yōu)化了,你可以不斷增強(qiáng),但永遠(yuǎn)都不需要重寫(xiě)。
到1980年,17歲的Monty癡迷編程已經(jīng)無(wú)法自拔,他需要把自己計(jì)算機(jī)的內(nèi)存從8KB擴(kuò)到16KB。由于芬蘭沒(méi)有商店賣(mài)他想要的東西,于是他弄了一條船去到瑞典Allan Larsson的計(jì)算機(jī)商店。通過(guò)Allan,Monty結(jié)識(shí)了David Axmark,三人溝通交流了多年,就各自項(xiàng)目互相幫忙,偶爾也會(huì)一起協(xié)作。1995年,他們一起成立了MySQL AB。Monty負(fù)責(zé)編程,David和Allan負(fù)責(zé)干完其他的事情。自1981年以來(lái),Monty就一直以芬蘭公司Tapio Laakso Oy程序員的身份在寫(xiě)MySQL前身的代碼,他和Allan一起創(chuàng)辦的數(shù)據(jù)倉(cāng)庫(kù)公司也要用到那個(gè)東西。然而,知道1995年,在Allan和David的游說(shuō)之后Monty才決定在他寫(xiě)的東西之上增加一個(gè)SQL層。1996年10月,MySQL終于發(fā)布了,它得到了廣泛的歡迎。MySQL快速、可靠并且易學(xué),這主要是因?yàn)樵诙嗄甑拈_(kāi)發(fā)中Monty總是不斷把正是客戶(hù)的反饋整合進(jìn)來(lái)。
MySQL的初衷是存儲(chǔ)和管理大數(shù)據(jù)。如果有人想要跟蹤不同的數(shù)據(jù)點(diǎn),他們互使用數(shù)據(jù)庫(kù),也就是有點(diǎn)像微軟Excel那樣的東西。然而,隨著數(shù)據(jù)變得越來(lái)越大,查找Excel這樣的數(shù)據(jù)庫(kù)就會(huì)變得慢多了,也不再可靠。MySQL有能力存儲(chǔ)大量數(shù)據(jù),并且返回搜索結(jié)果極其迅速。“My”來(lái)自Monty女兒的名字,而“SQL”就是結(jié)構(gòu)化查詢(xún)語(yǔ)言(Structured Query Language)的意思,是一種跟數(shù)據(jù)庫(kù)溝通的語(yǔ)言。
對(duì)MySQL開(kāi)源的決定出自1985年的另一次芬蘭到瑞典的乘船旅行,這一次是在一場(chǎng)開(kāi)源大會(huì)上。Monty說(shuō):“討論沒(méi)花多少分鐘。我們都希望回饋給開(kāi)源社區(qū)一點(diǎn)東西。哪怕有人想拷貝或者偷盜我們的代碼,我們認(rèn)為自己能掙的錢(qián)也不會(huì)比現(xiàn)在少。”開(kāi)源項(xiàng)目使得開(kāi)發(fā)者社區(qū)幫助把軟件做得更好,但從商業(yè)角度來(lái)看不好的是貨幣化就要困難多了。為了避免這一點(diǎn),Monty補(bǔ)充了一個(gè)條款,那就是如果任何企業(yè)用MySQL來(lái)賺錢(qián)的話(huà),就需要付費(fèi)授權(quán)。對(duì)此MySQL的代碼里面并沒(méi)有進(jìn)行任何限制,但就靠這一榮譽(yù)制度MySQL實(shí)現(xiàn)了擴(kuò)張并開(kāi)始賺錢(qián)。Monty說(shuō):“我認(rèn)為開(kāi)源是開(kāi)發(fā)軟件的更好方式。但你仍然需要賺夠錢(qián)來(lái)招聘員工,成立公司去跟閉源社區(qū)競(jìng)爭(zhēng)。MySQL是第一款做到這一點(diǎn)的產(chǎn)品。”
Monty在MySQL AB的職位是CTO,對(duì)于大多數(shù)成熟的公司來(lái)說(shuō),CTO其實(shí)已經(jīng)很少再編程的了。然而,Monty從未停下來(lái)過(guò),他的絕大部分時(shí)間都是在寫(xiě)代碼。這種(很少管理的)做法會(huì)導(dǎo)致很多晚期階段初創(chuàng)企業(yè)內(nèi)爆,但哪怕公司人數(shù)已經(jīng)達(dá)到550人,Monty在MySQL AB建立的獨(dú)特文化也使得他可以避免天天開(kāi)會(huì)的煩擾(事實(shí)上,Monty甚至都不接受議事日程邀請(qǐng))。Monty說(shuō):“我總是招會(huì)自動(dòng)駕駛的人進(jìn)來(lái)。所以我不需要告訴他們太多東西。而開(kāi)源意味著你有開(kāi)源社區(qū),大家會(huì)給你提供代碼,你可以看看那些代碼的質(zhì)量,看看他們是怎么跟社區(qū)互動(dòng)的,跟你是怎么溝通的,他們會(huì)問(wèn)什么問(wèn)題,在這些情況下很容易就能看出一個(gè)人是好是壞。在一次面試?yán)锩媸呛茈y了解清楚編碼者有多好的。”
MySQL的成功是CTO Monty與CEO Mårten Mickos通力協(xié)作的結(jié)果。兩人能力都很強(qiáng)且對(duì)公司非常重要,但方式不一樣。Monty是技術(shù)專(zhuān)家,專(zhuān)注于員工生產(chǎn)出盡量完美的代碼。Mårten是公司建設(shè)者,專(zhuān)注于交付東西并幫助團(tuán)隊(duì)發(fā)展。正是兩人的聯(lián)合愿景制造出了MySQL。但在一家沒(méi)有免費(fèi)洗衣、免費(fèi)午餐、站立辦公桌的公司里,是Monty的個(gè)人魅力吸引住了變成人才。Monty不是好交際的籌資人,討好別人的人,博弈論大師,或者職業(yè)溝通者。他會(huì)寫(xiě)代碼,而且寫(xiě)得很好。在Monty看來(lái)贏得開(kāi)發(fā)者尊重是很簡(jiǎn)單的事情:“你干的是跟他們一樣的事,而且干得更好。”
Monty給程序員的建議是,參與到開(kāi)源社區(qū)去,花些時(shí)間到個(gè)人項(xiàng)目里面(“這些年來(lái)我開(kāi)發(fā)了成百上千個(gè)程序:MySQL是其中被用得最多的一個(gè),但其他的都只有我自己用。”)。他警告說(shuō),改變環(huán)境和代碼庫(kù)將意味著哪怕是最好的程序員也要去了解一堆的東西。在Sun被Oracle收購(gòu)之后,Monty成立了MariaDB,這是MySQL的一個(gè)社區(qū)版的分支,開(kāi)發(fā)的團(tuán)隊(duì)成員很多都是MySQL團(tuán)隊(duì)里面的,使用的也是一樣的官方語(yǔ)言:“蹩腳的英語(yǔ)”。MySQL的許多熱心的開(kāi)源信徒跟著Monty去到了MariaDB。MariaDB更加面向開(kāi)發(fā)者,允許由外人打補(bǔ)丁這樣的事情發(fā)生,在很多Linux發(fā)行版中它都是默認(rèn)的數(shù)據(jù)庫(kù)。
Monty對(duì)開(kāi)源和開(kāi)發(fā)者的承諾是堅(jiān)定的——OpenOcean原先是Monty用自己在MySQL的所得成立的,使命是投身于開(kāi)發(fā)者驅(qū)動(dòng)、有技術(shù)深度的產(chǎn)品。他仍然在赫爾辛基自己家中主持開(kāi)發(fā)者午餐,很快OpenOcean就將推出一個(gè)Slack頻道讓開(kāi)發(fā)者可以直接向Monty提問(wèn)。在幾十年的時(shí)間里,Monty對(duì)塑造開(kāi)源社區(qū)無(wú)私的形象做出的貢獻(xiàn)無(wú)可爭(zhēng)議的。但這里面大部分的功勞都應(yīng)該歸到成千上萬(wàn)無(wú)名的程序員和黑客身上,是他們投入的時(shí)間和能力造就了開(kāi)源的繁榮,也是這批人才能確保開(kāi)源革命的繼續(xù)。