如何学习一门新的语言?

2024-04-25 16:08
文章标签 语言 学习 一门

本文主要是介绍如何学习一门新的语言?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先要说,这并不是一篇教你如何学习的文章,因为到今天为止我也没有找到一种通用的方法来解决如何学习的问题。但是在探索的道路上,我确实产生过一些思路,我想把这些思考的过程分享出来让大家探讨。如果这对你有帮助的话,那我会非常高兴。

我最近在学习 Rust ,这是一门很酷但是相对冷门的语言(学习冷门语言可能是我的一大爱好,比如我就非常喜欢 CoffeeScript ,这是 JavaScript 的一门方言)。自从在某些语言的舒适区待久之后,经常会产生自己无所不能的错觉,这也是我不断想学习新语言的一大动力。

而我的学习过程跟大多数人类似,就是先在网上找文档然后自学。而在看文档的过程中,我就发现了一些问题。

手册的作用

“去看文档喽。”这是老鸟在面对新手时最喜欢扔的一句话,我通常也是这么扔给自己的。但当你打开一门语言的手册,你会发现它除了教你语法外,几乎没有教你什么其它东西。于是你会陷入这样一个境地:

“背下来了么?” “背不下来,太难懂了。” “再看一遍,给我背下来。” 。。。 “背下来了么?” “大部分背下来了。” “给我写个程序,实现个XX功能。” “不会。。。” “。。。”

在一个高级开发者眼里,你会了语法理所当然就应该会写程序了,但实际情况并非如此。这让我想起前段时间跟一个朋友关于目前编程教育市场的一个讨论。我出于自己的经验提出一个想法:让大牛开发者来教新手入门。在我的设想中,大牛开发者拥有强大的实战经验,以及丰富的专业知识,更是自带光环,这不比现在市场上那些半吊子的讲师好多了。在我为自己“伟大”的想法得意的时候,朋友给我浇了一盆冷水。他告诉我这样根本行不通,大牛根本不知道菜鸟需要什么知识,你可能以为基础语法讲清楚就好了,人家却连编辑器是什么都不清楚。设想一下,让一个大学教授去教一群小学生,这对两者来说都是一种灾难吧。

这些语言的创造者,或者文档的作者,无疑都是一些大神。它们在撰写一个语言手册的过程中,只能尽量负责地把这个语言的全貌准确地有组织地展现给你。然而这种全面的展现,对于一个没有任何引导的初学者来说并不完全是一件好事。简单来说就是,你会在一些次要的事情上浪费太多时间,而一些主要的概念又没有理解透彻。

关于看真实代码

当觉得文档满足不了你的时候,老鸟们往往会扔给你第二招:看代码。看什么代码呢?那还用说,当然是被业界奉为经典的,在 GitHub 上至少有一万颗星的知名开源项目代码啦。

当你怀着崇敬的心情,打开扔给你的网址,看着满屏幕的代码时,你会对自己问出那三个经典的哲学问题。这是什么东西?它是怎么做到的?为什么要这么写?搞不好某些人还会因为惊吓过度,从而失去了学习下去的信心。

那么让我们一起来看看这些代码里有什么鬼东西,会吓得新手信心不足。

大段的注释

说一件事你们不要笑,在我还是个萌新的时候,我曾经对这些穿插在代码中的神秘文字产生了深深的困惑,我还以为它们对代码有某种加成作用,以至于我还试验过把注释去掉会对代码执行产生什么影响。而现实中好的代码会让后面的维护者方便很多,但不好的甚至错误的注释会让人迷惑不已。

语法糖

语法糖是个好东西,它大大简化了我们的编程过程,高手用起语法糖写起代码来简直不要太爽,所以越强大的项目这玩意儿越多。但是对于初学者来说,语法糖隐藏了一些细节,而且让语法看起来很怪异。有些代码如果你用标准语法来写是很好懂的,但如果用语法糖来写的话很难让人一下子明白。

初学者为了弄懂这些语法往往要花大量时间,但其实这些时间在这个阶段是没必要的浪费。你看不懂它觉得它是一个很重要的东西,其实它只是一个做工精巧的小玩意儿,离开了它这些代码照样能工作。而随着你的经验丰富,也可以随时随地用起来,用的方法可能也不尽相同。

代码里的重点

对于一个开源项目来说,往往 50% 的代码可能都是在适配各种不同的运行环境,将系统的 API 抽象成项目里通用的接口,这部分代码除非你自己要做类似的项目,要不然的话对初学者来说参考意义不大。更何况,为了适配某些系统奇葩的运行环境,开发者往往会大开脑洞,创造出一些非常奇怪的代码。这些旁门左道充满了玄学和不确定性,初学者看多了可能会发生如武侠小说里练功出差错的结果:走火入魔。

剩下的代码里 20% 是项目内部的接口抽象和定义,最后 30% 才是真正值得看的东西,它们往往散落在各个地方,但又为了一个设计核心服务。让初学者识别出这些代码来,未免太强人所难。

野文档

这是我自己的一个定义,我把一切非官方的开发文档都称为野文档。初学者会在搜索引擎里得到大量的相关文档,他们很多是学习心得,很多人在写这篇文章时水平可能比你也高不了多少。这就造成了这些文档的水平参差不齐,所面向的重点也不同,也许你花了大把时间弄懂的是一个错误的或者过时的知识。而大部分号称教你入门的文章,可能也就是告诉了你如何搭建一个运行环境,这门语言的精髓和重点作者自己估计也没弄明白。

而如果你碰到一篇被奉为经典的好的入门文章,那你真的要好好感谢作者。因为这意味着作者付出了大量的深入思考,深入浅出这四个字说起来简单,做起来可是需要相当的功底的。

相对较好的做法

在这么多语言的学习过程中,我也总结了一些相对比较好的学习方法。我认为看代码是非常有必要的,因为光死记语法是无法掌握好这门语言的。但是去看一些大型项目代码的缺点我在上面也说了,到底该如何是好呢?

我建议大家可以去看官方给出的,专门供初学者学习的 Step-By-Step 代码,这种代码一般在官方的文档页就可以找到链接入口,它有如下好处:

  1. 由浅入深,富有层次。这些代码往往是跟随者文档的深入,慢慢把语法细节展开的。不会一下给你展现太多,让你无法 GET 到重点。每段代码都会有一个重点要表现的特性,这样看起来会一目了然。

  2. 有质量保证。这些代码的撰写一般是官方人员负责,这可以在很大程度上保证准确性。

  3. 更新及时。我们知道很多语言的细节是会随着版本的升级有所改变的,而很多网上的第三方文档往往缺乏维护,但官方文档一般都会同步更新。

我建议大家一边看手册一边看代码,这样印象会更深刻。眼睛看了之后,我认为要尽快找一些好的例子来练手,不需要一上来就搞比较复杂的大型项目,也是由浅入深。这种练手项目去哪里找呢,很多语言的 tutorial 板块就是干这个的,做的比较完善的甚至还提供在线的教学体验环境,大家应该好好利用。

写在最后

这篇讨论学习方法的文章引发了我的一些额外思考。我经常在开发者社区里看到老鸟和初学者互怼,写这篇文章的过程也让我理性思考了产生这些矛盾的原因。总的来说就是一些信息的不对称造成的。老鸟认为这个问题根本不是问题,网上一搜一大把,不愿多讲甚至冷嘲热讽。而初学者却觉得这些信息根本理解不能,老鸟的嘲讽就是一种羞辱。

我认为要打破这种不对称需要双方付出耐心,而这种耐心的付出是相互的,你付出的多回报的就越多。而最先迈出付出这一步的,应该是初学者,毕竟从情理上来说是你请求人家办事。而你需要付出的不过是把自己的问题讲明白,说出你的思考过程,附上必要的信息。一个好学的人是不会让人讨厌的,但前提是你得有一个不让人讨厌的姿态展现出来。


640?wx_fmt=jpeg

这篇关于如何学习一门新的语言?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935150

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘