学习新编程语言的非常规方法
注:本文最初发表于Hackernoon。
现存的编程语言超过 500 种。因此,你今天开始学习一门新的编程语言是很正常的。你可能已经掌握了C++和Java,但你的工作需要用到Python;或者你精通Python,但工作中却需要用到Java编程。又或许,你只是想学习一门很酷的语言来拓展你的专业技能。
如果你想学习一门新的编程语言,有哪些选择?
- 可以学习一些在线教程或
- 通过一些在线(MOOC)课程学习
你们中有些人甚至可能会认为,学习一门新语言的最佳方法实际上是这样的:
- 学习新编程语言的语法和
- 用这种语言开发一些个人项目
没错!这样就能确保你运用从学习目标语言语法中获得的知识。
我在学习不同编程语言的过程中开发了超过 20 个小型项目。相信我,当你为自己的个人项目编写代码时——无论是周末项目还是通宵速成的临时方案——你编写代码的目的都是为了完成某件事。你唯一关心的就是——“我的代码能运行吗?”。你几乎不会在意代码的质量。
“任何傻瓜都能写出计算机能理解的代码。优秀的程序员写出的代码,人类也能理解。”
——(马丁·福勒)
那么,如何才能学习到你正在学习的新编程语言的良好实践呢?
用该语言参与开源项目。
感到惊讶吗?你们中的一些人可能会想——“等等,开源很难。只有精通某种语言,我们才能为开源项目做贡献,对吗?”答案是否定的。
让我给你讲个故事。
去年,我收到了 Booking.com 的全职工作邀请,我知道自己会用 Perl 语言(这是他们后端的主要编程语言)进行开发。2016 年 6 月大学毕业后,我开始学习 Perl,为毕业后的第一份工作做准备。由于我将于 7 月第二周入职,所以我只有大约一个月的时间来学习。
我开始阅读 Perl 的语法,并逐渐理解了一些常见的语言模式。当时,我非常想用 Perl 开发一些东西,以便运用我的语言知识并实践各种概念。在寻找 Perl 项目灵感时,我偶然发现了 GitHub 上的 DuckDuckGo 开源组织。我注意到一些开源项目是用 Perl 编写的。我浏览了这些项目的 issue,发现其中有很多“入门级”问题。我立即着手解决这些问题,并提交了一些 pull request。如今,我已成为 DuckDuckGo 几个开源项目的主要贡献者之一,同时也是 DuckDuckGo 的 20 位开源社区领袖之一。
那么,它为什么会奏效呢?
我刚学会 Perl 语法后就开始参与开源项目。在做项目的过程中,我总是会仔细研究现有的模块,并留意其中使用的各种 Perl 模式。因此,我开始将这些优秀的实践应用到自己的代码中,这帮助我学会了如何编写高质量的 Perl 代码。
那并非巧合;让我再讲一个故事,以证明两者之间的关联。
最近,我在 Booking.com 工作时,接到了一项任务,需要为一项用 Go 语言编写的服务添加新功能。以下是我和我的同事之间的对话——
我:我真的很喜欢这个任务,我想做这个。你觉得怎么样?
他:是的,这确实很有意思。不过,这需要懂围棋。你会围棋吗?
我:不。
他:你想学围棋吗?
我:是的!
他: *微笑* 这就对了!
当时我正准备学习另一种编程语言——Go!
我开始阅读 Go 语言的语法,并在其官方网站上找到了一个很棒的入门语言教程。它足以让我熟悉这门语言的所有基本概念。
我再次开始寻找用 Go 语言编写的开源项目,这些项目最好包含一些“入门级”或“容易修复”的问题。我找到了一个 Google 的项目,它本质上是 GitHub REST API 的 Go 封装。
我开始学习 Go 语言两天后,就提交了我在该项目上的第一个 PR。
开源软件有何优势?
所以现在你可能想知道开源贡献如何帮助你学习一门语言的良好实践。这其中涉及很多方面。让我们逐一探讨。
代码质量
大多数优秀的开源项目都有严格的编码规范,你必须遵守这些规范才能让你的代码被合并。这将帮助你适应这些规范,从而即使你只是在学习这门语言,也能编写出高质量的代码。
不仅如此,你还有机会查看其余代码,看看它的编写和/或文档编写得如何。
代码审查
开源贡献最棒的地方在于代码审查。当你提交代码时,你会收到来自项目相关专家的反馈,这让你有机会加深对编程语言的理解。
这就像获得了关于如何编写优秀代码的免费个人指导。
欣赏
作为软件开发者,我们真的需要自己的工作得到认可;而开源社区恰恰能确保你获得足够的认可。在我参与开源项目的所有经历中,我从未收到过任何侮辱性或打击积极性的评论。每个人都非常鼓励和乐于助人。
所以,下次你想学习一门新语言时,就大胆尝试吧!找一个开源项目参与贡献,然后朝着学习这门语言及其细微差别的目标迈进 ;)
请告诉我这种非常规方法对你来说效果如何。如果你觉得这篇文章对其他人有用,也请推荐一下(❤)。
欢迎分享其他对你来说非常有效的方法。请在推特上关注我@sahildua2305。
文章来源:https://dev.to/sahildua2305/unconventional-way-of-learning-a-new-programming-language

