Quora
问答社区最近有人提了一个有趣的问题:

有多少人曾花大量的时间和精力去学习一门外语?也许你参加过外语培训班,也许你用Rosetta
stone(一种外语学习软件)学了很久,但现在你还是不能自信地使用那种语言。

本篇博客是《软件开发者成长完全攻略》系列翻译文章第
4 章。
原文地址:What Programming Language Should I
Learn

如果把编程语言比作各国语言,会分别对应什么?

让我们来看看到底出了什么问题,是什么阻碍了人们的第二语言学习?

软件开发领域的新手中最常见的一个问题就是他们应该学习哪门编程语言。对于某些有抱负的开发者,这个问题成为他们从未跨过去的绊脚石。

目前点赞最高的回复如下:

有没有可能是因为人们选错学习软件,如果使用一个完美的学习软件,人们就能够学好第二语言?如果你用Rosetta
Stone或Pimsleur等软件学习外语,可能会有效果。但有一个问题:软件使用率极低。
根据在马里兰大学做了一项研究发现只有6%的人使用这些学习软件超过100个小时,这远远低于你需要使用这些软件学习到能流利的说一门外语的程度。

我曾经教授过很多的开发者,他们总是自己进行预测或者在做了决定后变卦,从一门语言换到另一门语言,他们永远都在担心自己做错了选择。

Python
是英语,迅速成为许多人说的全球“默认”语言。多数情况下,相对容易学习,表达,语法简洁。

C 是中文,非常紧凑和快速,但很难学习和写作,容易“倒”在起点。

Lisp
是世界语(Esperanto)。只有一小群忠实的人说,并且一直告诉别人这有多棒。

Ruby
会是法语。这是一种可爱的语言,充满了例外和怪癖。一度受到精英的喜爱。现在虽然快要过时了,但仍然性感。

Assembly 是拉丁语。现在几乎没什么人说了,尽管它是大多数现代语言的基础。

那么问题是不是因为你不住在使用这种语言的母语国家?如果你搬到那里,你就可以学好那种语言了吗?
以中国人学英语为例子,生活在英语为母语的国家,会对学英语有帮助,但它不是所有的问题的答案。如果你去到那个国家,你极有可能会依靠其他华裔和当地人说中文,世界上几乎任何一个角落都能遇到华裔人士,这是个很美妙的事,然而对第二语言学习可就没那么美妙了!它使你更依赖中文,更不容易走出不说中文的舒适区。有一个极端的例子,一个美国商人去韩国,和韩国女子结婚生子,在韩国生活多年,仍然不能用韩语与人正常交流。所以,生活在其他国家会有帮助,但它不是问题的关键。

如果你也曾经为选择哪门编程语言而感到过焦虑,那么这一章就是为你而写的。

对此问题,你怎么看?欢迎评论参与探讨。

那问题是不是因为年纪太大了?你应该有尝试过像孩子那样去学习一门语言吧,因为孩子们学习语言更快,对吗?
实际上这只是一个普遍的神话。Einstein大学的Steven
Brown和Qiushi大学的Jennifer
Larson-Hall审查了文献,发现在短期时间内,成年人学习语言实际上比儿童更快。只是在发音和语法方面,孩子比成年人更具有优势。所以,如果你只是想能用外语与人沟通,谈话,在任何年龄学习第二语言都不是问题。

首先,我会先消除你的某些疑虑;接着,我会给出一些实际的考虑因素来帮助你选择自己将要进行学习的第一门编程语言。

(文/开源中国)    

如果这些不是核心问题,那什么才是核心问题呢我们有一个完全不同的假设,为了解释这个概念,我想让你看看这张海洋图。你会看到不同的区域:底部的区域波涛汹涌,而顶部区域那里水是很平静的。

选择哪门语言其实并没有那么重要

是的,你没有看错标题。

学习哪门语言其实并不像你认为的那样重要。我说这句话是有很多原因的,但是其中最重要的一个就是虽然有这么多的编程语言,但是他们从本质上来讲都是很相似的。

是的,他们的语法可能是不一样的。是的,编程语言也许看起来都是不一样。他们可能拥有完全不同的特性集合。但是,在本质上,所有的编程语言都比你第一眼看到的那样有更多的共同点。

几乎所有的编程语言都有基础的分支结构,循环,方法或者函数调用以及在更高层次组织代码的方法。有很多的编程语言甚至相似到只要你掌握了其中一门,你就基本上掌握了其它几门。

C# 跟 Java 就是一个很好的例子。同时,JavaScript
也跟他们两个中的任意一个很相像。

掌握第一门编程语言永远都是最困难的。一旦你掌握了一门编程语言,再学习第二门就会简单很多了。当你掌握了二门或者以上的编程语言后,之后学习编程语言的难度对你来说都是呈指数型下降的。

当你对一门编程语言一知半解 —— 或者是一无所知 ——
的时候,上面的这些话听起来似乎有点不可信,但是在我的职业生涯过程中,我学习过至少
10 门不同的编程语言,我可以向你保证,只有第一、第二门语言是最难的。

编程语言远比你想像中的来得相似,你也可以很容易地在不同语言间进行切换,然后之后再继续进行学习。这意味着,即使你已经开始学习一门语言了,但是如果发现它并不是你的菜,或者你找了一份需要使用不同语言开发的工作,这都不是什么大问题。你为学习第一门编程语言做的很多努力都不会白费。

你也会发现很多开发者的职位 —— 特别是像微软以及 Google 这样的大公司 ——
没有要求一门具体的编程语言。

甚至是我自己参加过的很多面试,他们只要求我使用自己觉得最舒服的语言来解决提出的编程问题,而并没有限制我一定要掌握哪门具体的语言。

澳门葡萄京官方网站 1

选择一门编程语言的考量

因此,我真心觉得选择哪门语言作为你第一门学习的语言,并没有那么重要。但是如果你还是觉得难以抉择,接下来我会跟你一起从几个方面进行考量。

现在,想象你站在岸边,你想游到大海里去。当你开始游进大海时,你首先会进入波涛汹涌的第一个区域。在这个区域游泳是非常困难的,你会感觉到令人难以置信的推力,海浪砸在你身上,他们不断地把你推向岸边。然而,如果你通过了这个区域,到达第水面平静二个区域,游泳一下子变得很容易,更重要的是,波浪不会再推你回来,你不会再感到令人难以置信的阻力。

工作前景及未来

我会说,对于你们中的大多数人,首要的考虑因素是这门语言能帮你找到什么样的工作,以及这门语言的未来发展如何。

就目前而言,对于大多数的流行语言来说,在任何时候都有大量的工作可供选择。不同语言的流行程度可能会上升或下降,但是如果你关心的工作的问题,你可能会从那些最主流,最受欢迎的语言中进行选择。

在本书写作的时候,最流行的语言有这些:

  • C#
  • Java
  • Python
  • Ruby
  • JavaScript
  • C++
  • PHP

对于使用这些语言的开发者来说,他们永远都不会缺工作。这意味着,取决于你现在处于世界上的哪个地方,如果你不想进行搬迁的话,你就需要更加认真的进行选择。

例如,你现在住在阿肯色州的某个小城镇,那里只有一家技术公司,而且这家技术公司全部使用
Java 进行开发,那么我会建议你去学习
Java。

我可以假设你们中的大多数都不是这种情况,但是如果这真的是你现在的处境,那么我猜你的决定已经相当明显了。

如果你乐意搬迁或者计划做一个自由职业者,你可以选择一门比较古怪,比较小众的语言,然后成为这门语言为数不多的专家中的一个。

但是,如果你是一个刚刚起步的新手,我还是建议你选择一门比较主流的语言。

除了从工作的角度进行考量,你还要考虑这门编程语言的未来发展。

在本书写作的时候,Objective-C 可能不是入门的一个好选择,因为大多数的 iOS
开发者正在转向 Swift ,并且 Apple 正在大力推荐 Swift
编程语言。

如果你已经在使用 Objective-C
进行开发了,你也不用担心;现在还有大量的基于 Objective-c
的应该需要进行维护。只是它可能不是未来的最佳选择。

当然,我们都没有水晶球,所以无法预测哪门语言会流行,而哪门语言会衰落。不久之后,我预测了
JavaScript
的衰亡,但是这并没有发生。

我曾经去参加了一个开发者大会,其中一位发言人是 Objective-C
的合作发明者,大概是 20 世纪 80 年代的时候。

这位发言人,Tom Love,写了一本断定 JavaScript
已死的书。然而,在我这本书写作的时候,JavaScript
已经是世界上最受欢迎的五大编程语言之一。(我还听说有人声称它已经到了前三。)这里的关键点就在于,我们永远无法预测什么事会发生。

Ruby 在它流行之前也沉寂了好几年。JavaScript
可以说是一门设计得最烂的语言,一开始只用于在 web
页面上显示一些弹窗和警告框;而现在它成为最受欢迎的语言之一。

所以,不要去预测未来,除非你真的有一个水晶球。如果真是这样,快忘了编程吧,华尔街才是你的归宿。

Hey Jhon

你为何要如此厌恶 JavaScript 呢?JavaScript
并不令人讨厌,你才是。

我知道这听起来像是我在搞事,并且让你觉得我在针对
JavaScript。可能这会让你感觉 JavaScript
给我的童年带来的创伤,并留下了深深的情感伤疤。

好吧,让我跟你讲一个关于 JavaScript 是如何产生的小故事 ——
这个故事很短,请允许我把它讲完。

1995 年的五月份,当时还在 Netscape 工作的 Brendan Eich 利用了 10
天的时间发明了
JavaScript,并将它作为网页设计师与兼职开发者都能容易上手的“胶水语言”。(这段信息是从
Wikipedia
上获取的。)因此,我想表达的只是
JavaScript 这门语言一开始并没有经过慎重考虑,然后在 10
天之内被拼凑出来了。

这就是事实,这就是发生过的事 ——
不要忽略这些信息。说过这些之后,我想告诉你,我并不厌恶
JavaScript。我只是不认为它是一门设计优雅的语言,并且我不是特别喜欢它,仅此而已。<br
/>
目前,新版本的 JavaScript (现在被称为
ECMAScript)已经好多了,并且它原本的缺陷部分也被做了很多增强的改进。

实际上 —— 我不想承认这一点 ——
我现在已经有点喜欢它了…仅仅是有一点而已。

尽管如此,我的观点并没有那么重要。

我是一个务实的人。显然 JavaScript
是一门非常流行的语言,并且它几乎无处不在。

所以,不管我喜欢还是讨厌,我都得拥抱它 —— 同时保留我喷它的权力。

如果到现在你还没有被我说服,你可以自己考虑下,为什么关于 JavaScript
最畅销的书叫作 JavaScript: The Good
Parts。

我们认为语言学习和这非常相似。当你开始学习一门语言时,你首先会进入波涛汹涌第一个区域,我们将其称之为“恐惧区”或“沮丧区”,因为这里是你害怕使用外语,害怕的犯错误,害怕令自己尴尬的地方。在这个区域学习一门语言是非常困难的。波浪代表这种负面反馈,它不断试图把你推回到岸边。但是当你努力通过了这个区域,到达第二个区域,语言学习一下子就变得容易多了。我不是说你已经学到完美的地步了。当你到达第二区,也许你只知道几个词汇,但你能够自信地使用它们,也许你只能够进行一些简单的对话。而外语学习从之前的总是让人感到沮丧到现在开始有很多回报了。

你感兴趣的技术

当你选择编程语言的时候,另一个很好的考量标准就是:你对哪项技术最感兴趣。

如果你从技术开始进行选择,那么编程语言就更加容易确定了。我知道很多程序员对开发
Android 应用感兴趣,因为他们热爱这项技术。

对于他们中的大部分人来说,Java 会是一个好选择,因此它是开发 Android
应用的原生语言。(虽然,你也可以使用很多其它的语言开发 Android 应用,如
C#,Ruby 甚至是
JavaScript。)根据自己最感兴趣的技术来选择第一门编程语言是很有好处的,因为学习第一门编程语言会有相当的难度。

你对自己所学习的东西越感兴趣,越兴奋,你就能越容易地坚持下去,并克服在这过程中最困难的学习曲线。

我真的很想开发 iOS 应用,因为我刚刚收到了一把 iPhone
手机,我现在对这项技术感到十分兴奋。这种兴奋感可以激励我,让我更容易地去学习
Objective-C 并构建自己的第一个 iOS 应用。

如果我对这项技术没有那么感兴趣,那么我可能不会坚持这么久。不要害怕基于自己的兴趣以及兴奋感来选择一门编程语言。你的激情可以带你渡过学习过程中最困难的一段路程。

我们认为对大多数人来说核心问题是人们呆在第一区域(恐惧和受挫的区域)的时间超出了实际上你需要呆在那里的时间,而对于一些人来说,他们永远地呆在第一区域里。

难度级别

另外一个主要的考虑因素就是难度级别。某些编程语言就是要比别的语言更难学。通常情况下,我不建议从
C++
开始学习,因为跟其它语言比起来,C++
学习难度要高很多。

C++
需要你手动管理内存、指针以及一些其它一些很麻烦的构造方法,这些东西很容易将一个初学者吓退。

它是一门很棒的语言 —— 到现在依然是我的最爱 —— 但不是一门好学的语言。

一门类似 C#,Lua,Python,Ruby 或者 PHP
的语言,会让你的入门变得更加容易。甚至还有专门为初学者量身定做的语言,比如说
Scratch 或者 Basic。

如果你是真心想学习
C++,我并不会打击你,但是至少你要知道你将面对的是什么,或者你会愿意选择一门更加容易的入门的语言。

如果你看到的都是负面反馈,这将很难激励你进一步学习。所以你需要使用一种不同的学习方法,这种方法能让你够快速有效地通过第一区域,进入语言学习非常容易且很有乐趣的第二区域。

可用的资料

你可能还需要考虑学习这门语言时在网上能找得到的资料。有一些比较奇葩的语言可能没有多少相关的书籍,在线视频,或者其它可用的资源,这就会导致他们更难以学习。

其它更流行的编程语言就会有大量的在线教程,可供参加的培训机构,或者其它可利用的学习资料,所以在初学一门语言时,请务必先确认这门语言有足够多的学习资料。

现在网上已经有了大量针对于初学者的教程,因此关于资料的考量已经不如以前那么重要了,但是它确实还是值得考虑的一点。

你可能还需要考虑的一点就是你现有的可用资源,比如说电脑(学习 iOS 需要用
Mac),或者软件等。一门难学的语言可能会因为网上有大量相关的交互式在线教程而变得更容易。

你可以使用浏览器直接在线学习 JavaScript
而不用在电脑上安装任何东西。而类似 C++
这样的语言需要下载并安装一些软件,这一步对于初学者来说可能不是那么简单。

关于可用资源的最后一点,你应该考虑到自己认识的人。

谁是你可以寻求帮助的人?有谁可以在你陷入困境的时候为你解决困惑,或者可以帮助你更快速地学习吗?

在选择第一门编程语言的时候,我当然不会把资源当成最大的考虑因素,但是它也确实是我们需要认真考虑的一点。

我们相信我们有这种方法,一种能够穿越“恐惧”“受挫”区,让你尽可能快速,有效,容易地学习第二语言的方法。方法很简单
,那就是不要说你的母语。这听起来似乎太容易,但它实际上真的很有效。

适用性

最后,让我们谈谈适用性。

不同的编程语言会在各自不同的环境和技术中有更好的适用性。

比如说在写作本书的时候,得益于微软或者
Xamarin(现在也是微软的)这样的公司,C#
就是一门适用性很强的语言。如果你学习了 C#,它不仅仅可以用于 Windows 和
web 编程,它现在可以适用于任何平台,因此它的适用性是相当高的。

你可以使用 C# 来编写 Linux 或者 Mac 应用,甚至你可以完全使用 C# 来开发
Android 和 iOS 应用。

还有其它很多的语言也具有很高的适用性。

举例来说,Ruby
也被移植到了许多不同的开发平台,并且被用于很多的技术领域中。JavaScript
也是一门适用性很高的语言。你甚至可以使用 JavaScript 来控制 Arduino
开发板和控制机器人。(如果你想知道怎么做的话,可以参考我朋友 Derick
Bailey
的文章。)相对而言,其它语言就没有这么高的适用性了。

如果你学习的是 R 或者
Go,那么你就会被限制于这些语言设计时所针对的技术和平台。

有越来越多的语言 —— 特别是流行的语言 ——
被移植到了更多的开发平台上,并且可以在不同的技术中使用了,然而确实还是有一些语言没有这样多才多艺。

所以,如果你今天想成为一个 web 开发者,而明天想学习 Android
开发,或者你就是想涉及不同的平台和技术,那么你就要考虑下选择学习的这门语言有多大的适用性了。

当你强迫自己说你想学习的那种语言时,你会学习一些与人交流所必要的词汇和短语,而这些词汇和短语并不是来自教科书。这意味着你不自觉的学习了你需要用到的最常见的词汇和最重要的短语。接下来,因为你知道的单词和短语不多,你会过度使用你知道的词汇。这会是让你能够随时脱口而出这些词汇。当你使用这些基本的单词和短语时,你不会再感到紧张和犹豫。

关于选择编程语言的最后一些想法

尽管我给了你一些在选择你的第一门编程语言时需要考虑的问题,但是我想再次强调的是具体学习的语言并没有那么重要。

更重要的是你选择一门语言,并坚持学习它足够长的时间,克服它的学习曲线并熟练地使用它。

很多刚起步的开发者都会感到很沮丧,因为他们觉得自己根本就没有掌握它。关于这一点,我会在下一章“学习你的第一门编程语言”中讨论到。

只要稳住,并坚持学习下去,你一定会越来越熟练。我向你保证。

在某个阶段它会变得无聊,或者你觉得自己选错了语言,导致你在不同的语言中来回切换,但是
—— 请相信我 —— 这并不是一个好主意。

最后,请考虑一下。当我刚刚开始学习编程时,深入了解一门语言是开发者要掌握的一项最重要的技能。我会买一堆的
C++ 书籍,并尝试去学习这门语言的所有细节。

而在今天,这不再是一门如此重要的技能了。

现在的编程都是基于更高层的抽象,更多的是使用这门语言的库或者框架,而非语言本身的特性。当然,了解一门语言
—— 并且很好地掌握它 ——
依然很重要,但是精通一门语言的重要性已经不如以往了。

这就是为什么我让你不要那么纠结于第一门学习的语言。你所需要做的就是学习一门语言然后坚持下去
—— 至少在目前应该如此。

最后,因为你不能用母语说话,通过你学习到的简单短语如:“这是什么意思?和“用这种语言怎么说?你会很容易应对高于你第二语言水平的会话环境。在刚开始学习外语的时候,可以使用像谷歌翻译和词典来将新的单词和短语集成到你的对话中。

关注

如果你喜欢这篇文章,可以关注我的公众号,随时获取我最新的博客文章。

澳门葡萄京官方网站 2

qrcode_for_gh_6e8bddcdfca3_430.jpg

我们知道这个方法是有效的,因为我们已经自己试过了。去年Scott和我做了一个实验,我们去学习四种不同的语言,一年多的时间我们去了四个不同的国家去学习这些语言,我们使用了不说母语的规则来学习语言。首先我们去西班牙学了几个月西班牙语,然后我们去巴西学了几个月葡萄牙语,然后到中国学了几个月普通话,最后到韩国学了几个月韩语,我们发现这个不说母语的规则非常有效。事实上,当我们在每个国家即将结束旅行时,我们自信我们能够使用当地的语言与母语人士谈论任何话题。

这可能看起来有点极端。毕竟,当你试图学习这门语言时,即使它不像用不说英语的规则学的那么快,说一些母语不会让第二语言的学习更容易吗?我们实际上认为这是一个误解。为了解释它为什么它是一个误解,我想分享一下我的另一个经验。在我们做这个挑战的几年前,我有机会去法国留学一年。我非常渴望学习当地语言。我买了书,下载了播客,我真的想能流利的使用法语。唯一的区别是,我没有使用不说母语的规则。在我需要的时候我会说很多母语,而我只是尽可能地去学习法语。在法国生活的一年时间里,我每一天都强迫自己学习法语,我确实达到了可以用法语与人交谈的程度,但这并不是一个容易的事,相反我总是觉得很难。

与我最近在西班牙的经验的对比。我们有同样的动机和机会,但在西班牙我们使用了不说母语的规则。从我们到达西班牙的第一天,我们决定只可以说西班牙语,即使我们仅会一丁点西班牙语。开始非常困难,在最初几天我们几乎只能通过词典与对方交流。但在几周后,事情发生了变化,交流开始变得容易了一些。一个月后更容易了。到了第三个月,我们用西班牙语交流已经变得非常的容易了,我们用西班牙语交流完全是自发的。我们不必考虑学习或练习,在西班牙仅仅几个月之后,我的西班牙语比我在法国努力学习了一年的法语要好的多。

当你评估一个方法是否困难,特别是学习语言的方法,只看最开始的难度是不公平的,因为你必须看看你将投入多少努力,不只是在开始,而是日复一日,月复一月,最终能够学会这种语言。我们发现,使用不说母语规则不仅学习外语更快,而且从长远结果来看,不说母语的规则实际上比任何其他方法更容易学会一门语言。

我想谈谈另一个误解,许多人都认为在某种程度上人们可以完全避免在开始学习一门语言时犯错误。这根本不是真的。实际犯错误是非常好的,因为它意味着你正在使用的这门语言,最终它将帮助你获得你使用这门语言的信心。当Scoot和我在做这个挑战时,我们每天都犯错误,特别是在开始的时候,我们说的一切都是错的,但没关系。在中国和韩国,因为中文和韩语比我们学习的欧洲语言要难得多,我们有好几次打破了不说母语的规则,但没有关系,因为这无关犯错误,你犯了多少错误并不重要,重要的是,每次你犯了一个错误,你就再尝试一次。记住这个方法的整个目标是让你穿越过沮丧和恐惧的区域,让你可以达到语言学习有趣并且容易的区域。

理想情况下,这种方法是要你搬到说这种语言的国家,从第一天开始,100%进入这个外语环境,并遵守不说母语的规则。但显然,这有点极端,很多人可能没有机会这样做。但我想指出的是,不说母语规则并不是必须100%与每个人在任何时间都要不说母语。它在有限制的情况下依然有效。让我举个例子。如果你想学西班牙语,你有一个同事说西班牙语,当你每次遇见这个同事时,你可以使用不说母语英语规则。每次你见到他们,你只使用西班牙语说话。你可以使用手机里的字典APP翻译整个你想说的话。你不必事先准备好要说什么,目标只是要尝试着去说。每次你看到这个人,你就知道练习的时间到了,现在我必须说西班牙语,即使我必须拿出我的词典。它帮助你养成一种说西班牙语的习惯,即使你的西班牙语水平还很低。它让你有信心最终能够流利的使用西班牙语。

你听了过我们的挑战。现在我们想给你这个方法。当然我们不会让你卖掉你的东西,搬去一个遥远的国家生活。我们要你做的是一些更很简单的事情,但如果你能够坚持下去的话,它仍然会非常有效。

步骤一:找到一个人。他可能是这个语言的母语者,也可能是另一个语言学习者,他可以是你已经知道的人,朋友,同事,配偶,也可以是你在网上找到的人。如italki.com和live
mocha在线寻找对话伙伴。如果你现在在你的生活中找不到这个人,你也可以很容易在网上找到他。

步骤二:坚持与这个人使用不说母语规则。每次当你遇到他的时候,只是用第二语言,即使你的这种语言水平还很低,开始的时候你将不得不大量的使用谷歌翻译和字典。

步骤三:开始说话。不必须追求完美。你可能会打破“没有英语”规则,但没关系,在试一次。拿出您的手机,下载翻译APP,你可以输入整个你想说的话。目标是让你开口说话,并开始练习那些核心短语。

这里需要提醒一下大家,当你与这个人说这种语言时,你不能想着要去练习这门语言,你要做的是专注于和他的沟通交流,像你们用母语那样去谈话!而不是关注这门语言。他不是你的外语老师,他是你的同事,朋友,伙伴。像一对真正的朋友那样去交流,分享你的情绪,不必为自己的语言水平道歉,不要问他自己的表达语法对不对,发音准不准,
不要询问任何有关学好这门语言的建议。通过和他谈话交流,你已经学了很多很多了。

我们希望的是,通过向你展示这种方法,我们鼓励你开始尝试这种方法,甚至今天决定找到一个人,并开始使用这个规则,最终学会使用那种语言。中文有句老话:一个好的开始是成功的一半”。祝你成功!

查看视频 请访问

获取授权