“我应该学习哪门语言?”,这是新入门的程序员最常问到的问题。对于一些有抱负的开发人员,这个问题最终成为他们永远逾越的绊脚石。
我执教过大量的开发人员,这些人常会考虑再三,从这门语言跳到那门语言,生怕做了错误的决定。如果你一再追问究竟应该学习哪门编程语言,这一篇就是为你准备的。首先,我会消除你的一些疑问,然后为你选择语言提供一些切实可行的意见。
什么语言其实并不重要
是的,你没有看错,学什么语言其实并不重要。原因有很多,但其中最主要的是众多编程语言的核心其实是非常相似的。也许他们语法不同,外观不同,甚至功能也完全不同,但是核心层面的相似程度远比你预料的高。几乎所有的编程语言都会有分支、 循环、调用方法或过程以及代码组织方式。有的甚至相似到你精通一门语言后就自然会了另一门语言,C# 和 Java 都是很好的例子。JavaScript也与他们十分相似。
学习第一门语言总是最难的,一旦你掌握了一门语言,第二门就会容易很多,当你学会了两门或者更多的语言,学习难度将呈指数级降低。如果你现在一门语言都不会,可能很难相信这些话,但是如果你已经学会了10门语言,我敢保证你会说前两门语言是最难的。
这意味着如果你已经学了一门语言,却发现这门语言并不适合你,或者找到另一份需要使用其他语言的工作,没有关系,你已经度过了最艰难的日子,再学一门语言对你来说不是大事。
你也可能会发现,很多岗位—特别是在微软和谷歌之类的大公司—是不需要你知道特定编程语言的。我也遇到过跟多这种情况,被要求使用最拿手的编程语言来解决某个特定的问题,没有限制,不需要知道某种特定的语言,思想比语言更重要。
选择编程语言需要考虑的问题
所以,我认为,首先学哪门语言并不重要。但是如果你仍然不知该如何选择,那么考虑下面几个问题。
就业前景和未来
多于你们大多数来说,最需要考虑的是,选择什么样的编程语言,能对我未来的工作有所帮助。现在,最流行的语言是能在相同时间内完成更多任务的语言。编程语言的人气也同明星一样,有升有降,如果你只关心工作的可用性,可能会虑主流的编程语言,在写这篇文章的时候,这些都是主流的语言:
C#
Java
Python
Ruby
JavaScript
C++
PHP
使用以上任何一种语言的职位都不在少数,这也就是说,如果你不愿意搬迁的话,选择哪种语言就取决于你所在的位置。例如,如果你住在阿肯色州的一个小镇上,小镇上只有一家软件公司,他们所有的业务都使用Java,我就建议你学习Java,这是从非常现实的角度来考虑问题。不过我想你们中的大多数或许都愿意外出闯荡,这种情况下你的选择就取决于你的目标公司和岗位了,这需要自己去调查。
如果你想成为一个自由职业者,那么我建议你学习偏门一点的,使用不是那么广泛的语言,这样你面临的竞争压力会小很多。当然,一开始还是要坚持从主流语言学起。
除了就业前景,另一个需要考虑的问题是编程语言的未来。例如Objective-C就不是一个很好的选择,因为大多数iOS开发者都已经切换到Swift,Swift才是苹果大力投资的方向。如果你现在就是在使用Objective-C工作,也不用担心,因为仍然有大量的遗留工作需要Objective-C来维护,只不过长远来看,Objective-C早晚会被Swift取代的。
当然了,我们都没有魔法球,能够准确地预测未来,哪些语言会受到欢迎,哪些会被抛弃。我曾经预测JavaScript的衰败,但那完全没有发生。
我曾参加过一个会议,与会者中有一人是诞生于80年代初期Objective-C的合作发明者之一,发言人——Tom Love,专门写了一本书论述JavaScript正在死去,写这本书的时候,JavaScript还是top5的编程语言(我听说号称第三)。
问题在于,你永远无法预测未来会发生什么。
Ruby花费了很多年才变得流行。
JavaScript可以说是有史以来设计最糟糕的编程语言之一,原本用来制作web上的弹窗,现在它是一门极受欢迎的语言。
你所感兴趣的技术
另一个需要考虑的问题是你对什么技术感兴趣。如果你清楚自己对什么技术感兴趣,那么语言的选择将会容易许多。如果你开始一项技术,编程语言选择可能更容易。我认识的很多人对开发Android 应用程序很感兴趣,所以对他们来说,学习Java很有必要。因为这是用于开发Android 原生应用的语言。(虽然,你也可以用其他语言开发Android 应用程序,如C#、Ruby甚至是 JavaScript。)
根据兴趣挑选第一门语言绝对不会让你后悔,因为第一门语言是最难的,你越感兴趣越可能坚持下去,并度过学习曲线最艰难的部分。
我非常想开发一个iOS应用程序,因为我刚买了一台iPhone,并对这门技术感到万分激动。。那种兴奋感使我学习Objective-C然后构建我的第一个iOS应用程序变得更加容易。
如果我对这门技术不感兴趣,可能无法坚持下来走这么远。
不要害怕基于兴趣选择语言,你的兴趣会带你克服学习过程中的艰难困苦。
难度系数
另一个需要考虑的因素应当是难度系数。
有些语言确实比其他语言难学很多。
我通常不推荐从C++开始学习,因为相比其他语言,C++是相当难学的。C++需要你解决内存管理、指针以及其他一些令人眩晕的构造。但是得承认,C++是门伟大的语言——也是我的最爱之一——但绝不是易学的一个。与之相似的C#, Lua, Python, Ruby, or PHP就容易开始得多。
有一些编程语言是专门为入门准备的,比如Scratch和Basic。
当然我不会阻止你一开始就学习复杂的语言,比如C++,如果你确实想的话,但你起码应当知道自己在面对什么以及是否愿意你的第一门语言相对容易些。
可用的资源
你也许还会考虑学习一门语言的可用资源有多少,有一些晦涩难懂的编程语言,相关的教科书或在线视频等学习资源相对少一些,这又使得学习它们更加困难。其他更流行的编程语言会有很多在线教程,可报名参加的训练营,和书籍等其他资源可以利用。所以也记得关注一下这门语言的可用资源有多少,虽然这不是个大问题,但对于初学者来说,还是值得考虑一下。
也许还要考虑学习这门语言需要哪些特定的资源,比如计算机或软件。
你可以使用浏览器学习JavaScript而无须额外安装任何软件。
有些语言比如C++则需要下载相关的软件,可能不是那么容易做。
关于资源的最后一个要考虑的问题是,当你遇到实在解决不了的困难时,有没有可以求助的人?当然在今天网上有千千万的人会帮助你,但身边有一个可帮助你的良师益友效率会更高。
虽然可用资源不是选择语言时的最大问题,但还是需要考虑一下。
适应性
最后我们来谈谈适应性。
不同的编程语言适用于不同的情况和技术。比如C#,由于Microsoft和Xamarin的努力,现在已成为跨平台特性最好的语言之一。如果你学习C#,将不会受限于Windows和web程序,C#可用于今天的几乎所有平台,它的跨平台特性是很强的。你也可以用C#写Linux或Mac应用程序,甚至完全用C#写Android和iOS应用程序。
其他很多语言也有很强的适应性。比如Ruby可被移植到多个平台,可被用于多种技术领域。
JavaScript也有很强的适应性,你甚至可以使用JavaScript来控制Arduino板做机器人。(参看我好朋友Derick Bailey的文章:https://www.safaribooksonline.com/blog/2013/07/16/javascript-powered-arduino-with-johnny-five/ )
许多现在流行的编程语言都如此,可被移植到越来越多的平台上。
所以,如果你觉得自己现在想当一个web工程师,而今后想跳槽做Android开发,或者你想涉足多种平台和技术,就需要考虑一下语言的适应性了。
关于语言选择的最后一些想法
虽然我给出了一些选择编程语言的建议,但我想强调的是,语言并不是最重要的。更重要的是,当你选择一门语言后,通过坚持不懈的学习,获得所需的技能与熟练度,熟悉其中的编程思想。许多程序员刚开始会感到沮丧,因为他们没有获得上述东西。如果你因为感到无聊或认为自己学习了错误的语言而转向另一门,我觉得这不是一个好主意,思想永远比语言更重要。
最后提一下,当我开始学习编程的时候,深入掌握一门语言是最重要的技能之一,我会扑在C++书籍上,努力学习这个语言的每一个复杂点。而今天,这或许已不在重要,今天的编程主要是在一个更高的层次上进行的,使用库与框架。当然,擅长一门编程语言是很重要的,但是绝对的掌握从应用的角度来看确实是没有必要的。
这就是我为什么说究竟选择哪门语言其实并不重要,重要的是坚持下去,获得学习的技能。
原文作者:John Sonmez
译文作者:zhangrj
本文链接:http://www.icoder.top/blog/index.php/2016/08/08/what-programming-language-should-i-learn-first/