乐者为王

Do one thing, and do it well.

学习新编程语言的非传统方式

英文原文:https://hackernoon.com/unconventional-way-of-learning-a-new-programming-language-e4d1f600342c

现在已经有500多种编程语言。因此,开始学习新的编程语言对你来说是很正常的。你可能知道C++和Java,但是你的工作需要Python;或者你精通Python,但是需要用Java编写代码;或者也许你想要学习这种很酷的语言只是为了扩展你的编程技能。

如果你想学习新的编程语言,你会选择哪种方式?

  • 从若干在线教程中学习
  • 或者从若干在线课程(MOOC)中学习

有些人甚至可能认为,学习新语言的最佳方式应该是这样的:

  • 学习这门新的编程语言的语法
  • 再用这门语言构建一些个人项目

有道理!这样可以确保你能够应用学习语言的语法而获得的知识。

我开发过20多个迷你项目,同时学习不同的语言。相信我,当你为个人项目编写代码的时候,不管这些项目是周末项目还是紧急快速补丁,你编写代码都只是为了完成任务。你只会关注——“我的代码是否工作?”你几乎不关心代码的质量。

任何傻瓜都能写出计算机可以理解的代码。好的程序员能写出人类可以理解的代码。——Martin Fowler

那么,你是如何学习你正在尝试学习的新的编程语言的良好实践呢?

向该语言的开源项目贡献代码

惊讶吗?有些人可能在想——“等等,开源是很难的。只有当我们是该语言的专家时,我们才能为开源项目贡献代码,对吗?”答案是不。

让我给你们讲个故事。

去年,我收到Booking.com全职工作的邀请,而且我知道我将使用Perl(这是该公司后端使用的主要语言)工作。2016年6月,当我完成大学学位后,我开始学习Perl,以便为自己在大学毕业后的首份工作做准备。因为我会在7月的第二周入职,所以我差不多有1个月的时间。

我开始阅读Perl的语法,并开始理解这门语言的一些常见模式。现在,我真的想使用Perl构建一些东西,以便我可以应用我的这门语言的知识和实践这门语言的各种概念。当我在寻找使用Perl构建某些东西的想法时,我在GitHub偶遇DuckDuckGo的开源组织。我注意到这个组织的某些开放项目是用Perl写的。我浏览这些项目的Issues发现有很多“新手”问题。我立即开始去解决它们,并提交了几个pull request。到今天为止,我已经是该组织的几个开放项目的主要贡献者之一,也是DuckDuckGo的20个开源社区领袖之一。

故事的寓意——通过向用Perl编写的开源项目贡献代码我学会了Perl。

为什么这种方法奏效呢?

就在我学会Perl的语法之后,我开始向开源项目贡献代码。当这样做的时候,我总是习惯看看现有的模块。我经常留意在Perl中使用的模式。此后,我开始在自己的代码中吸收这些良好的实践,它帮助我学习如何使用Perl编写好的代码。

这并不是偶然。让我给你们讲个另外类似的故事。

最近,当我在Booking.com工作的时候,我挑选了一些任务,包括给用Go语言编写的服务之一添加新功能。以下是我和队友的对话:

我:我真的喜欢这项任务。我想做它。你怎么看?

他:是的,它的确很有意思。但是,它需要Go的知识。你知道Go吗?

我:不知道。

他:你想学习Go吗?

我:是的!

他:😊 那就去吧!

我去了,那也是我学习另外一门编程语言——Go的起点!

我开始阅读Go的语法,并在它的官方网站上发现了一个非常棒的初学者语言教程。它足以让我熟悉该语言的所有基本概念。

再次地,我开始寻找含有“新手”或“易于修复”问题的Go开源项目。我发现了一个Google的项目,它基本上是GitHub的REST API的Go包装器。

在我开始学习Go的2天后,我有了这个项目的第一个PR。下图是我过去1年的贡献图表

contribution-graph

开源是如何帮助的?

现在你可能会疑惑给开源贡献代码如何帮助你学习一门语言的良好实践。它有多个方面。让我们来逐个讨论。

代码质量

大多数良好的开源项目都有严格的编码指导原则,你必须遵守它们才能使你的代码被合并。参与开源将帮助你适应这些指导原则,从而编写优质的代码,即使你只是在学习这门语言。

不仅如此,你还有机会查看其余的代码,学习别人是如何写代码和/或写文档的。

代码审查

给开源贡献代码的最好部分是代码审查。当你推送代码时,你将获得与该项目相关的专家的反馈,因此可以让你有机会提升对语言的理解。

这就像获得了关于如何编写好代码的一次免费的个人指导。

赞赏

下图是我在Go语言上的第一个PR的首个评论

go-appreciation-comment

作为软件开发者,我们的工作真的需要得到赞赏。而开源社区能够确保这些。在我的整个开源贡献经历中,我从来没有收到过甚至一条侮辱或者挫伤的评论。每个人都善于鼓舞和乐于助人。

下图是DuckDuckGo社区中另个人的评论:

duckduckgo-appreciation-comment

所以,下次你想学习一门新语言,只管去学!找个开源项目贡献代码,在学习这门语言和它微妙之处的道路上奋勇前进吧;)

务必让我知道这种非传统方式是否对你有效。另外,如果你认为这种方式对某人有用,请推荐(❤)这篇文章。

如果有任何其它有效的方法也请告诉我。可以在Twitter上关注我@sahildua2305

Comments