36

怎样快速学习一门编程语言?

 4 years ago
source link: https://www.infoq.cn/article/jpZ4B04fjbpgvV3VszGg
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文假设你已经至少了解一门编程语言;但是,本文的概念将帮你从头开始学习编程。

7BJRFzR.jpg!web

当我还在学校时,一位老师对我说了一句话,我想告诉开发者新手:你曾学习的最难编程语言是你所学的第二门语言。

不要因此沮丧——它含义是,当你第一次学习如何编程时,你对编程的所有方面都有了先入为主的想法。你最终建立起更多的语法联系和假设,有些甚至不应该建立的你也有了。

因此,当你学习第二门编程语言时,你不得不想办法“忘却(unlearn)”这些假设。当你想尝试学习第二门,甚至第三门编程语言时,始终记住这点。

对编程进行剖析

编程语言有很多,稍作统计就能找到 5000 多种 ,但是 TIOBE 排行榜 仅列出前 250 种语言。无一例外,所有排名前 20 的编程语言都有相似的标准库。

我认为理解编程的最好方式就是“剔除”所有多余的东西,然后你就能看到那些必要的基本元素。

原子

每种编程语言的每个方面都可以归纳成 true 和 false。为什么这么说呢?因为电路就是这样工作的——要么有电荷,要么没有电荷。内存以 0 或者 1 的方式存储数值,这一位要么有电荷,要么没有。

8 位(bits) 是 1 个字节,这已经足够列出 ASCII 表 中的任何字符了。位(bits) 按照某种顺序翻转,它提供了字符的十进制表示。计算机能够理解怎样把这种表示翻译成一个字母。

Vz6nauQ.png!web

基本的二进制表示,显示了 Hello 这个单词是怎样创建出来的

理解这个概念之后,“为何这样表示”会帮助你更容易地理解其他部分。

工具

v2aIrq6.jpg!web

工具都是相同的,我们可以采用任何顺序来学习使用这些工具,而我通常使用以下顺序。

变量

这个看起来太简单了,但是仔细想想,变量是怎样创建出来的?

操作符

操作符是什么,怎样使用它们?假设你有一些基本的数学操作符,但是逻辑操作符会是怎样的?是“AND”(拼成“and”或者“AND”)操作符呢,还是说使用诸如“&&”这样的标记?

条件语句

我惊讶地发现,在自己撰写的关于 Swift 和 Python 的文章中,最受欢迎的都和做决策有关。你接下来需要了解的是在程序中如何做决策。你想要学习的语言使用传统的“if/else if/else”还是偏向 Python 的风格“if/elif/else”?你所学习的语言中是否有“switch”或者“guard”语句?

循环

你怎样循环遍历重复的任务?你所学习的语言包含 for 循环、while 循环、do-while 循环或 for-each 语句吗?

函数

语言中是否能够创建函数?如果可以,你会怎样创建?怎样在这些函数中包含变量?了解如何正确地使用函数会给你节省时间,让你的生活更轻松。

类和结构体

这门语言是否提供类或者结构体的概念呢?这看起来是不言自明的问题,但是有些语言两者都不具备,或者只具备其中之一。如果确实是这样,你会怎样创建类或者结构体?这个类需要一个构造函数还是 init 方法呢?

错误处理

错误是在所难免的。当它们发生时,这门语言是否具备鲁棒性的错误处理解决机制,你会怎样使用这个机制?这种机制是“try/catch”、“try/except”还是其他方法?是否有其他语句,如“else”或者“finally”,可以给出其他错误处理选项。

测试

你怎样测试你的代码?是否有内置的代码库做测试,或者需要下载独立的工具来做测试?

所有这些工具会出现在最现代化的编程语言里。即使是古老的编程语言,如 COBOL 也有其中大部分工具,但是其叫法不太相同,比如 paragraph 或者 copybook。

fABvaav.jpg!web

如何获得良好的效果

一旦你理解这些工具,下一步要做的就是使用它们,写一个应用程序。你可以通过阅读文档了解一门语言,但是直到你用这门语言写了一些应用程序后,才能真正了解这门语言。

在编写应用程序时,你不得不像一位 X 程序员一样思考。我可以说,我了解 C++ 语言,因为我上了一门 C 语言的课,并且阅读过 C++ 的文档,但是,直到我用 C++ 特有的功能写了一个应用程序后,才能说我真正了解了 C++ 这门语言。

Blackjack 非常适合作为起步阶段的项目。它需要变量、操作符、条件语句、循环(基于玩家个数)、函数、类 / 结构体和错误处理。为防止可能的程序崩溃,你可以包含一些测试用例,比如测试扑克牌用完的情况。

其他不错的入门项目,包括 Chutes 、Ladders、Yahtzee。

对于更高级的功能,可以试着重新创建一个像 Monopoly 这样的游戏。更多地去思考创建机制,这个游戏可以只是基于文字的。

关键是要记住,如果你给自己降低任务的难度(比如跳过二十一点的双倍下注或者分牌功能),这只会限制住你对这门语言的综合理解。

是否还有其他学习小窍门?

一门语言能提供的远不止我以上列出的这些方面。事实是,你可以用上面列出的工具写出任何东西来,但是标准库中包含的额外功能可以让你更轻松地写出任何东西来。大部分标准库包含同样的函数,所以在不同的语言中你可以使用相似的函数名。

你使用一门语言越多,你就可以找到更多的标准库,但是得确保先学会了以上提到的工具。

当你使用一门语言时,试着弄清楚这门语言的优势和劣势分别是什么。在面对一个具体问题时,这能帮助你弄清楚应该使用哪种语言。

需要快速做一些数据科学方面的事情吗?可以看一些 Python 包或者 R 语言。需要快速写一个服务吗?可以看看 C 或者 Go 语言。Web 服务器搭建又如何?看看 Java 或者 Python。

仅仅是看这些语言的文档,还不能深刻地了解它们。我通过 使用 这些语言来学习它们。

由于这可能是我迄今为止最短的一篇文章,我希望给你提出一个挑战,那就是去学习一门新的语言吧,祝你好运!

原文链接:

How To Learn Any New Programming Language Quickly

关于作者:

Bob Roebling 是一位高级系统管理员和技术布道者,拥有多种编程语言背景。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK