(点击上方公众号,可快速关注)
编译:伯乐在线/郑芸
好文投稿, 请点击 → 这里了解详情
【导读】:以往我们认为学习新编程语言的最佳方式是看语法,然后做小项目练习。Sahil Dua 另辟蹊径,找到了学习新语言的另类方式:参与对应的开源项目。参与的过程中,需要查看已有的模块,了解这种语言的模式,对自己写出高质量的代码非常有益。
补充:Sahil Dua,创业公司 Refiral 合伙人,DuckDuckGo 开源社区 leader 之一,多个开源项目主要贡献者。
目前编程语言超过 500 多种。学习一门新的编程语言对我们来说已是家常便饭。很有可能你熟悉 C++ 和 Java,而你的工作需要用到 Python 或者你非常精通 Python,但你工作写代码需要用 Java 。再或者你想学习一种炫酷的编程语言来拓展你的技能。
如果你想学习一门新的编程语言,你选择哪种方法?
网络教程
网络公开课(MOOC)
有些人甚至主张,学习新编程语言最好的方法其实如下:
嗯,说得过去!你想学习一门编程语言,你学了它的语法,创建一些个人小项目可以确保你应用到这些语法知识。
在学习不同的编程语言时,我创建了 20 个以上的小项目。相信我,当你为一周甚至一整晚就能快速完成的小项目写代码时,你只是想完成任务。你所关心的只是——“我的代码能运行吗?”你几乎不关心代码的质量。
任何傻瓜都可以编写计算机能理解的代码。优秀的程序员写人类能理解的代码。” —— Martin Fowler
那么,在尝试学习一门新的编程语言时,你怎样获得好的实践呢?
参与该语言的开源项目!
是不是感到惊讶?一些人或许会认为 —— ”等等,开源是很难的。只有当我们精通这门语言,我们才能为开源项目做出贡献,对吗?“。答案是否定的。
让我先给你讲个故事。
去年,我得到了一个来自 Booking.com 的全职工作 offer,而且我得知我工作的编程语言是 Perl (这是他们公司首要的后端语言)。2016 年 6 月,当我完成我的大学学位,我开始学习 Perl ,以便准备我大学后的第一份工作。我入职的时间是 7 月的第二周,因此我差不多有一个多月的学习时间。
我开始阅读 Perl 的语法,并开始理解该语言的一些常见模式。到这里,我真正想使用 Perl 来创建一些东西,这样我就可以应用我学到的该语言的知识,实践它的各种概念。当我在为使用 Perl 创建一些东西寻找 idea 时,我在 GitHub 上偶遇了 DuckDuckGo 的开源组织。我注意到一些开源项目是用 Perl 语言写的。我浏览了一下发布的 issues,找到了很多带有“初学者”标签的 Issue 。我立即开始工作,并提交了一些 pull requests。快进到今天,我成为了它们一些开源项目的主要贡献者,以及 DuckDuckGo 20 个开源社区的领导者之一。
这个故事的意思:我通过参与 Perl 语言的开源项目最终学会了 Perl 语言。
为什么参与到开源就奏效了呢?
就在我学习了 Perl 的语法后,我开始参与开源项目。在那期间,我常常查看现有的模块。我时常注意 Perl 正被使用的模式。因此我开始挑选这些好的实例应用到我自己的代码中,这有助于我学习怎样用 Perl 更好地写代码。
这不只是巧合;让我告诉你另一个故事,以获得更多的相关性。
最近,在 Booking.com 工作时,我接受了一些任务,其中有一个是在 Go 语言写的服务系统上添加一些功能。下面是我和队友的对话:
我:我真的很喜欢这个任务,我想完成它。你怎么看?他:是的,的确很有意思。但是它要用到 Go,你熟悉 Go 吗?
我:不。
他:那你想学吗?
我 : 是的!
他:😊 你可以的!
所以,那就是我学习另一种编程语言—— Go 的起点!
我开始学习 Go 的语法,并在其官网上找到了一个很棒的初学者指南,足以让我掌握这门语言的基本概念。
再一次地,我开始寻找一些发布的 Issue 中带有“初学者”或者“简易修复”标签的 Go 语言开源项目。我通过 Google 找到了一个项目,大致就是 GitHub 的 REST API 包装器。
在我开始学习 Go 语言的第二天,我在那个项目上发了第一个 pull request。
我去年一整年的贡献图 ( https://github.com/sahildua2305 )
开源项目是如何提供帮助的?
那么,你现在可能会疑惑参与开源项目怎样可以帮到你获得好的语言实践。有好几个方面,让我们逐个讨论。
代码质量
大多数优秀的开源项目都有严格的代码标准,想要你的代码融入其中,你必须遵守这些准则。这会帮助你适应这些准则,因此写出高质量的代码,即使你才刚学习这门语言。
不仅如此,你还有机会查看代码的其余部分,看看别人是怎么样写代码,写文档的。
代码审查
为开源项目做贡献最佳之处就是代码审查(code review)。当 push 你的代码,你得到与该项目相关的专家的反馈,因此它给了你一个提高对这门语言理解的机会。
你获得了一次如何写处优秀代码的私人机会,并且还免费的呢!
鼓励和赞赏
这是我在 Go Lang 上发出的第一个 PR 后,别人写下的第一个评论。
作为软件开发人员,我们的工作确实需要得到理解和鼓励;开源社区能让你得到足够的鼓励和支持。在我为开源贡献的所有经历中,我从未收到过任何侮辱性或消极的评论。每个人都是特别愿给他人鼓励和帮助。
DuckDuckGo 社区其他人给我的评论
所以,下次你想要学一门新语言,大步向前去冒险吧!找到一个开源项目去做贡献,在学习这门语言和它微妙之处的道路上行进。
【补充】:
希望作者这个不走传统惯例的方法,对大家有启发。如果你对参与开源还不怎么了解,请看 GitHub 的这篇文章《新人必看的开源指南:如何参与并做贡献》。
如果你也准备采用这种方法,欢迎评论。
看完本文有收获?请转发分享给更多人
关注「程序员的那些事」,提高编程技能