如何学习一门编程语言或框架

avatar
数据可视化 @蚂蚁集团

作者简介:Alan 蚂蚁金服·数据体验技术团队

前言

年关刚过,相信已经有不少同学看着肚腩,习惯性地开始制定新年的运动计划了。在这种时候如果你还看到了这篇文章,说明你是热爱学习(工作不饱和)的。大鱼大肉,满腹油腻之时看干货并不合时宜,所以本次就翻译一篇指导大家怎么学习编程语言或框架的软文,来作为开启大家新年学习之门的润滑剂吧。

原文链接:hackernoon.com/how-to-lear…

由于原文并不针对前端所写,而读者可能多是前端背景,所以我把一些素材和描述做了些许修改和扩展,以便更容易理解,以下是译文。

正文

每天都会有许多新的编程语言诞生,例如:Dart、Go、Kotlin和Elixir等,前端框架更是日新月异。学习一门新的编程语言或框架并非易事,但是确实有一些方法和窍门能帮助你更快更好地掌握它们。

0_WW-iV1yoPWqUcd5H.jpeg | center | 686x457

先语言,而后框架

以前端为例,现在入门的很多同学上来就是React或者Vue,对JavaScript本身则知之甚少。语言根基不稳,学习和使用框架的时候自然也是摇摇欲坠,举步维艰。如不知道原生JS事件机制,不知道事件代理 、捕获和冒泡,想必也不能掌握React的事件机制;如不知道JS中经典的this指向问题,那么在给React组件绑定事件处理函数的时候,就可能会出现莫名其妙的错误。像上面这样的例子不胜枚举,所以同学们还是应当先掌握语言本身,打好基础,再学习对应语言之上的框架,一方面使能更好地理解框架,同时也能避免一叶障目的情况。

多刷编程题

有许多这样的网站,你可以在上面做各种编程语言的题目(有的还会经常有一些编程比赛)。通过做这些题目,可以让你在语法、类库和逻辑等方面学到很多。同时,这也不妨是准备面试的一种好方法。

多逛逛StackOverflow

在编程的过程中,你总会遇到自己无法解决的难题,这个时候,要记得上StackOverflow去求助,去看看别人有没有遇到类似的问题。另外在StackOverflow上,还有一个专门的Code Review社区,只要你贴上自己的代码,就会有相应语言的专家评审你的代码,并提出改进意见。

对于那些可能打不开StackOverflow的同学,也可以去SegmentFault问问。

多读代码

GitHub在你的学习之路上是必不可少的。在这里,你可以找到许多用你现在正在学的编程语言或框架构建而成的开源项目。你可以看到别人在生产环境下,在大型项目下是如何使用这些语言和框架的。而且,如果你有自信,有技术,还可以为开源项目贡献代码。

做个项目

一般来说,当我们去学习一门编程语言或框架的时候,都是为了要用它做一个项目,比如:搭建一个博客网站,todo应用或百度百科这样的网站。通过实际写一个项目,会提高你各方面的能力。这里还有一个很经典的网站就是ToDoMVC,这里有基于各种框架做的todo应用,可谓框架入门必备。

安装一个lint工具

现在的lint工具越来越强大了,以ESLint为例,不仅可以检查代码格式,常见错误,还可以给出许多最佳实践方面的建议。在编码时使用lint工具,可以让你更早地发现代码中可能存在的bug,同时也可以让你的代码看起来更加优雅。

写地道的代码

当我在学JS的时候,我想当然地把C#语言的编程知识应用到JS中,这是一种学习新语言的好方法。不过这种方法在一定程度上也阻碍了你更好地掌握新语言,因为它使你无法学习用新语言最地道的方式来编写程序。例如:把矩阵中的每一个值都转换成浮点数,代码如下:

const matrixOfFloats = matrixOfAny => {
  const l = matrixOfAny.length;
  const li = matrixOfAny[0].length;
  const newMatrixOfFloats = [];
  for (let i = 0; i < l; i++) {
    const row = [];
    for (let j = 0; j < li; j++) {
      row.push(parseFloat(matrixOfAny[i][j]));
    }
    newMatrixOfFloats.push(row);
  }
};

而较为地道的JS写法是这样的:

const matrixOfFloat = matrixOfAny => matrixOfAny.map(row =>
  row.map(anything => parseFloat(anything))
);

不放弃,不抛弃

有些语言和框架的学习曲线是陡峭的,你需要时间和精力来克服。当你遇到瓶颈的时候,不要放弃,因为可能你已经离精通不远了,请运用上面提到的这些资源,去寻求帮助。

while(true) => study()

我认识一个程序员已经钻研C#超过20年,至今仍在探索C#和.NET方面的新鲜事物。这个人就是Antonio Maniero——StackOverflow上最具影响力的葡萄牙人。事实上,我们永远无法掌握一门编程语言的全部,这使得我们必须持续学习。某一天,你可能会擅长某些领域,并成为该领域的标杆人物,但是你会发现总有更多的东西需要去学习。

0_jPXlNYlwyodytXJ1.jpeg | center | 686x457

后记

原作者提到的这些方法大多偏重于实践方面,然而我们知道,学习一样东西,理论也同样重要。所以,我建议同学们在学习时能多看一些官方文档,多看一些大神和前人的文章笔记。这样,有了理论才能指导实践,并用实践来验证理论。最后,送给大家一句名人名言。

不怕困难,不怕挫折,坚持奋斗,努力学习,就能获得进步与成功!
——《为陈醒民题》(1939年4月18日),《毛泽东题词墨迹选》第17页

对我们团队感兴趣的可以关注专栏,关注github或者发送简历至'tao.qit####alibaba-inc.com'.replace('####', '@'),欢迎有志之士加入~

原文地址:github.com/ProtoTeam/b…