谁说数学不好,就不能成为编程大佬

640?wx_fmt=png

1

用自己喜欢的编程语言才叫快乐

小学六年级时,松本行弘接触了人生第一台电脑,那是他爸爸给他买的一台口袋型电脑 L-Kit16,也是他第一次知道编程这个概念。只要发出指令,计算机便能按照你的指令操作,他觉得没有比这更有意思的了。

这台电脑本来是他爸爸买来计算建筑数据的,没想到却成了他的玩具。他从小就很喜欢看书,但是因为那时他没那么多钱买书,于是,他成天泡在家附近的书店。有时候他对朋友们说:“你们可以来我家里玩。”但朋友却指着书店说:“那不是你的家吗?”

那会儿,他读了好多书,不管是科幻小说还是漫画。就因为特别喜欢文字,所以连百科全书全都要记在脑子里。用他的话说,没东西看时,就看药品说明书。

后来上了高中,他迷上了计算机,看得最多的是计算机杂志。他希望计算机能按照自己的指示来运行。 即便他对编程语言有着浓厚的兴趣,他还是不喜欢汇编语言,Basic 语言也不喜欢。

于是,创造一门编程语言的想法在他心里萌芽。秉承着想用自己喜欢的编程语言来编程的心,他开始将自己的思路写到笔记本上。据说当时他连名字都想好了,还不叫 Ruby,但是 Ruby 的种子已经悄悄地埋在了心底。

640?wx_fmt=jpeg

2

 “语言痴”松本行弘,创造 Ruby

1967 年公布的 Simula 是世界上最早的面向对象语言。2001 年,松本行弘在丹麦 JAOO 会议见到 Kristen Nygaard (Simula的创始人之一,曾获得图灵奖)。Nygaard 听说松本行弘正在创造新语言时,他说:“什么?你在设计语言?那应该是面向对象语言吧。了不起!所有的面向对象语言都像是我的孙子一样,哈哈。”

读了大学的松本行弘正一步步朝着这个目标努力。大学对于他来说充满了不可思议,因为高中时读的书的作者现在都成了他的老师,再加上图书馆有看不完的书和资料,对于买不起书的他来说,曾一度觉得自己在天堂。他还是研究室里最不听话的,他总是猫在那里设计自己的语言。

当时,是计算机的黎明期。他的爸爸反对他考信息科学学院:“什么计算机,什么编程,当个兴趣就得了。”但是他凭借对计算机极大的喜爱,也从未考虑过未来的出路,只想一心做好这件事。

但行好事,莫问前程。相信这也是松本行弘能够成功的原因吧!

他每天很努力地学习,泡在图书馆,还常常关在研究室里通宵弄电脑,到了早上回家洗一下澡,然后再到研究室去。当时是 80 年代后期,研究室里可以连上网络,他常常看 BBS 或者新闻什么的。在他看来,能接触到很多聪明的人物,是件非常有意思的事。

1990 年毕业后,他进入到了一家公司,成为了一名程序员。那时经济非常不景气,他所在的公司业务一下子少了很多,他想趁这个时候做一点自己想做的事情。于是,年少时期的梦想渐渐成形,多年蓄积的能量即刻爆发。

1995 年,他将 Ruby 公开,并获得热烈反响。

他曾说过这样一段话:“我其实是一个编程语言迷,对编程语言的痴迷程度无人能及。Ruby 是我出于兴趣钻研编程语言的最大成果,把它称为我兴趣的副产品可能更为贴切。副产品就能如此普及看起来很了不起,但与其把它全部归功于我的实力,倒不如说运气的成分更大。Ruby 已经诞生 20 多年了,如果没有这么多年来发生的各种事情与邂逅,根本不可能有今天这样的成绩。”

这两年,Ruby 不被看好,他常常会被问到 Ruby 会不会“死”这样的问题。他也依然没有放弃,他认为 Ruby 已经日趋稳定。而且 Ruby3 的性能预计会提升 3 倍。他对 Ruby 的未来有着很大的信心。他希望可以继续快乐地为这门语言工作,这个他 17 岁时在一个笔记本上写下的语言。

640?wx_fmt=jpeg

3

软件开发并不是一蹴而就的

创造一门编程语言是不是没有任何意义了?有些人觉得答案为“是”。可是事实上,松本行弘认为这个问题的答案为否。即使是现在,他仍然认为创造一门新的编程语言是有意义的。用他的话说:“如果个人开发编程语言真的没有意义,那么 Ruby,Perl,Python 和 Clojure 这些语言就不会诞生了。

他觉得创造自己喜欢的编程语言很有必要,并把这称之为程序员的终极自由。“编程语言是现成的,本来就不需要自己去设计和开发”,这也是大部人的主流想法。即使有兴趣创造,多半也会被这些心里障碍阻挡在门外吧。

“我们的目的是出于兴趣创造自己的编程语言,我不是去掌握编程语言的实现所需的所有知识。如果你认为在没有完全掌握正确的知识之前就无法着手创造编程语言,那就大错特错了,你的热情会被逐渐消磨殆尽。成就一番伟大的事业首先需要的是热情,不能保持热情是不行的,一旦有了创造编程语言的热情,就要尽快开始,以后再根据需要慢慢掌握所需要的知识即可。” 

松本行弘认为,没有必要把这件事想得很难。而这段话也不是成功人士回头给我们喂的一碗好汤,因为松本行弘也是一个普通人,一个数学并不好的程序员。据说,当年数学考试 10 分满分,而他只拿到了 1 分。你还会觉得这些事都是神童的专利吗?

640?wx_fmt=png

4

创造支持并行编程的新语言——Streem

随着多核 CPU 的普及,shell 脚本的(一部分)价值也在逐渐被人们重新认识。shell 脚本的基本计算模型是基于管道来连接多个进程。那如果操作系统支持多核的话,则各进程会被分配到不同的 CPU 上去执行,这样就可以充分发挥多核 CPU 的优势。同时这也证明了一点,那就是只要选择合适的计算模型,就能非常容易地实现并发执行。

但是 shell 脚本也具有着它的局限性。

比如,创建 OS 进程的成本非常高,如果需要使用 shell 脚本创建大量轻量进程的话,那么在性能上将会非常不利。

另外一种成本是由于连接进程的管道只能发送字节数组的数据,所以发送方需要先将数据转换为字节数组,接收方则需要将字节数组还原。比如,很多时候我们都会使用以逗号分隔的CSV(Comma Separated Values)格式或表示 JavaScript 对象的 JSON(JavaScript Object Notation)格式,将数据从这些格式转换为字节数组,或者对字节数组进行解析并还原,这样做的成本是非常高的。

在进行大数据处理、高性能计算等时,我们多会选择使用多核 CPU。因此,数据转换或创建进程所花费的成本是不可忽视的。这可以说是 shell 脚本的一个缺陷。

更进一步来说,构成管道的进程(process)所执行的命令(command),可能并不是由同一个开发者所开发的,这些命令的参数设置方法等往往并不统一,因此要想熟练使用这些命令,难度会有所增加。

这样说来,如果能将 shell 脚本的优点,和通用编程语言的优点结合起来的话,应该就可以创造出一门非常强大的语言。

那么这门语言都需要满足哪些必要条件?

第 1 个条件是可以进行轻量的并发。由于不管是 OS 级别的进程还是线程,创建成本都很高,因此我们应该尽量避免去使用它们。比较现实的方式是在一个 OS 的进程中,预先生成与 CPU 的核数(+α)相同个数的线程,让它们轮番去执行各种操作请求。采用这种实现方式的典型语言包括 Erlang 和 Go。我们将相当于 Erlang 中的“process”、Go 中的“goroutine”的概念称为“任务”(task)。

第 2 个条件就是解决并发执行时的竞争条件。具体点就是“状态”的排除。也就是说,如果变量或者属性的值发生变化,就会产生一个新的状态,这也带来了因执行时机(timing)不同而产生问题的危险。所以需要将所有数据都设为不可变(immutable),这样就可以避免因执行时机而出现的缺陷。

第 3 个条件是计算模型。线程模型虽然应用领域非常广泛,但自由程度也很高,因此程序可能会变得难以掌控。于是我们可以参考 shell 的执行模型,引入一个抽象度非常高的并发计算模型。抽象度高了,反过来表现的自由度就会降低,所以在编写代码的时候就要下一番功夫。而另一方面,我们的程序也会变得非常容易调试。

在实际的业务系统中,松本行弘听说有人采用 shell 脚本来进行处理。虽说是用 shell 脚本进行信息的筛选和加工,但是和传统的软件开发模式相比,它有着成本低、灵活性高等优点。

于是,他准备设计一门满足上述条件的新语言,用于支持并行编程。由于这门语言以流(Stream)为计算模型的语言,所以他将它命名为“Streem”。

虽然到目前为止,使用 Streem 编写的程序还比较少。但是未来的事谁又说得准呢?也许某一天使用的是你创造的编程语言呢?相信经过松本行弘的努力和完善,说不定下一个新黑马语言即将诞生。

640?wx_fmt=png

揭秘大师级程序员的思维方式

640?wx_fmt=png

作者:[日] 松本行弘 

译者:郑明智

Ruby 之父全新力作,学习大师级程序员的思维方式。本书全面公开语言设计的秘诀,一边教你设计编程语言,一边帮你解析隐藏在各编程语言背后的设计缘由。最重要的是,还能听故事:语言设计与实现过程中的纠结与取舍,不省略各种试错细节,有趣又有料!

本月 25 日,图灵会对 Matz 进行独家专访(话说这已经是图灵第 4 次访谈 Matz 了)。你有什么问题,想让 Matz 亲自为你解惑?

留言区留下你最想问的问题,我们会选出若干问题,带去现场。被选中的提问者会获得 Ruby 大会门票一张或者 Matz 亲笔签名图书一本。

活动截止2019.8.26。门票数量有限,快来提问吧~

推荐阅读:

同是程序员,为什么别人可以事半功倍?

7岁自学微积分,31岁获得菲尔兹奖,智商230,也曾因为玩游戏耽误学业!

8月书讯 | 像大师级程序员一样思考

☟☟☟  Matz 演讲给你留位哦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值