首頁>資訊 >
對(duì)話MySQL之父:代碼一次性完成才是優(yōu)秀程序員 2022-04-14 19:48:18  來源:36氪

【CSDN 編者按】MySQL之父Monty有著四十多年的編程經(jīng)驗(yàn),從兒時(shí)的興趣到長(zhǎng)大后的深耕,他在編程領(lǐng)域不斷鉆研,最終成為編程大師。《新程序員004》帶你走進(jìn)Monty的程序人生,談?wù)勊诰幊谭矫娴淖钚赂形蛞约皩?duì)未來的預(yù)測(cè)。

如今,我們正處于數(shù)據(jù)爆炸的時(shí)代,軟件崛起的背后是數(shù)據(jù)的支持。而隨著開源技術(shù)的發(fā)展,越來越多的數(shù)據(jù)庫(kù)選擇創(chuàng)建開源社區(qū),讓更多開發(fā)者參與到數(shù)據(jù)庫(kù)的建設(shè)中來。

在開源數(shù)據(jù)庫(kù)領(lǐng)域中,Michael "Monty" Widenius(通常稱為Monty)絕對(duì)是不得不提的代表人物。有著四十多年編程經(jīng)驗(yàn)的Monty是MySQL和MariaDB的作者,也是開源軟件運(yùn)動(dòng)的著名倡導(dǎo)者,即便是現(xiàn)在他也在堅(jiān)持寫代碼。作為影響了幾代技術(shù)人的數(shù)據(jù)庫(kù),MySQL所取得的成就無需多言。而最初作為MySQL分支立項(xiàng)的MariaDB也在迅速成長(zhǎng),同樣在數(shù)據(jù)庫(kù)中贏得了一席之地。

Monty近照(圖源自Wiki)

作為在技術(shù)屆游歷半生的資深“程序員”,Monty對(duì)編程的理解也有許多獨(dú)到之處,他認(rèn)為只有學(xué)習(xí)編程20年以上,才能像讀懂音樂一樣,看出編程之美。除此之外,他還表示:“寫代碼時(shí)要盡量將代碼一次性寫成,而不是寫完后再?zèng)]完沒了的修改。”只有做到這一點(diǎn),才能稱得上是一名優(yōu)秀的程序員。而這也是他長(zhǎng)久以來所遵循的“編程法則”。

近期,《新程序員》有機(jī)會(huì)邀請(qǐng)Monty分享他的程序人生,談?wù)勊麑?duì)于技術(shù)的感悟,以及對(duì)于數(shù)據(jù)庫(kù)發(fā)展的看法與心得。

“我在編程方面有一定的天賦”

1962年,Monty出生在芬蘭首都赫爾辛基,小時(shí)候的他便對(duì)計(jì)算機(jī)有著濃厚的興趣。1978年,年僅16歲的Monty用他一整個(gè)暑假打工攢的錢買了人生中的第一臺(tái)電腦,并且用BASIC語言寫下了第一行代碼REM,從此以后他便與編程結(jié)下了不解之緣。三年后,Monty被北歐著名高校赫爾辛基理工大學(xué)錄取,但由于自己的學(xué)習(xí)理念與學(xué)校不同,他感到在學(xué)校學(xué)不到什么東西,因此沒過多久就輟學(xué)了。1981年。離開了校園的Monty開始在荷蘭的一家叫做Tapio Laakso Oy的公司當(dāng)程序員。在近十年之后,34歲的Monty開發(fā)出了歷史上最流行的開源數(shù)據(jù)庫(kù)之一——MySQL。

戳↑↑查看采訪視頻

Monty能開發(fā)出MySQL并非偶然,他在編程上投入了大量的時(shí)間。根據(jù)早期的資料顯示,就連別人去參加聚會(huì)時(shí),他也在家里寫代碼。在他看來,好的代碼不需要一次又一次地重寫,而是在開始寫之前,就抱有一次寫成的心態(tài)。正因?yàn)槿绱耍钡蕉嗄旰蟮慕裉?,Monty仍然直言“自己在編程方面具有一定的天賦”。

除了Monty,MySQL的誕生還離不開David Axmark和Allan Larsson。早在1980年,17歲的Monty打算將自己的計(jì)算機(jī)內(nèi)存從8KB提高到16KB。機(jī)緣巧合之下,他去往瑞典Allan Larsson的電腦店尋求幫助,在那里認(rèn)識(shí)了同樣也是寫代碼的David Axmark,之后三人就成為了親密的合作伙伴,經(jīng)常一起寫代碼,解決編程過程中遇到的問題。1995年,三人創(chuàng)立了MySQL AB,MySQL AB就是MySQL的雛形。這其中Monty負(fù)責(zé)了大部分的開發(fā)工作。最終,在1996年10月,MySQL首個(gè)版本發(fā)布,從此掀開了數(shù)據(jù)庫(kù)歷史的重要一章。

到了1999年,MySQL的迅速發(fā)展已經(jīng)引起了許多人的注意, Oracle表示要以5000萬美元的價(jià)格收購(gòu)MySQL。然而Monty三人并不想止步于此,也不想失去對(duì)MySQL的控制,因此拒絕了這次收購(gòu)。

隨著時(shí)間的推移,MySQL迅速發(fā)展, 但同時(shí)市場(chǎng)上也出現(xiàn)了包括PostgreSQL在內(nèi)的競(jìng)爭(zhēng)對(duì)手?jǐn)?shù)據(jù)庫(kù)。為了在競(jìng)爭(zhēng)中脫穎而出,MySQL開始接受融資,以獲得更大的發(fā)展機(jī)會(huì)。到了2003年,MySQL實(shí)現(xiàn)了高達(dá)400萬的安裝次數(shù),較兩年前翻了一番,成為了當(dāng)時(shí)全世界最受歡迎的開源數(shù)據(jù)庫(kù)。

2008年1月16日,Sun Microsystems以高達(dá)10億美元的價(jià)格收購(gòu)MySQL(然而次年Sun又被Oracle收購(gòu))。當(dāng)時(shí)Monty擔(dān)心MySQL可能會(huì)受到Oracle的控制而變得商業(yè)化,并且如果Oracle一家獨(dú)大的話,可能會(huì)引發(fā)數(shù)據(jù)庫(kù)領(lǐng)域的不良競(jìng)爭(zhēng)。于是他發(fā)起了一場(chǎng)拯救MySQL的請(qǐng)?jiān)富顒?dòng),并在MySQL閉源前將其分化,以其小女兒Maria的名字命名創(chuàng)建了MariaDB。

設(shè)計(jì)MariaDB的初衷(圖源自MariaDB官網(wǎng))

MariaDB開源數(shù)據(jù)庫(kù)可以看做是MySQL的一個(gè)分支,主要由開源社區(qū)維護(hù),目的是要完全兼容MySQL,甚至包括API和命令行。MariDB推出后,不少M(fèi)ySQL的員工都轉(zhuǎn)而投向MariaDB,甚至是原先使用MySQL的各大公司也將數(shù)據(jù)庫(kù)遷移到MariaDB上,其中就包括谷歌和維基百科。Monty表示:“與MySQL相比,MariaDB更加成熟,擁有更大的研發(fā)優(yōu)勢(shì),并且在安全性修復(fù)方面也更加出色。”直到現(xiàn)在,Monty依舊親自參與MariaDB的開發(fā)維護(hù),可以說他的工作重心都在MariaDB上。

Monty的小女兒Maria(圖源自MariaDB官網(wǎng))

MariaDB,堅(jiān)持開源的背后

鄒欣:你在創(chuàng)建MariaDB時(shí),曾提到要把它打造成第二個(gè)MySQL,并且確保它是開源的。那么對(duì)于數(shù)據(jù)庫(kù)而言,為什么開源這么重要呢?

Monty:對(duì)于任何大型項(xiàng)目來說,開源都是非常重要的。既然要和巨頭競(jìng)爭(zhēng),你就要有和他們一樣的工具。在我看來,開源很適合用于軟件開發(fā),尤其是當(dāng)公司規(guī)模還不大的時(shí)候。這個(gè)時(shí)候你很難兼顧公司和用戶的需求,因此需要聽取別人的想法。而開源就意味著可以獲得社區(qū)的幫助,能夠了解其他人的觀點(diǎn)。有了開源,你可以開發(fā)出更好的產(chǎn)品,同時(shí)產(chǎn)品也能夠獲得更大的影響力。

鄒欣:不過開源的一大弊端就是聲音太多,需求不一,這種情況下該如何保證數(shù)據(jù)庫(kù)能滿足大多數(shù)人的需求呢?

Monty:要解決這個(gè)問題,就需要確保數(shù)據(jù)庫(kù)足夠靈活,這樣才能滿足大多數(shù)人的需求。在這一點(diǎn)上,MySQL和MariaDB的做法是建立各種性能不一的存儲(chǔ)引擎,人們可以針對(duì)具體需求開發(fā)自己的存儲(chǔ)引擎。

事實(shí)上,對(duì)于那些有需求的人來說,MariaDB依舊是一個(gè)優(yōu)秀的工具。而對(duì)于要求數(shù)據(jù)庫(kù)體量較小且運(yùn)行較快的人來說,MariaDB同樣是一個(gè)不錯(cuò)的選擇。在開發(fā)MariaDB時(shí),我們考慮到了各種可能性,使它能夠保持良好的性能。

鄒欣:AI技術(shù)的發(fā)展讓人們對(duì)數(shù)據(jù)庫(kù)的期待發(fā)生了轉(zhuǎn)變,今天數(shù)據(jù)庫(kù)是否能夠與AI技術(shù)結(jié)合,從而擁有數(shù)據(jù)決策能力?

Monty:對(duì)于數(shù)據(jù)庫(kù)來說,最重要的是要處理AI需要的不同結(jié)構(gòu)。因此我們添加了對(duì)JSON的支持,用于在MariaDB中支持動(dòng)態(tài)列。這樣人們就可以儲(chǔ)存并檢索數(shù)據(jù),同時(shí)保留自己想要的格式。通常AI并不是要?jiǎng)?chuàng)造內(nèi)容,更多的是實(shí)現(xiàn)文件自動(dòng)化,這就是我們對(duì)于MariaDB所抱的期望。因此這兩者完全是不同的工具集。

除此之外,我們還需要一個(gè)良好的環(huán)境,其中每一個(gè)部分都是可替代的,要確保自己不被束縛。一旦有了束縛的存在,那么你的應(yīng)用程序就需要與靜態(tài)系統(tǒng)相結(jié)合,這會(huì)大大降低靈活性。我認(rèn)為對(duì)于數(shù)據(jù)庫(kù)來說,要注意的一點(diǎn)就是,要確保數(shù)據(jù)庫(kù)容易上手,而這恰恰意味著更多的AI技術(shù)能夠整合到數(shù)據(jù)庫(kù)中。

仍然每天堅(jiān)持寫代碼

鄒欣:在中國(guó)IT行業(yè)有這樣一種現(xiàn)象,認(rèn)為程序員過了35歲就要轉(zhuǎn)型,進(jìn)入管理層或是其他領(lǐng)域。對(duì)此你怎么看?

Monty:這在很多地方都很常見。這個(gè)現(xiàn)象的主要原因在于程序員在管理崗位上的工資要比單純做編程高。因?yàn)?strong>很少有公司會(huì)重視優(yōu)秀的程序員,這就導(dǎo)致了收入的差異。我認(rèn)為,如今程序員沒有晉升的空間。與其讓他們被迫轉(zhuǎn)型,不如建立一個(gè)能提升他們收入的新環(huán)境。要想做到這一點(diǎn),公司就得讓他們承擔(dān)更多的責(zé)任。要程序員擔(dān)任管理崗位也行,但前提是仍然要保證他們每天寫代碼的時(shí)間。畢竟好的經(jīng)理人到處都是,好的程序員卻千里挑一。

鄒欣:據(jù)我所知,你仍然每天在堅(jiān)持寫代碼,但同時(shí)也要負(fù)責(zé)MariaDB的運(yùn)營(yíng)和管理。那么,你如何平衡這兩個(gè)身份呢?

Monty:我認(rèn)為在寫代碼這方面,我還是有一點(diǎn)天分的,所以我想堅(jiān)持下去。我會(huì)雇用經(jīng)理人為我工作,這樣我就可以做我最擅長(zhǎng)的事情。我會(huì)參與代碼審查、社區(qū)運(yùn)營(yíng)以及MariaDB的相關(guān)決策。但同時(shí)我也會(huì)花很多時(shí)間維系客戶,與不同國(guó)家的開發(fā)者交流,其中有許多中國(guó)的開發(fā)者。我認(rèn)為,除了寫代碼之外,這是我做的最重要的事。總而言之,我會(huì)雇傭經(jīng)理人來做一部分管理,讓我有足夠的時(shí)間在真正重要的事情上。

鄒欣:聽聞你從20世紀(jì)80年代就開始在家辦公,如今這一辦公方式也開始流行起來,對(duì)于遠(yuǎn)程辦公你有什么看法?

Monty:事實(shí)上我認(rèn)為遠(yuǎn)程辦公是非常靈活的工作方式,自1981年開始我就在家辦公(MySQL和MariaDB團(tuán)隊(duì)都是在家辦公)。我們招人之前可能從來沒見過他們,甚至都不知道對(duì)面是個(gè)人還是團(tuán)隊(duì)。但是我們的效率一直都在線。能做到這一點(diǎn)的前提,是要對(duì)跟自己聯(lián)系密切的同事有足夠的了解。至少熟悉他們的樣貌。

我認(rèn)為對(duì)于八成的開發(fā)者而言,在家辦公是一個(gè)不錯(cuò)的選擇??赡苡幸恍〔糠珠_發(fā)者,他們的工作負(fù)擔(dān)比較重,在家提不起精神來。這就需要他們出去走走,見見朋友或是接觸新事物。我剛開始在家辦公的時(shí)候,也會(huì)擔(dān)心這樣是不是會(huì)被孤立。所以后來我會(huì)定期在家里舉行派對(duì),我也會(huì)親自下廚。我們團(tuán)隊(duì)每年也會(huì)在一起待上一段時(shí)間。

一個(gè)好的程序員能抵五個(gè)一般的程序員

鄒欣:對(duì)于你來說,在過去幾年數(shù)據(jù)庫(kù)領(lǐng)域發(fā)生了哪些大的變化?

Monty:在過去的五年或七年間,學(xué)習(xí)SQL(結(jié)構(gòu)化查詢語言)開始成為一種趨勢(shì)。但是人們發(fā)現(xiàn)SQL過于復(fù)雜,因此還需要學(xué)習(xí)其他語言。于是許多公司開始創(chuàng)新,采用NoSQL(非關(guān)系型數(shù)據(jù)庫(kù)) 進(jìn)行開發(fā)。但在過去的幾年里,人們逐漸意識(shí)到NoSQL并不是萬金油。但選擇關(guān)系型數(shù)據(jù)庫(kù)是否能夠涵蓋NoSQL提供的功能?很明顯,有的可以,有的不行。因此我認(rèn)為,在當(dāng)下的環(huán)境中,對(duì)于數(shù)據(jù)庫(kù)的要求在于要保證云端以及本地部署。

我們不能被一個(gè)數(shù)據(jù)庫(kù)束縛。云端提供的是靈活性,你能在數(shù)據(jù)庫(kù)中運(yùn)行軟件,即使是有成百上千個(gè)軟件,而且本地部署的價(jià)格更低,控制權(quán)限更高,這一點(diǎn)是云端無法提供的。但我依然認(rèn)為云端有它的優(yōu)勢(shì),我們要在兩者之間找到平衡。

鄒欣:30年前我從大學(xué)畢業(yè)時(shí),人們提到數(shù)據(jù)庫(kù)一般是指去銀行辦業(yè)務(wù)。現(xiàn)在看來,人們有了更多的選擇,我們能夠借助數(shù)據(jù)庫(kù)實(shí)現(xiàn)許多功能。但提到數(shù)據(jù)庫(kù)開發(fā)時(shí),人們往往指的是“后端”。那么,對(duì)于一個(gè)開發(fā)者或是畢業(yè)生想要進(jìn)入數(shù)據(jù)庫(kù)領(lǐng)域的人來說,你會(huì)給他們?cè)鯓拥穆殬I(yè)建議?

Monty:在我看來,從開源數(shù)據(jù)庫(kù)開始入門更簡(jiǎn)單。現(xiàn)在開源數(shù)據(jù)庫(kù)很多,如果你的確想成為專家級(jí)別的人,想要得到一份很好的工作,你可以找一個(gè)合適的數(shù)據(jù)庫(kù),并學(xué)習(xí)如何進(jìn)行優(yōu)化。但同時(shí)你也需要了解人們的需求,你可以和從事這一行的同學(xué)交流,并且學(xué)習(xí)解決數(shù)據(jù)庫(kù)中的實(shí)際問題。

鄒欣:除了多參與開源項(xiàng)目之外,對(duì)于中國(guó)開發(fā)者你還有哪些想說的?

Monty:我和來自中國(guó)的開發(fā)者有過非常多的互動(dòng),他們非常棒,在編程上表現(xiàn)得非常優(yōu)秀。不過我在感到驚喜的同時(shí),也感到非常惋惜,因?yàn)樗麄兌枷朕D(zhuǎn)型做管理。我認(rèn)為這是最大的錯(cuò)誤。他們需要讓老板給自己派更多的任務(wù),當(dāng)然也可以做管理,但前提是能讓自己寫代碼。還是那句話:找到一個(gè)好經(jīng)理很容易,但找到一個(gè)好的程序員很難。一個(gè)非常出色的程序員可以抵五個(gè)一般的程序員,關(guān)鍵是你想當(dāng)一個(gè)好的程序員還是一個(gè)平庸的經(jīng)理。對(duì)于所有中國(guó)開發(fā)者,我只想說,請(qǐng)堅(jiān)持你的工作,你已經(jīng)做得非常好了,一定不要停止寫代碼。

【參考資料】

https://zh.wikipedia.org/wiki/%E7%B1%B3%E5%8D%A1%E5%9F%83%E7%88%BE%C2%B7%E7%B6%AD%E5%BE%B7%E7%B4%90%E6%96%AF

https://blog.openocean.vc/founder-stories-a-hackers-hacker-6d5054c90564

https://huskyintelligence.com/leverage-open-source-code/

http://monty-says.blogspot.com/2009/12/help-saving-mysql.html

https://www.geeksforgeeks.org/introduction-of-mariadb/

http://www.josetteorama.com/from-mysql-to-mariadb-michael-%e2%80%9cmonty%e2%80%9d-widenius-talks-about-databases-and-his-projects/

https://dri.es/the-history-of-mysql-ab

https://mariadb.org/wp-content/uploads/2019/11/MySQL-MariaDB-story.pdf

出品 |《新程序員》編輯部

關(guān)鍵詞:

相關(guān)閱讀:
熱點(diǎn)
圖片 圖片