对话MySQL之父:代码一次性完成才是优秀程序员

【CSDN 编者按】MySQL之父Monty有着四十多年的编程经验,从儿时的兴趣到长大后的深耕,他在编程领域不断钻研,最终成为编程大师。《新程序员004》带你走进Monty的程序人生,谈谈他在编程方面的最新感悟以及对未来的预测。作者 | 郭露    责编 | 徐威龙

出品 | 《新程序员》编辑部如今,我们正处于数据爆炸的时代,软件崛起的背后是数据的支持。而随着开源技术的发展,越来越多的数据库选择创建开源社区,让更多开发者参与到数据库的建设中来。

在开源数据库领域中,Michael "Monty" Widenius(通常称为Monty)绝对是不得不提的代表人物。有着四十多年编程经验的Monty是MySQL和MariaDB的作者,也是开源软件运动的著名倡导者,即便是现在他也在坚持写代码。作为影响了几代技术人的数据库,MySQL所取得的成就无需多言。而最初作为MySQL分支立项的MariaDB也在迅速成长,同样在数据库中赢得了一席之地。

Monty近照(图源自Wiki)

作为在技术届游历半生的资深"程序员",Monty对编程的理解也有许多独到之处,他认为只有学习编程20年以上,才能像读懂音乐一样,看出编程之美。除此之外,他还表示:"写代码时要尽量将代码一次性写成,而不是写完后再没完没了的修改。"只有做到这一点,才能称得上是一名优秀的程序员。而这也是他长久以来所遵循的"编程法则"。近期,《新程序员》有机会邀请Monty分享他的程序人生,谈谈他对于技术的感悟,以及对于数据库发展的看法与心得。

订阅《新程序员001-004》

"我在编程方面有一定的天赋"

1962年,Monty出生在芬兰首都赫尔辛基,小时候的他便对计算机有着浓厚的兴趣。1978年,年仅16岁的Monty用他一整个暑假打工攒的钱买了人生中的第一台电脑,并且用BASIC语言写下了第一行代码REM,从此以后他便与编程结下了不解之缘。三年后,Monty被北欧著名高校赫尔辛基理工大学录取,但由于自己的学习理念与学校不同,他感到在学校学不到什么东西,因此没过多久就辍学了。1981年。离开了校园的Monty开始在荷兰的一家叫做Tapio Laakso Oy的公司当程序员。在近十年之后,34岁的Monty开发出了历史上最流行的开源数据库之一--MySQL。

戳↑↑查看采访视频

Monty能开发出MySQL并非偶然,他在编程上投入了大量的时间。根据早期的资料显示,就连别人去参加聚会时,他也在家里写代码。在他看来,好的代码不需要一次又一次地重写,而是在开始写之前,就抱有一次写成的心态。正因为如此,直到多年后的今天,Monty仍然直言"自己在编程方面具有一定的天赋"。

除了Monty,MySQL的诞生还离不开David Axmark和Allan Larsson。早在1980年,17岁的Monty打算将自己的计算机内存从8KB提高到16KB。机缘巧合之下,他去往瑞典Allan Larsson的电脑店寻求帮助,在那里认识了同样也是写代码的David Axmark,之后三人就成为了亲密的合作伙伴,经常一起写代码,解决编程过程中遇到的问题。1995年,三人创立了MySQL AB,MySQL AB就是MySQL的雏形。这其中Monty负责了大部分的开发工作。最终,在1996年10月,MySQL首个版本发布,从此掀开了数据库历史的重要一章。

到了1999年,MySQL的迅速发展已经引起了许多人的注意, Oracle表示要以5000万美元的价格收购MySQL。然而Monty三人并不想止步于此,也不想失去对MySQL的控制,因此拒绝了这次收购。

随着时间的推移,MySQL迅速发展, 但同时市场上也出现了包括PostgreSQL在内的竞争对手数据库。为了在竞争中脱颖而出,MySQL开始接受融资,以获得更大的发展机会。到了2003年,MySQL实现了高达400万的安装次数,较两年前翻了一番,成为了当时全世界最受欢迎的开源数据库。2008年1月16日,Sun Microsystems以高达10亿美元的价格收购MySQL(然而次年Sun又被Oracle收购)。当时Monty担心MySQL可能会受到Oracle的控制而变得商业化,并且如果Oracle一家独大的话,可能会引发数据库领域的不良竞争。于是他发起了一场拯救MySQL的请愿活动,并在MySQL闭源前将其分化,以其小女儿Maria的名字命名创建了MariaDB。

设计MariaDB的初衷(图源自MariaDB官网)

MariaDB开源数据库可以看做是MySQL的一个分支,主要由开源社区维护,目的是要完全兼容MySQL,甚至包括API和命令行。MariDB推出后,不少MySQL的员工都转而投向MariaDB,甚至是原先使用MySQL的各大公司也将数据库迁移到MariaDB上,其中就包括谷歌和维基百科。Monty表示:"与MySQL相比,MariaDB更加成熟,拥有更大的研发优势,并且在安全性修复方面也更加出色。"直到现在,Monty依旧亲自参与MariaDB的开发维护,可以说他的工作重心都在MariaDB上。

Monty的小女儿Maria(图源自MariaDB官网)

MariaDB,坚持开源的背后

邹欣:你在创建MariaDB时,曾提到要把它打造成第二个MySQL,并且确保它是开源的。那么对于数据库而言,为什么开源这么重要呢?

Monty:对于任何大型项目来说,开源都是非常重要的。既然要和巨头竞争,你就要有和他们一样的工具。在我看来,开源很适合用于软件开发,尤其是当公司规模还不大的时候。这个时候你很难兼顾公司和用户的需求,因此需要听取别人的想法。而开源就意味着可以获得社区的帮助,能够了解其他人的观点。有了开源,你可以开发出更好的产品,同时产品也能够获得更大的影响力。

邹欣:不过开源的一大弊端就是声音太多,需求不一,这种情况下该如何保证数据库能满足大多数人的需求呢?

Monty:要解决这个问题,就需要确保数据库足够灵活,这样才能满足大多数人的需求。在这一点上,MySQL和MariaDB的做法是建立各种性能不一的存储引擎,人们可以针对具体需求开发自己的存储引擎 。

事实上,对于那些有需求的人来说,MariaDB依旧是一个优秀的工具。而对于要求数据库体量较小且运行较快的人来说,MariaDB同样是一个不错的选择。在开发MariaDB时,我们考虑到了各种可能性,使它能够保持良好的性能。

邹欣:AI技术的发展让人们对数据库的期待发生了转变,今天数据库是否能够与AI技术结合,从而拥有数据决策能力?

Monty:对于数据库来说,最重要的是要处理AI需要的不同结构。因此我们添加了对JSON的支持,用于在MariaDB中支持动态列。这样人们就可以储存并检索数据,同时保留自己想要的格式。通常AI并不是要创造内容,更多的是实现文件自动化,这就是我们对于MariaDB所抱的期望。因此这两者完全是不同的工具集。

除此之外,我们还需要一个良好的环境,其中每一个部分都是可替代的,要确保自己不被束缚。一旦有了束缚的存在,那么你的应用程序就需要与静态系统相结合,这会大大降低灵活性。我认为对于数据库来说,要注意的一点就是,要确保数据库容易上手,而这恰恰意味着更多的AI技术能够整合到数据库中。

仍然每天坚持写代码

邹欣:在中国IT行业有这样一种现象,认为程序员过了35岁就要转型,进入管理层或是其他领域。对此你怎么看?

Monty:这在很多地方都很常见。这个现象的主要原因在于程序员在管理岗位上的工资要比单纯做编程高。因为很少有公司会重视优秀的程序员,这就导致了收入的差异。我认为,如今程序员没有晋升的空间。与其让他们被迫转型,不如建立一个能提升他们收入的新环境。要想做到这一点,公司就得让他们承担更多的责任。要程序员担任管理岗位也行,但前提是仍然要保证他们每天写代码的时间。毕竟好的经理人到处都是,好的程序员却千里挑一。

邹欣:据我所知,你仍然每天在坚持写代码,但同时也要负责MariaDB的运营和管理。那么,你如何平衡这两个身份呢?

Monty:我认为在写代码这方面,我还是有一点天分的,所以我想坚持下去。我会雇用经理人为我工作,这样我就可以做我最擅长的事情。我会参与代码审查、社区运营以及MariaDB的相关决策。但同时我也会花很多时间维系客户,与不同国家的开发者交流,其中有许多中国的开发者。我认为,除了写代码之外,这是我做的最重要的事。总而言之,我会雇佣经理人来做一部分管理,让我有足够的时间在真正重要的事情上。

邹欣:听闻你从20世纪80年代就开始在家办公,如今这一办公方式也开始流行起来,对于远程办公你有什么看法?

Monty:事实上我认为远程办公是非常灵活的工作方式,自1981年开始我就在家办公(MySQL和MariaDB团队都是在家办公)。我们招人之前可能从来没见过他们,甚至都不知道对面是个人还是团队。但是我们的效率一直都在线。能做到这一点的前提,是要对跟自己联系密切的同事有足够的了解。至少熟悉他们的样貌。

我认为对于八成的开发者而言,在家办公是一个不错的选择。可能有一小部分开发者,他们的工作负担比较重,在家提不起精神来。这就需要他们出去走走,见见朋友或是接触新事物。我刚开始在家办公的时候,也会担心这样是不是会被孤立。所以后来我会定期在家里举行派对,我也会亲自下厨。我们团队每年也会在一起待上一段时间。

一个好的程序员能抵五个一般的程序员

邹欣:对于你来说,在过去几年数据库领域发生了哪些大的变化?Monty:在过去的五年或七年间,学习SQL(结构化查询语言)开始成为一种趋势。但是人们发现SQL过于复杂,因此还需要学习其他语言。于是许多公司开始创新,采用NoSQL(非关系型数据库) 进行开发。但在过去的几年里,人们逐渐意识到NoSQL并不是万金油。但选择关系型数据库是否能够涵盖NoSQL提供的功能?很明显,有的可以 ,有的不行。因此我认为,在当下的环境中,对于数据库的要求在于要保证云端以及本地部署。我们不能被一个数据库束缚。云端提供的是灵活性,你能在数据库中运行软件,即使是有成百上千个软件,而且本地部署的价格更低,控制权限更高,这一点是云端无法提供的。但我依然认为云端有它的优势,我们要在两者之间找到平衡。邹欣:30年前我从大学毕业时,人们提到数据库一般是指去银行办业务。现在看来,人们有了更多的选择,我们能够借助数据库实现许多功能。但提到数据库开发时,人们往往指的是"后端"。那么,对于一个开发者或是毕业生想要进入数据库领域的人来说,你会给他们怎样的职业建议?Monty:在我看来,从开源数据库开始入门更简单。现在开源数据库很多,如果你的确想成为专家级别的人,想要得到一份很好的工作,你可以找一个合适的数据库,并学习如何进行优化。但同时你也需要了解人们的需求,你可以和从事这一行的同学交流,并且学习解决数据库中的实际问题。邹欣:除了多参与开源项目之外,对于中国开发者你还有哪些想说的?Monty:我和来自中国的开发者有过非常多的互动,他们非常棒,在编程上表现得非常优秀。不过我在感到惊喜的同时,也感到非常惋惜,因为他们都想转型做管理。我认为这是最大的错误。他们需要让老板给自己派更多的任务,当然也可以做管理,但前提是能让自己写代码。还是那句话:找到一个好经理很容易,但找到一个好的程序员很难。一个非常出色的程序员可以抵五个一般的程序员,关键是你想当一个好的程序员还是一个平庸的经理。对于所有中国开发者,我只想说,请坚持你的工作,你已经做得非常好了,一定不要停止写代码。【参考资料】

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

END

《新程序员001-004》全面上市,对话世界级大师,报道中国IT行业创新创造

成就一亿技术人

「点点赞赏,手留余香」

赞赏

  • 0人赞过
0
0
0
评论 0 请文明上网,理性发言

相关文章

  • 一背景 在MySQL8.0之前,Server层和存储引擎(比如InnoDB)会各自保留一份元数据(schemaname,tabledefinition等),不仅在信息存储上有着重复冗余,而且可能存在两者之间存储的元数据不同步的现象。不同存储引擎之间(比如InnoDB和MyISAM)有着不同的元数据存储形式和位置(.F
    骏马_大大XT温v 8 0 0 条评论
  • 在说起MySQL,我想每一个开发者都不会陌生,作为一个超80%开发者都在使用的数据库,几乎所有一线大厂,都在用!01多数人只掌握了一些皮毛但是在我使用MySQL将近20年的过程中,我经常能看到很多程序员和我当年一样,有很多共性问题,比如: 我最开始工作面试的时候,天真的以为会写"增删改查"、做表关联就足够了,可悲催的是
    一号特工www 4 1 0 条评论
  • MySQL作为主流的数据库,是各大厂面试官百问不厌的知识点,但是需要了解到什么程度呢?仅仅停留在建库、创表、增删查改等基本操作的水平可不够。在面试后端开发的时候,一连几个问题,简直会被问到一脸懵。。 MySQL语句怎么优化? 分库,分表都适合哪些场景? 讲讲InnoDB如何使用B+树存储的? 一般来说,准备MySQL面
    qwv729 3 3 0 条评论
  • 作者|不剪发的Tony老师责编|欧阳姝黎 出品|CSDN博客 数据库函数是一种具有某种功能的模块,可以接收零个或多个输入值,并且返回一个输出值。MySQL为我们提供了许多用于处理和分析数据的系统函数,本文给大家介绍10个常用的字符串函数,以及相关的其他函数。 CONCAT() CONCAT(str1,str2,-))
    袭ZcPy 8 2 0 条评论
  • 首先问大家一个问题:MySQL当中的"My"是什么意思? 估计大部分人会说:My的意思不就是"我的"吗?MySQL,就是"我的"SQL。 这样想的话,就是大错特错了。 MySQL的发明者名叫Michael"Monty"Widenius,MySQL是以他女儿的名字"My"来命名的。对这位发明者来说,MySQL数据库就仿佛
    manhua猫咪 4 4 0 条评论
  • 应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库。 操作系统,会有缓冲池(bufferpool)机制,避免每次访问磁盘,以加速数据的访问。 MySQL作为一个存储系统,同样具有缓冲池(bufferpool)机制,以避免每次查询数据都进行磁盘IO。 今天,和大家聊一
    mw1yf5 4 3 0 条评论
  • 来源:https://jeames.blog.csdn.net/?type=blog 前言MySQL在面试中经常被问到,本文总结了面试中的经典问题。 1.数据库三大范式是什么?第一范式:每个列都不可以再拆分。 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。 第三范式:在第二范式的基础
    情商Uk13hf7 8 1 0 条评论
  • 来源|程序员大彬 作者|程序员大彬今天给大家分享MySQL常考的面试题,看看你们能答对多少 本期MySQL面试题的目录如下: 事务的四大特性?事务隔离级别有哪些?索引什么是索引?索引的优缺点?索引的作用?什么情况下需要建索引?什么情况下不建索引?索引的数据结构Hash索引和B+树索引的区别?为什么B+树比B树更适合实现
    勿子糖 6 8 0 条评论
  • 来源|捡田螺的小男孩作者|捡田螺的小男孩每一个好习惯都是一笔财富,本文分SQL后悔药、SQL性能优化、SQL规范优雅三个方向,分享写SQL的21个好习惯。 1.写完SQL先explain查看执行计划。【SQL性能优化】日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索
    阿超的小红帽 6 3 0 条评论
  • 又到了一年的金三银四,估计不少人都在暗搓搓地想各种请假理由,准备出去面试。 就在前两天,我跟一个面试官聊,发现一个普遍想象,不少候选人,对数据库的认知,还处在比较基础的阶段,以为会写"增删改查"、做表关联就足够了,那些工作中经常出现的问题,却支支吾吾答不上来,比如: count(*)慢该如何解决? 对于千万级的大表,M
    小薇焚 4 0 0 条评论