如何成为一个通晓多种编程语言的程序员

学习一门新的语言是一种冒险。我总是热衷于尝试新的东西——学习新的语法,了解不同的模式,乃至彻底改变思维方式。不幸的是,许多开发人员对此不以为然,甚至可能是深恶痛绝的——学习新语言,就得走出舒适区,花时间花精力来学习新的理念和方法。

这段日子,我每天都要用大约5种不同的语言来写不同的项目!

我应该先学哪种语言?

有关这方面的讨论真可谓数不胜数。很多刚进入编程社区的初学者,都会问这个问题,简直就是前赴后继。有些人建议先学不费力的,如Python和
Ruby,也有的人认为应该先学例如C、C++和GO这类难一些的低层次的内容。我要说的是我们在选择新的语言之前,应该注意以下几个要点。

类型系统

从我的经验和先前的学习路径看,这是最重要的概念之一。我很庆幸我一开始学的是C,接着尝试了C
++,一段时间之后,我又投入了Java的怀抱。然后是Scala,以及现在我开始玩Ruby。同时,我对Objective-C、Python、甚至是
OCaml也有所涉及。哦,对了,最近我正在捣鼓Swift和CoffeeScript。

如果我一开始学的是JavaScript、Python或Ruby,那么后面去理解什么是类型和变量就会非常困难。理解静态和动态以及弱类型和强类
型系统之间的区别,对于领悟语言的工作原理是至关重要的。我无法想象,如果我一开始不能掌控类型,那么后面涉及到的声明与定义,以及汇编与解释之间的差
异,会是让人多么头大的一件事。

不过,也有很多开发人员希望能有立竿见影的效果:既想快速看到结果,又不愿意过多地了解细节。他们喜欢接轨新的应用程序。最好是不用动脑子的语言,
碰到这样的他们最开心了。因为在他们眼中,掌握
integer、string和boolean是学习编程的超级大障碍。最好能够毋须分辨类、对象和方法,直接写代码:

scala> println(“Hello World!”)
Hello World!
>>> print "Hello World!"
Hello World!
2.2.1 :001 > puts "Hello World!"
Hello World!

不可否认这种途径能够给人信心,让人觉得自己学到了新的东西。

首先,请明确你属于哪种类型,摆正自己的位置。你想要探究隐藏起来的工作原理吗,喜欢深入研究本地执行吗?愿意去理解语言结构吗?又或者你只在乎能有快速的结果,不想了解虚拟机和编译工作,并且语言内部机制对你而言也一点都不重要?

从自己的利益角度考虑

你可能需要处理哪些数据?你打算写复杂的业务系统还是相对简单的CRUD创业公司?请基于可能会让自己感兴趣的内容来确定工作领域。

所以,如果你确定你想要去企业工作,那么你可以试试Java或者.NET。如果你倾向于黑客并高度注重安全问题,那么不妨学习C/C
++或Bash。如果你梦想成为一名Web开发人员,那么先掌握PHP、JavaScript或Ruby吧。如果你想要编写一些机器、机器人、汽车或其他
电子方面的程序——也行,先学C
++或Python吧。你喜欢捣鼓移动设备?那么Java、Swift或C#就应该是你的首选。如果你喜欢数学和算法,那么Lua、Erlang或R就很
适合你。等等等等,不胜枚举。总之——一切取决于你的目的和爱好。

点击查看大图

语言内部机制

你有组织化的堆栈内存吗?你在程序中传递变量时使用引用类型还是只使用值类型?你是否利用指针和析构函数来控制对象的生命周期?你是自行清理存储器还是使用相关的垃圾收集器?你是否计算和跟踪引用类型和子类?

这些都是我们平时不会关心的问题。但是有时候,它们却是一些你不得不处理的概念,所以理解内部机制很重要。虽然现在你会觉得这些概念很复杂,理解起来很难,因为终有一天,你会庆幸自己现在的选择,有道是,书到用时方恨少,不要到用的时候追悔莫及。

我应该学习哪些语言?

点击查看大图

社区——StackOverflow、Reddit

下面是一些Reddit上面有关于通用编程的内容:

你也点击http://stackoverflow.com/tags 或http://www.reddit.com/subreddits在特定的语言社区中寻求帮助。许多乐于助人的高手就在那里等你。

函数库

函数库之所以重要是因为它能让你有效利用现有资源,而不必再“重新发明轮子”。我们通常需要解决特定问题,实现业务规则,处理重要进程,从数组中找
出所需元素,利用给定字符串,过滤特定集合等等。最好语言本身或者第三方函数库能够提供一些可以加快开发进程的实用程序、辅助工具和数据结构。

下面是一些不同语言的社区函数库代码仓库:

保持对第三方支持可扩展性、开放性和易于集成等方面的审查。

从创造者/维护人员那儿获得文档和支持

你阅读文档吗?文档是不是易于理解的,全面的,最新的?更新频率如何?有多少维护人员,是否也在社区中?从文档中你能提取多少信息?你能否轻松驾驭不同的部分?

这是一个非常有效的观察报告。只要有创造者提供有助于学习和理解语言的文档,其他的其实无所谓。例如,Ruby就有不少提供文档的网站,如:https://www.omniref.com/http://ruby-doc.org/。 Scala也有相当不错的API说明书http://www.scala-lang.org/api/current/

语言的创造者对待社区的态度也很重要。他能否像Ruby创始人Matz一样愿意接受和倾听反馈?他是否像Scala之父Martin Odersky一样有着纯粹的经营方针?又或者他是否会像Clojure的发明者一样鼓励社区发展?

资源和实例——博客、GitHub代码仓库

下面是一些可作为起步指导的好例子:

至于网上教程,下面这些是很不错的门户网站,如:

不妨去看一看。

资金

没错,前面我们谈论了思想、激情,以及一些抽象的概念,但是最后所有这一切都归结到资金,也就是金钱。在选择语言之前最好先搞清楚哪种薪酬/需求相

对比较高。当然,你也可以纯粹是因为好玩而选择它。新事物总在不断地出现和发展,虽然这可以拓宽我们的视野,但学一些有用的东西还是非常重要的。在这种情
况下你有以下两种解决方案:

  • 学习当前市场上最流行/需求量最大的语言/技术/框架。这能确保你不但能找到工作,还能获得优渥的报酬。
  • 按照自己的观点学习。这可能有点难以想象。因为谁也不能打包票说下一个流行的就一定是这种编程语言。试想一下,10年前你要是说Ruby会成为当

    前社会的宠儿,谁会相信。还有Scala和GO,没人知道之后,比如说,5年以后它们会发生什么变化。如果你现在选择了它们——那么,要么你将成为高薪专
    家,因为以后会变得非常普及;要么你只是掌握了一种没用的,被淘汰的语言。

点击查看大图

点击查看大图

点击这里查看市场分析:https://gooroo.io/analytics

我要不要一次学习多种编程语言?

刚开始——不要这么做。从长远来看——是的,你应该学习多种编程语言。

当你刚踏上编程之旅时,你应该只专注于一种语言。你需要掌握所有的概念,全神贯注于学习某个特定区域。

当你已经是一个有一定经验的程序员,那情况就有所不同了。由于你已经知道内部机制和程序的工作原理,这时你需要做的就是学习新的语法和新的范式,因为很多概念在不同语言里面都是相通的。

万事开头难,一旦正确起步之后,就会像滚雪球一样越滚越顺。

总结

那么归根究底我们为什么要学习新的语言呢?因为没有哪种工具是适用于所有目标的。而我们有着不同的项目,不同的问题,不同的体系结构。也许在启用新的应用程序和选择技术堆栈之前,我们首先应该考虑的是解决实际的业务问题,然后才能选择出最切合实际的最佳工具。

不要从工具和兴趣爱好入手。要从问题着手,然后找出解决方案。只有在了解这些的基础上,你才能选出合适的语言,帮助你用最有效的方式实现业务规则。

当然,如果你通晓多种编程语言,那你肯定能更快,更高效。因为你总是可以挑选出完美的工具,用最经济的方式解决问题,并提供最有力的实现。

作者:王国峰

来源:51CTO

时间: 2024-08-30 02:12:18

如何成为一个通晓多种编程语言的程序员的相关文章

程序员想要通晓多种编程语言可以这样做

学习一门新的语言是一种冒险.我总是热衷于尝试新的东西--学习新的语法,了解不同的模式,乃至彻底改变思维方式.不幸的是,许多开发人员对此不以为然,甚至可能是深恶痛绝的--学习新语言,就得走出舒适区,花时间花精力来学习新的理念和方法. 这段日子,我每天都要用大约5种不同的语言来写不同的项目! 我应该先学哪种语言? 有关这方面的讨论真可谓数不胜数.很多刚进入编程社区的初学者,都会问这个问题,简直就是前赴后继.有些人建议先学不费力的,如Python和 Ruby,也有的人认为应该先学例如C.C++和GO这

一个三流城市小团队程序员的随笔(1)

first 好久没写博客了,由于工作太忙.太忙,或许这是我的借口吧 . "工作太忙" 并不意味着我天天在写代码.写项目,对于我现在的工作来说可能我一天十几小时的工作时间 要花费百分之九十在一些我认为没有意义而且又不得不做的事情上,而一天下来留给我认认真真写代码的时间真的已经很少很少了. 大家肯定很好奇作为一个程序员,我所说的不得不做又必须要做的事情是什么? 首先笔者在三线城市工作,而笔者恰巧又在一个三流团队工作,而这个三流团队的技术负责人又是笔者. 也就是CTO,很多程序员可能对这个职

一个让98%的Java程序员犯难的偏门问题

一个学员曾经问了我一个他在sun公司的论坛上看到的怪问题,因为这个问题一直没有人解答,加之这个问题所涉及的知识有点偏门,所以,我断言这个问题至少有98%的Java程序员不会! (之所以这么断言,是因为我遇到的高手和低手程序员,好像并没有精力去研究那些琐碎的细节,并且他们工作中似乎也不需要.如果你看到了这个问题,再去查书和思考,最终找出答案,在这之前也应该算不会,呵呵,另外,100个java程序员中有2个会这个,并不过分,现在已经有2000人看了这篇文章,至少应该有40个人会这个问题,大家不要看下

一个三流城市小团队程序员的随笔(3)

距离上一片文章好久没出来吐槽了,最近笔者又遇到了一次很坑爹的事情,这种事情一辈子经历一次就够了 . 作为一个程序员我认为改bug 就是我的全部, 直到我做了CTO之后我才发现, 我的工作中已经不仅仅只有代码了 .   就在前天,公司产品掩饰,一场非常重要决定生死存亡的演示!真是时运不齐, 河南机房的某一台物理服务器宕机, 该物理服务器 放了 好多台虚拟机 ,包括缓存服务器.一些业 务服务等.  因而导致整个系统业务瘫痪!我在一台服务器上搭建了一台临时的Redis 然后所有服务器全部指向该服务器,

一个身居中国的法国程序员谈Python与PHP

大家好,作为旅居北京的法国人Guillaume Bouriez,我跟各位一样每天生活在街巷胡同之间.我目前在豆瓣公司工作,还有个刚刚三岁的小儿子. Guillaume Bouriez 中文名:鬼庸 豆瓣:ruim  网络以及移动领域的方方面面都非常吸引我,而且我很关注中国在此时此刻正悄然发生着哪些变化.我是客服工程师出身,拿过硕士文凭,汉语学习则是在四川大学完成的.另外我对中国古代文化很感兴趣,也读过不少这方面的著作. Guillaume Bouriez是一位来自法国的开发者,目前在国内非常小资

程序员学英语的一个方法_相关技巧

你可能会问程序员学英语干嘛?是啊.一个小的普普通通的程序员可能真的不用学习英语,甚至可以说学习英语就是浪费他的时间,还不如利用这些时间去敲一些代码,看看计算机的书,或者出去跟朋友喝喝酒,都会比这个有用的多! 话说回来,如果你想做的不仅仅是一个程序员,而是要做一个工程师,一个架构师--那么学习英语就会非常有必要了. 大家都知道计算机室外国佬发明的,编程语言也是外国佬创造的,很多的软件例如各种操作系统,桌面软件基本上都是由外国人发明的.所以如果你想梦想成真,那么学习英语将是你通过成功路上必不可少的一

【2017中国开发者调查报告】你看那个人,好像一个程序员哦!

摘要:2017云栖大会北京峰会期间,即将重磅发布首份<2017中国开发者调查报告>,历时3个月的调研,7032人参与调查问卷,最终呈现出一份集开发者画像与能力的完整描绘.想了解最接地气的中国开发者现状吗?想知道中国的码农们都在经历着些什么吗?本文就为大家揭晓答案. 12月20日,2017云栖大会北京峰会期间,即将重磅发布首份<2017中国开发者调查报告>,历时3个月的调研,7032人参与调查问卷,最终呈现出一份集开发者画像与能力的完整描绘.<2017中国开发者调查报告>

如何成为一个伟大的JavaScript程序员

遥想当年还年少的时候,我的兴趣爱好就跨越了各种不相关的领域.我喜欢数学,如同我深爱历史那样.我的目标是成为像文艺复兴时期多才多艺的伟人那样--在多个领域都有出色表现.这是一个艰巨的任务--突然之间我发现自己正面临着"样样皆通,样样稀松"的危险. 我开始考虑钻研某些领域,这样至少我还可以成为一个"精通某些领域"的人.那么我该怎么做,才能既专注于某个领域,同时又能学到软件开发所需的大量知识? 这篇文章主要概述在我 5 年工作经验的基础上,我成为优秀 JavaScript

关于“我有一个好的想法,只差一个程序员”

问题描述 昨天发了一个"寻找有创业梦想的进销存软件开发高手"的帖子,被版主回复了两个链接,链接的标题是"我有一个好的想法,只差一个程序员",链接的内容是各种黑发帖人的,今天本想再讨论一下,结果发现帖子被删了,难道是因为我的回复顶撞了某位版主?诺大个CSDN的版主就这点心胸吗?!原帖:我的回复:关于"我有一个好的想法,只差一个程序员",我想说下自己的看法,不吐不快!首先介绍下我自己:本人一直从事计算机网络系统集成技术工作,算来有十多年了.这十多年来