专访XRuby贡献者郑晔:软件开发不是自娱自乐(上)

2023-10-26

郑晔,是一个热爱编程的程序员。(网络ID:dreamhead)

也许有人会说,我还是一个超热爱编程的程序员呢。那么我想你一定不知道,郑晔是第一个加入到XRuby这个开源项目的,XRuby今天优异的成绩与郑晔有着不可分割的联系。

在郑晔的blog中有一篇《XRuby发布了!》的文章,其中的一段记述了郑晔加入XRuby项目的那段发展历史。“2005年中期,yawl一个人开始 了XRuby的开发。项目的最初,开发的只是一个Ruby的语法解析器,所以,那时候的名字叫做RubyFront。一个人的努力总是有限的,yawl在 孤独前行了很长一段时间之后,决定把这个项目开源,吸引更多人一起努力。2006年9月8日,yawl将代码移至Google Code。此时的项目已经超出了一个Ruby语法解析器的范畴,于是,项目名也由RubyFront变成了XRuby。至此,XRuby正式诞生,也开始 向一个真正的Ruby编译器迈进。我就是这个时候加入的。”

谈到这一段历史,郑晔说“加入XRuby时,我刚好在业余时间完成了《Ruby Hacking Guide》几个章节的翻译,对Ruby的内部实现有了一些了解。看到XRuby这个项目时,我感到特别兴奋:自己熟悉的Java、自己喜欢的Ruby、 自己想要了解编译器技术。所以,我毫不犹豫的加入了这个项目。”

现在谈起XRuby,郑晔仍然是一副惊艳的模样。“这些年的工作中,我见过很多的开源项目,只有XRuby是一个让我真正动心,并投入大量时间参与其中的项目。”

“其实抛开个人喜好,我也依然觉得XRuby是一个非常不错的项目。首先,Ruby on Rails已经让Ruby赢得了更多的关注,只要有足够的关注,一定就会有不错的发展,现在诸多公司的动作也再次证实了大家对Ruby的看好。

再者,整合Ruby和Java是一个非常棒的主意,因为程序设计语言的发展历程中,优秀的后来者都提供了比较好的方式来利用原有者的优势。而不是完全的推翻重来,比如C/C++提供了整合汇编的方式,Java提供了JNI的方式去整合C/C++的资源等。

Ruby已经有了整合C的方式,再有一个整合Java的方式就更完美了。当然,这样就有可能会混淆了XRuby和JRuby,但事实是真正让XRuby具 有优势的是它的编译方式。谈到编译和解释,人们通常会想到性能上的差异,也就是说采用编译的方式会让程序跑得更快。JRuby为人诟病大多也是因为性能的 原因。

面对很多新技术,人们首先会质疑的就是性能,当年的C/C++和Java都曾经历过这样的过程,但是只要性能差异在一个可接受的范围之内,就可以消除人们 对于性能的质疑。编译会成什么样子呢?这是我感兴趣的,也是XRuby主要的价值所在,事实证明,XRuby可以让Ruby代码在JVM平台上跑得像C Ruby一样快,甚至更快。

当然,C Ruby还有很多可以提升的空间。比起当时的JRuby,这就是一个巨大的进步。所以,我相信,作为第一个做JVM上Ruby编译器的项目,XRuby这个项目对整个软件开发社区的发展是有好处的,这也是我愿意参与其中的重要原因。

很多人对于参与开源项目,尤其是像XRuby这样的编译器项目,第一个反应是我不行,因为我不会这个,不懂那个。实事求是的说,参与XRuby之初,我也只是对语言的实现有兴趣,对编译器的了解也仅限于大学所学过的那点编译原理的知识,没有什么实战的经验。

但我还是加入到XRuby中,因为我相信我可以在这个过程中学会这个项目所需要的知识。直到现在,我也不敢说自己精通编译器。随着项目发展,我不断补充着 自己的知识,对编译器实现的理解也是越来越深:从最开始的只是贡献一些builtin的代码,到后来重写了这个runtime的实现,再到后来修改编译器 的实现。希望我走过的这条路可以让那些希望进入XRuby项目或是其他开源项目的人借鉴。”

不仅郑晔的XRuby参与之路可以让我们很多有志之士得以借鉴,他的程序员之路也是一段更值得我们学习的经验。郑晔将自己的程序员之路分为了三个阶段,第 一阶段是大学毕业前的初学阶段:“大学之前,我对计算机的了解几乎是零。经过四年的学习,我找到了自己真正喜欢的事情:编程,因为用程序解决问题让我很有 成就感。于是毕业的时候,我放弃了继续读书的想法,我知道我需要的是更多的实践。”

第二阶段是大学毕业后的前三年,实践阶段:“投身到实际的项目中,我对软件开发有了真实的体验。起步的时候,我遇到了几个良师益友,让我走上我认为的正确 道路。我曾做过一个长达两年的项目,这让我对软件开发的生命周期有了一个相对完整的认识,个人能力也在这个过程中得到了极大的提升:从最开始的负责某个模 块的编写,到后来负责整个系统的设计,直到最后基于此设计出一个框架,拿了公司Java大赛的冠军。经过这段时间的实践,我逐渐开始对软件开发有了一些自 己的看法,也终于可以写出自己满意的代码。此外,我的blog之路也始于这段时间,并一直坚持下来,不断进行自我总结的同时,也结交了许多朋友。”

随后两年时间为第三阶段提高阶段:“我在公司内部做了一次调转,工作内容的转换,让我有机会接触到更多的东西:从图像识别到并行计算,再到多核程序优化, 我的技术视野不断开阔,同时,利用业余时间完善着自己的知识体系,将原本零散的知识串在了一起。实际上,我认为自己这段时间做得并不出色,不过,恰恰是这 段时间,我开始反思一些东西,逐渐的掌握了一些做事的基本原则,懂得了踏踏实实做事,也不忘抬头看路的道理。也正是在这个阶段,我接触到了XRuby,找 到了自己的乐趣所在。”

郑晔希望自己在加入ThoughtWorks之后,进入到自己程序员生涯的第四个阶段,贡献阶段,用自己所学为别人带来更大的价值。软件开发不应该仅仅是自娱自乐,更应该是做一些真正对别人有价值的事情。(未完待续)
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

专访XRuby贡献者郑晔:软件开发不是自娱自乐(上) 的相关文章

随机推荐

  • 套圈·分治

    套圈 题目信息 输入 测试样例 解答 想法 题目信息 Have you ever played quoit in a playground Quoit is a game in which flat rings are pitched at
  • 闭环步进与伺服电机差异

    当给步进电机配备编码器闭环控制后 从广义上来看 闭环步进电机和伺服电机两者是没有什么大的区别 但是 要详细区分闭环步进电机和伺服电机的不同之处 你需要先了解一下伺服电机和步进电机的差异 闭环步进电机是在步进电机上加装了高精度的编码器 用伺服
  • 理解扩散模型:Diffusion Models & DDPM

    引言 在前面的博客中 我们讨论了生成模型VAE和GAN 近年来 新的生成模型 扩散模型受到越来越多的关注 因此值得好好去研究一番 扩散模型 Diffusion Models 最早由 2 于2015年提出 但直到2020年论文 3 发表之后才
  • 不断发展中的自然语言处理技术,会在未来消灭“笔”和“键盘”吗?

    花满楼 发布于2014 07 20 23 11 00 目前 Siri 和 Google Now 的语音识别技术虽然还不完善 但在未来却很可能威胁到文字的地位 我们手写或者打字 在当下已经成为了无比繁重的劳动 不断的输入各种文字信息 在网页上
  • 快手20230807提前批一面

    Q and A 面试官 你是专硕还是学硕 能不能让实习 研究方向 面试官 项目基于什么背景做的 xxx 面试官 介绍一下框架 xxxx 面试官 里面中用了什么技术 首先的话 服务层使用了springboot 并且使用了mp 持久化使用了my
  • angular7主题样式在线切换

    参考ng alain和delon 思路就是动态加载css文件 代码实现 写两套less文件 分别为light less和dark less 用相关插件将less文件转为一个js对象 less vars to js 插件 function g
  • Road Construction 【POJ - 3352】【Tarjan边双连通】

    题目链接 题意 给一个无向连通图 至少添加几条边使得去掉图中任意一条边不改变图的连通性 即使得它变为边双连通图 思路 就是去求一个缩点之后求度为1的点的个数 然后用 ans 1 2就可以得到最后的答案了 include
  • 计算机图像显示原理与BMP图像文件格式

    本篇文章详细讲述图像文件 里面有一些阐述为个人理解 如有不对的地方欢迎指正 后续会修正补全 计算机图像显示原理与BMP图像的文件格式 一 计算机图像显示原理简述 1 计算机图像分类 2 显示 3 彩色图转灰白图原理 二 BMP图像 1 BM
  • LeetCode题目笔记——面试题 02.05. 链表求和

    文章目录 题目描述 题目难度 中等 方法一 模拟 代码 C 代码 Python 方法二 递归 代码 C 进阶 借用栈或者先反转原链表 总结 题目描述 给定两个用链表表示的整数 每个节点包含一个数位 这些数位是反向存放的 也就是个位排在链表首
  • C语言用一种比较特别的方法打印金字塔

    本方法的思想是 先打印最左边的空格部分 然后再打印金字塔 打印金字塔方法是 把 和空格都考虑进去 然后再逐行进行打印每行 每行中奇数位打印 偶数位打印空格 include
  • ubuntu18.04 littlevgl运行环境搭建

    1 下载代码 git clone https gitclone com github com littlevgl pc simulator git cd pc simulator git submodule update init 2 编译
  • Linux常用技巧

    1 cd命令 用于切换当前目录 它的参数是要切换到的目录的路径 可以是绝对路径 也可以是相对路径 cd user1 进入user1用户的主目录 cd 返回上次所在的目录 2 pwd命令 显示工作路径 3 ls命令 查看文件与目录的命令 li
  • ChatGLM搭建记录

    ChatGLM 一 基本流程 0 学习初衷 1 ChatGLM简介 github地址 https github com THUDM ChatGLM 6B ChatGLM 6B 是一个开源的 支持中英双语的对话语言模型 基于 General
  • Java 多线程练习7:模拟网络购票

    需求 1 package GouPiao 2 3 4 模拟网络延时线程不安全 5 6 public class Site implements Runnable 7 private int count 10 记录剩余票数 8 private
  • 使用动软.net代码生成器生成数据库文档

    首先 进入动软 net代码生成器主界面 选择服务器 右击 选择 连接服务器 按照弹出的界面 操作 就可以将需要生成数据库文档的相关服务器添加进来 然后 选中服务器 选择工具栏中的 生成数据库文档 按钮 在弹出的 生成数据库文档 窗口中 依次
  • Blender一步一步用灰度图生成3D模型用于Gazebo/gzweb

    我们经常能在SDF格式文件中见到 dae stl模型文件 比如如下代码
  • 地址总线与数据总线

    CPU通过地址总线寻址 然后通过数据总线与外部设备互换信息 地址总线 地址总线的位数决定CPU寻址范围 若CPU的地址总线宽度是32位 那么CPU的寻址范围是4G 所以最多支持4G内存 数据总线 数据总线的位数决定CPU单次通信能交换的信息
  • C++编程题

    1 计算字符串最后一个单词的长度 单词以空格隔开 字符串长度小于5000 注 字符串末尾不以空格为结尾 贴代码 include
  • 虚拟机扩容

    文章目录 虚拟机扩容 扩容背景 软件版本 操作步骤 1 VM上修改磁盘信息 2 在系统中挂载磁盘 1 使用命令查看磁盘状态 2 通过命令查看到新磁盘的分区 3 然后对新加的磁盘进行分区操作 4 重启虚拟机 5 再次用以下命令查看到磁盘当前情
  • 专访XRuby贡献者郑晔:软件开发不是自娱自乐(上)

    郑晔 是一个热爱编程的程序员 网络ID dreamhead 也许有人会说 我还是一个超热爱编程的程序员呢 那么我想你一定不知道 郑晔是第一个加入到XRuby这个开源项目的 XRuby今天优异的成绩与郑晔有着不可分割的联系 在郑晔的blog中