Uploaded avatar of iHiD

专访 Erik Schierboom

@iHiD
7年多前

这是一篇对 Erik Schierboom 的采访,他与 Jeremy Walker 一起聊了函数式编程、维护 Exercism 轨道,以及即将推出的 Exercism 解答静态分析。

嗨,Erik。感谢你成为第一期 Exercism 贡献者聚焦的主角!我们想重点介绍你的工作,因为你似乎参与了 Exercism 的方方面面,而且从贯穿整个项目的工作中积累了不少很棒的见解!

先问点背景吧,你最初是怎么加入 Exercism 的?

2014 年,我上过一门以 Scala 为语言的函数式编程课程。学完之后,我到处找资源想进一步提升 Scala 水平,就这样发现了 Exercism。没过多久我就迷上了它,也开始做 Exercism 上的其他语言轨道。别人在我解答下留的评论让我获益良多,于是我也开始在 C# 轨道上给别人的解答写评论。后来有人邀请我担任 C# 轨道的维护者,我欣然接受了。五年之后,我成了 C# 和 F# 轨道的导师、C#、F# 和 Scala 轨道的维护者,还参与跨轨道题目规范的工作。

不错。看来你很早就接触 Exercism 了。可能有人还不太了解,能请你解释一下 Exercism 维护者意味着什么吗?

当然。抽象地说,Exercism 维护者要为一个轨道的“健康”负责。具体做起来,事情可多了,比如实现新练习、更新现有练习,或者审阅其他维护者提交的拉取请求。另一个重要方面是把轨道里的练习排好顺序,确保学员获得最好的学习体验。注意,做维护者并 不 意味着必须参与上面提到的所有事情;只专注于一两件事也完全没问题。

谢谢!那么,除了专注于 C#、F# 和 Scala,你几乎做完了 Exercism 上的每一个语言轨道。从学习者的角度看,你有特别喜欢的吗?

虽然我做的每个轨道都让我学到很多,但我最喜欢的还是 Haskell 轨道。它不仅是一门很棒的语言,有很多有趣的概念,导师的水平也令人惊叹。其他喜欢的还有 Kotlin 和 F# 轨道,Kotlin 和 F# 设计得极为出色、非常务实,我很喜欢用它们编程。

是啊,我听到很多关于 Haskell 导师的好评!我想,做完这么多轨道一定让你对编程有了大量有趣的洞见。有没有什么东西是这段经历特别教给你的?

哦,当然,太多了!接触各种各样的语言,会让人看到解决问题的许多不同方式。这些不同的方式都在某种程度上影响了我的编码风格,不过影响我最大的大概还是函数式语言。现在只要有机会,我就会用函数式的概念,哪怕是在非函数式语言里(这些语言也正慢慢融入函数式特性)。

我还发现,虽然每门语言都不同,但很多语言其实相当相似。所以,一旦你掌握了几门语言,再学新语言就会容易得多。比如,会 Haskell 的话,学 F# 或 Scala 可能很快就能上手。因此,学新语言对职业发展也有好处,你会更容易在不同语言之间切换。

最后,我发现学习一门语言时有导师指导,会让整个过程愉快得多、也高效得多。

我也有同感。向别人学习能带来巨大的放大效应!从实际角度看,你是怎么处理这么多不同语言的环境搭建的?我一想到要学用新的 IDE 就有点发怵。你在做这些语言时,是一直用自己熟悉的编辑器,还是会换来换去,好获得更地道的体验?

对某些语言来说,以前搭一套新的开发环境挺麻烦,但现在大多数语言的搭建都相当简单。然后我会找一款能给这门语言最好体验的 IDE。因为我有时用 Windows、有时用 Mac OS,所以 IDE 还得跨平台。一款很棒的跨平台 IDE 就是 Visual Studio Code,我用它来做 Haskell、JavaScript、TypeScript、Elm 和 Elixir 轨道。其他轨道我用 JetBrains IDE:C# 和 F# 用 Rider,Java、Scala 和 Kotlin 用 IntelliJ IDEA,最后 Ruby 用 RubyMine(注意:这些也都是跨平台的 IDE)。如你所见,为了每门语言都能有最好的体验,我会用好几个编辑器(不过 JetBrains 的 IDE 之间显然很像)。

实用建议:如果你是某个开源项目的核心贡献者,JetBrains 允许你申请免费的开源许可证!

太有用了。谢谢!那么,你是 C#、F# 和 Scala 的维护者。这几个语言特别吸引你的是什么?

2002 年 C# 一发布,就立刻成了我最喜欢的语言。它设计精良、优雅,工具和文档都很出色。这门语言演进得也很快,总是有新东西可学!最后一个优点是,它运行在优秀的 .NET (Core) 框架上。

F# 也是一见钟情。它语法优雅,又有一整套丰富的(函数式)语言特性,我发现用更少的代码就能做更多的事,尤其是在做领域建模的时候。它也是一门非常务实的语言,具备面向对象的特性,而且能和现有的 .NET 代码很好地互操作(它和 C# 运行在同一个 .NET (Core) 框架上)。它的另一个优势是工具,在函数式语言里算是数一数二的。额外加分的是,它还有我最喜欢的语言入门介绍之一,就在 fsharpforfunandprofit 这个网站上。

Scala 是带我走进函数式编程的语言,因此它在我心里有着特殊的位置。和 F# 一样,它也是一门务实的语言,原因也大致相同。凭借与 Java 生态的融合,它确实帮助函数式编程走向了大众。

有意思:你通过 Scala 入门函数式编程,在 F# 做导师,却认为 Haskell 是最好的轨道。如果有人想在 Exercism 上一头扎进函数式编程,你会推荐先试哪一个?

好问题!我投 F# 一票,因为我觉得它最容易上手。这主要是因为 F# 比其他两门语言都简单。F# 出色的工具和文档对入门也是一大加分项。话虽如此,做完 F# 轨道之后,我强烈建议你再加入 Haskell 轨道,因为 Haskell 有一些 F# 没有的、非常棒的高级特性。

你对 Exercism 未来的不少计划都很了解。项目里有没有什么让你特别期待的地方?

在所有规划中的改进里,我最期待的是解答的静态分析。思路是搭建一个系统,通过程序化地分析提交的解答,找出常见问题和建议,从而自动对它们发表评论。这会给导师帮上大忙,因为他们不用再对这些常见问题和建议发表评论,可以专注于更有意思的问题。

如果你感兴趣,可以看看我(早期)的 C# 轨道分析器 原型,它用 .NET Compiler Platform 来静态分析 C# 代码。

是的,静态分析对我来说也差不多是最令人兴奋的事。看到你已经有原型了,真是太棒了。我觉得静态分析带来的速度提升会大大改进 Exercism,我也非常期待能把它扩展出去,用来教完全零基础的人写代码。我认为这会真正改变游戏规则。

最后一个问题,你有没有特别在意的个人项目或事业,想借这里向大家推荐一下?

对我来说,参与 Exercism、为它的开源代码库做贡献、指导别人,是一段收获极大的经历。我学到了很多东西,认识了一些非常棒的人,也觉得自己帮到了不少人。

我也想鼓励大家看看自己能不能参与进来。如果你有一门热爱的语言,也想帮助别人学习,那就注册成为 Exercism 的导师吧。如果你更喜欢写代码,就选一个开源项目并做出贡献。我保证,这远没有听起来那么吓人,而且做起来会让你感觉很棒!

太棒了!谢谢你抽出时间聊天,也谢谢你在 Exercism 上做的所有工作!

2019年01月21日 · 觉得有用吗?