本篇博客是《软件开发者成长完全攻略》系列翻译文章第 4 章。
原文地址:What Programming Language Should I Learn
软件开发领域的新手中最常见的一个问题就是他们应该学习哪门编程语言。对于某些有抱负的开发者,这个问题成为他们从未跨过去的绊脚石。
我曾经教授过很多的开发者,他们总是自己进行预测或者在做了决定后变卦,从一门语言换到另一门语言,他们永远都在担心自己做错了选择。
如果你也曾经为选择哪门编程语言而感到过焦虑,那么这一章就是为你而写的。
首先,我会先消除你的某些疑虑;接着,我会给出一些实际的考虑因素来帮助你选择自己将要进行学习的第一门编程语言。
选择哪门语言其实并没有那么重要
是的,你没有看错标题。
学习哪门语言其实并不像你认为的那样重要。我说这句话是有很多原因的,但是其中最重要的一个就是虽然有这么多的编程语言,但是他们从本质上来讲都是很相似的。
是的,他们的语法可能是不一样的。是的,编程语言也许看起来都是不一样。他们可能拥有完全不同的特性集合。但是,在本质上,所有的编程语言都比你第一眼看到的那样有更多的共同点。
几乎所有的编程语言都有基础的分支结构,循环,方法或者函数调用以及在更高层次组织代码的方法。有很多的编程语言甚至相似到只要你掌握了其中一门,你就基本上掌握了其它几门。
C# 跟 Java 就是一个很好的例子。同时,JavaScript 也跟他们两个中的任意一个很相像。
掌握第一门编程语言永远都是最困难的。一旦你掌握了一门编程语言,再学习第二门就会简单很多了。当你掌握了二门或者以上的编程语言后,之后学习编程语言的难度对你来说都是呈指数型下降的。
当你对一门编程语言一知半解 —— 或者是一无所知 —— 的时候,上面的这些话听起来似乎有点不可信,但是在我的职业生涯过程中,我学习过至少 10 门不同的编程语言,我可以向你保证,只有第一、第二门语言是最难的。
编程语言远比你想像中的来得相似,你也可以很容易地在不同语言间进行切换,然后之后再继续进行学习。这意味着,即使你已经开始学习一门语言了,但是如果发现它并不是你的菜,或者你找了一份需要使用不同语言开发的工作,这都不是什么大问题。你为学习第一门编程语言做的很多努力都不会白费。
你也会发现很多开发者的职位 —— 特别是像微软以及 Google 这样的大公司 —— 没有要求一门具体的编程语言。
甚至是我自己参加过的很多面试,他们只要求我使用自己觉得最舒服的语言来解决提出的编程问题,而并没有限制我一定要掌握哪门具体的语言。
选择一门编程语言的考量
因此,我真心觉得选择哪门语言作为你第一门学习的语言,并没有那么重要。但是如果你还是觉得难以抉择,接下来我会跟你一起从几个方面进行考量。
工作前景及未来
我会说,对于你们中的大多数人,首要的考虑因素是这门语言能帮你找到什么样的工作,以及这门语言的未来发展如何。
就目前而言,对于大多数的流行语言来说,在任何时候都有大量的工作可供选择。不同语言的流行程度可能会上升或下降,但是如果你关心的工作的问题,你可能会从那些最主流,最受欢迎的语言中进行选择。
在本书写作的时候,最流行的语言有这些:
- 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++ 书籍,并尝试去学习这门语言的所有细节。
而在今天,这不再是一门如此重要的技能了。
现在的编程都是基于更高层的抽象,更多的是使用这门语言的库或者框架,而非语言本身的特性。当然,了解一门语言 —— 并且很好地掌握它 —— 依然很重要,但是精通一门语言的重要性已经不如以往了。
这就是为什么我让你不要那么纠结于第一门学习的语言。你所需要做的就是学习一门语言然后坚持下去 —— 至少在目前应该如此。
关注
如果你喜欢这篇文章,可以关注我的公众号,随时获取我最新的博客文章。