新入行的程序员应该学习哪门编程语言?

新入行的程序员最常询问我的问题之一就是:我应该学习哪门编程语言。

对一些胸怀抱负的开发者而言,这个问题最终会演变成他们永远无法逾越的绊脚石。我曾指导过很多开发者,他们总是怀疑自己的选择,甚至改变主意,不断地从一门编程语言跳跃到另一门编程语言,总是担心做出错误的决定。

如果你总是纠结于“我到底应该学习哪门编程语言”,本章正好适合你。首先,我会消除一些疑问;然后,我将就如何选择你的第一门编程语言给你一些实用的考虑因素。

编程语言其实并没那么重要

是的,学习哪门编程语言实际上并不像你想象的那么重要。

我能下这个断言有若干原因,其中一个主要原因就是:许多编程语言的内核其实是很类似的。是的,语法是不同的。是的,编程语言看起来是不一样的,甚至具有完全不同的特性集合。但是,在其核心,所有编程语言共通的地方可能比你想象的还要丰富。

几乎所有编程语言的基本构造里都有分支、循环与方法/过程的调用,以及在较高级别组织代码的方法。甚至,许多编程语言是如此相似,以至于如果你知道一门语言,你几乎也就了解了另一门语言。C#和Java就是很好的例子,JavaScript与这两种语言也非常相似。

因此,学习第一门编程语言总是最艰难的。一旦你学会了一门编程语言,学习第二门语言就容易多了。你了解了两种或者更多的编程语言之后,其他各种编程语言学起来都易如反掌。

如果你连一门编程语言都不太了解,或者说一无所知,你可能会觉得这些说法纯粹是无稽之谈。但在我的职业生涯中,我学过不下10种不同的编程语言,我可以向你保证,学习第一门和第二门编程语言的时候确实是非常难。

不但各种编程语言之间比你想象中的还要相似,而且你还可以轻而易举地从一种语言切换到另一种语言,并且很快学会它。

这意味着,即使你学了一门编程语言之后才发现这不是最正确的选择,或者你找到的这份工作迫使你使用另一门完全不同的编程语言,这都不是什么大事,因为你已经完成了学习第一门编程语言这项艰苦卓绝的工作。

你可能还会发现,许多开发岗位,尤其是在微软或者谷歌这样的大公司,并不需要你懂特定的编程语言。

我在很多次面试中,都被告知可以用任何一种语言来解决某个编程问题,哪种语言舒服就用哪种,没有任何约束,没有要求我一定要懂某种特定的编程语言。

选择编程语言时的考虑因素

因此,我真的认为你没必要太过纠结于决定学习哪门编程语言,但是如果你仍然在做决定时遇到了一些困难,下面我会给你一些考虑因素。

当前与未来的就业前景

我想说,对大多数人来说,最重要的考虑要素就是:哪门编程语言可能会帮助你获得哪种工作,以及这门语言未来的应用前景如何。

当前,对大多数主流的编程语言来说,在任何时候都会有大量的工作机会。各种编程语言此起彼伏、应接不暇,但如果你关注的是获得工作的可能性,你应该将主流的编程语言列入考量范围。在写本书的时候,我认为当前的主流编程语言包括C#、Java、Python、Ruby、JavaScript、C++、PHP。

对使用这些语言完成编程工作的开发者来说,工作机会不会短缺。也就是说,如果你不喜欢漂泊不定的生活,那么选择何种语言主要取决于你生活在世界上的哪个地方。例如,假设你住在阿肯色州的某个小镇上,小镇上只有一家技术公司,这家技术公司用Java完成一切工作,那么我就建议你学习Java。当然,我能够想象得出,对大多数人来说这个例子不具有典型性,但如果恰好你就是这种情况,那么我猜想,要你做出选择就相当容易。

如果你能够接受迁徙,或者你正计划成为编程方面的自由职业者,你可能需要专长于某种使用量更为稀少的生僻语言,这种领域专家很少,于是你就可以做得更为出色,进而成为专家。但是,如果你刚刚入行,我还是建议你尽量学习一些更主流的语言。

除就业前景之外,另一个要考虑的因素就是你正在考虑学习的编程语言的未来前景。

我在写本书的时候,对于刚入行的人,Objective-C可能不是一个好的选择,原因很简单,因为大多数iOS开发者都在转向Swift,而苹果公司也正在对Swift编程语言进行大量投资。如果你已经是一位Objective-C程序员,那也不必太过担心,工作机会还有不少,因为仍然还有大量基于Objective-C的应用程序需要有人去维护。但是,从未来前景上来说,Objective-C不是最好的选择。

当然,我们中间谁也没有水晶球,所以很难预测哪些语言会大行其道,而哪些语言又将不受欢迎。就在不久之前,我曾预言JavaScript会死亡,但事实上这并没有发生。

我刚刚参加了一个会议,在会上有一位演讲者恰恰就是Objective-C的共同发明者之一Tom Love(Objective-C诞生于20世纪80年代初期)。他写过一本书,在书中他指出“JavaScript语言已死”。然而,就在写作本书的时候,JavaScript却成为世界上使用范围最广泛的五大编程语言之一。(我听说它自称是第三名。)

关键在于,你永远不知道将来会发生什么。Ruby在诞生很多年之后才逐渐流行起来;JavaScript可以说是有史以来设计得最糟糕的语言之一,最初用于制作网页上的弹出式会话窗或者告警框,现在它却成为一门非常流行的语言。

因此,除非你有一个水晶球,否则一定无法预测未来。当然,如果你真的拥有预知未来的能力,那还是忘了编程吧。华尔街才是你该去的地方。

向John提问:你为什么那么讨厌JavaScript?JavaScript没你说的那么差吧。

我知道,上面的内容听起来好像是我不停地在吐槽JavaScript,编排它的不是,也许你会认为JavaScript给我的童年带来了某种伤害,给我留下了深深的情感创伤。

好吧,让我告诉你一个小故事,JavaScript是如何诞生的——故事很短,所以请允许我啰唆几句。

1995年5月,当时在网景公司工作的布兰登·艾希(Brendan Eich)在10天内创建了JavaScript,因为是应急的产物,所以他创建的是一种简单的“胶水语言”[3],易于网页设计师和兼职程序员使用。(这是我从维基百科上查到的。)

因此,我要说的是,JavaScript从一开始就不是深思熟虑的产物,它只不过是在短短10天之内完成的应急之作。这是事实,事情就是这样。这么说吧,其实我并不憎恨JavaScript,我只是认为它并非一门设计得十分优雅的语言,所以我并不喜欢它。仅此而已。

尽管如此,新版本的JavaScript(现在称为ECMAScript)已经要好很多了,已经改善并弥补了JavaScript以前的许多不足。因此,事实上,现在我还真是有点儿喜欢上新版JavaScript了(虽然我并不愿意承认此事)。

不管怎样,我的意见并不重要。我是个现实主义者。显然,JavaScript是一种非常流行的语言,它的应用领域遍及各处。因此,无论喜不喜欢,我都得接受它——同时保留发表自己意见的权利。

如果你上面的文字还没有说服你,为什么不去看看有关JavaScript畅销书之一——《JavaScript语言精粹》呢?

你感兴趣的技术

在选择编程语言时,有一个很棒的考量因素就是你对哪种技术更感兴趣。如果你从学习某一种技术开始切入,那么选择编程语言可能会更容易。

我认识很多开发者,他们对开发基于Android的应用程序很感兴趣,因为他们喜欢这项技术。对他们中的大多数人来说,Java是挺不错的选择,因为Java就是用来开发Android应用程序的“原生”语言。(尽管如此,你可能也会使用许多其他的语言来开发Android应用程序,如C#、Ruby,甚至JavaScript。)

根据你最感兴趣的技术来选择你的第一门编程语言完全不会给你带来什么伤害,因为你在学习第一门编程语言时很可能是步履维艰。你对所学的东西越感兴趣、越兴奋,你就越容易坚持下去,顺利通过学习曲线上的艰难险阻。

我真的很想开发一个iOS应用程序,因为我刚刚得到了一部iPhone,而且这项技术让我觉得非常兴奋。这股兴奋劲儿让我轻而易举地学会了Objective-C,并构建出我的第一个iOS应用程序。如果不是对这项技术感到如此兴奋,我是不可能走这么远的。

不要害怕根据你的兴奋点或者兴趣点来选择你的第一门编程语言。你的热情可以你在学习的过程中遇到难关时助你一臂之力。

难度级别

另一个主要考量因素是难度级别。有些编程语言比其他语言更难学。

我通常不建议从学习C++开始,因为同许多其他编程语言相比,学习C++很难。C++需要你直接应对管理内存和指针,以及其他一些令人不快的结构,这些都会让初学者陷入泥潭。虽然C++是很棒的语言(依然是我最喜欢的语言之一),但却并不是最容易学的语言。

类似C#、Lua、Python、Ruby或PHP这样的语言对初学者而言更容易一些。甚至还有一些专门为初学编程的人量身定做的语言,如Scratch或BASIC。

我说这些,可不是给那些真正想要学习C++这类更难的语言的人泼冷水;但是,在做决定之前,你至少应该知道你要面对的是什么,并且确定是否要选择相对容易一些的编程语言作为你的第一门编程语言。

你可用的资源

你可能还需要考虑一下,你有哪些资源可用于学习编程语言。

某种晦涩难懂的编程语言可能找不到那么多的书、在线视频或者其他可用的资源,这可能会增加你学习的难度;另外一些更流行的编程语言则会有很多在线教程、可以注册的入门课程以及书或其他学习资源,所以在选择编程语言时你一定要了解有多少资源可供你使用。虽然这一点在今天看来已经不再像以前那么令人担忧了,因为有那么多的资源可供初学者使用,但是你还是需要把这一点列入考虑因素。

你还可能需要考虑一下可供给你使用的特殊资源,如计算机或者软件。一种学起来不那么容易的编程语言却可能成为一个更容易的选择,只是因为在网上有很多现成的互动式在线教程。你可以通过网络浏览器在线学习JavaScript,而无须在计算机上安装任何软件。像C++这样的语言则需要下载一些工具和软件,这些工具和软件可能不容易找,也不容易获得。

最后一项资源,我想应该是你能找到的认识的人。你能向谁求助?如果你陷入困境,谁可以回答你的问题?谁又可以帮助你加速学习的进程?

在选择你的第一门编程语言时,我当然不会将资源作为最大的考虑因素,但这仍然是你应该考虑的因素。

适应性

最后,让我们谈谈适应性问题。不同的编程语言,要适应不同的情况和技术。

例如,在写本书的时候,C#编程语言就是适应性最好的语言之一,这要感谢微软和Xamarin公司(现为微软的一部分)。如果想学习C#,那你就不只是局限于Windows或Web编程,如今,C#可用于几乎所有的平台,所以它具有很强的适应能力。你可以用C#编写Linux和Mac的应用程序,你也可以用C#编写Android和iOS应用程序。

许多其他编程语言也具有很强的适应性。例如,Ruby已经被移植到许多不同的平台,广泛应用在许多技术领域。JavaScript也具有很强的适应性。你甚至可以使用JavaScript来控制Arduino板、开发机器人。(这一点是如何做到的,请在Simple Programmer网站上阅读我的好朋友Derick Bailey的文章。)

其他编程语言的适应性就没有这么好了。例如,如果你学习R语言或Go语言,你将被迫局限于为这些语言设计的技术和平台。

越来越多的编程语言,特别是流行的语言,都纷纷采用各种不同的技术移植到多个平台上,但还有一些语言就不会这样。因此,如果你今天想成为一名Web开发者,但明天想要做Android开发,或者你想要参与到一系列不同的平台或技术中,你可能需要考虑一下你想要学习的语言的适应性有多强。

关于选择编程语言的最后几点思考

尽管我已经给你提供了一些考虑因素,但是当你选择第一门编程语言时,我还是想要强调的一点:实际上编程语言并没那么重要。重要的是,你要挑选一些东西,并且坚持足够长的时间,才能顺利通过所谓的“学习曲线”,以获得更多的知识。很多刚入行的程序员都会感到沮丧,因为他们觉得自己恰恰没有理解这一点。

我将在第6章讨论如何学好你的第一门编程语言。

做好选择,然后坚持下去,你就会成为专家。我保证。学习的过程可能会让人厌倦或者产生怀疑——“我学的是错误的语言”,所以你可能会一直在改变选择。但是相信我,这不是个好主意。

最后,考虑一下这个场景:当我开始编程时,深入了解一门语言是程序员最重要的技能之一。于是我全身心扑在C++的书本上,努力学习这门语言的各个复杂技巧,但现在它不再是一项重要的技能了。如今编程是在更高的层次上完成的。如今编程会使用库和框架,而不只是语言自身的特性。

当然,了解一门编程语言并精通它很重要,但牢固掌握则不是一项有价值的技能。这就是我说不要太纠结于你到底该先学习哪门语言的原因。你只需要确保自己学会一门语言,并且持之以恒坚持下去(至少到当下为止)。


[3] “胶水语言”指用来连接软件组件的程序设计语言,通常是指脚本语言。(摘自百度百科)——译者序

本文摘自《软技能2 软件开发者职业生涯指南》(异步图书出品)

本书是《软技能:代码之外的生存指南》一书作者的新作,主要围绕软件开发从业者职业生涯的发展历程,描述软件开发者在职场中需要具备的各种“软技能”—如何入行成为软件开发者,如何学会第一门编程语言,如何写求职简历,如何准备面试,如何选择工作岗位,如何选择技术方向,如何拓展技术技能,如何与团队和领导融洽相处,如何以著书立说方式为自己在业界赢得赞誉,等等。

本书适合各层次的软件开发者阅读。尽管本书名义上是专门写给软件开发者的,但实际上这也是一本关于管理个人职业生涯以及如何获得成功的书,对软件开发行业的各类从业者做好职业发展规划都很有帮助。

猜你喜欢

转载自blog.csdn.net/epubit17/article/details/107504833