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

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

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

我应该先学哪种语言?

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

类型系统

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

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

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


  1. scala> println(“Hello World!”) 
  2. Hello World! 
  3. >>> print "Hello World!" 
  4. Hello World! 
  5. 2.2.1 :001 > puts "Hello World!" 
  6. 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-10-31 18:44:26

程序员想要通晓多种编程语言可以这样做的相关文章

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

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

整理类库-新手Net开发程序员想知道如何整理C#类库?

问题描述 新手Net开发程序员想知道如何整理C#类库? 刚工作不久带我的师父在做框架,让我帮忙整理类库,我不知道如何下手,求有经验的大神指导一下(最好能具体告知整理类库的步骤和注意事项)谢谢了

.net程序员想转大数据云计算方面的可行性,或者有什么好的学习路线!

问题描述 .net程序员想转大数据云计算方面的可行性,或者有什么好的学习路线! .net程序员想转大数据云计算方面的可行性,或者有什么好的学习路线!正如我所说的,我是学习.net出身,自认为基础还可以,对大数据和云计算方面充满了好奇和向往,就想找个这方面的工作,并且想学习学习这方面的知识,不知道各位有没有好的意见,或者说这样可行吗? 解决方案 补充一下,我是本科生,所以基础知识方面应该还可以! 解决方案二: 云计算本身没有什么好学的,除非你是做基础架构的运维.云计算是商业模式而不是技术,这种模式

关于程序员之间丧心病狂的鄙视链——编程语言篇

据说,程序员之间存在着极其丧心病狂的鄙视链,今天就说一下编程语言工程师之间的鄙视链,看看你在哪一层. 写汇编语言的工程师都鄙视写C语言的工程师 写C语言的工程师都鄙视C++工程师 C++工程师鄙视Java工程师和C#工程师 Java工程师和C#工程师则相互鄙视 然而,所有的工程师都鄙视PHP工程师. 想到我所在公司的工程师都是写PHP的,不禁默默心疼他们. (以上形象均出自作者手绘,转载请注明出处)

程序员想玩转大数据:需要知晓的12种工具

无论是在构建大数据的应用程序,还是仅仅只想从开发的移动应用中得到一点点启发,程序员现在比以往任何时候都需要数据分析工具.这绝对是一个好东西,所以很多公司从程序员的需求和技能出发,构建了一些数据分析工具.GigaOm的记者Derrick Harris列举了十二个工具: 在过去的几年里,Derrick看到了很多初创公司,各类项目以及开发工具等等,它们都旨在为程序员带来先进的数据分析能力.有时候,程序员们会使用简单的脚本开发出强大的显示效果,或者在http://www.aliyun.com/zixun

程序员想要高工资,你的选择可能不应该是硅谷

摘要: 美国极客收入最高的城市并不是硅谷湾区所在的旧金山和圣荷西,而是西雅图,其次是休斯顿. Bloomberg Rankings统计了2008年以来美国主要城市STEM专业(科学.技术.工程.数学)毕业生 美国极客收入最高的城市并不是硅谷湾区所在的旧金山和圣荷西,而是西雅图,其次是休斯顿. Bloomberg Rankings统计了2008年以来美国主要城市STEM专业(科学.技术.工程.数学)毕业生的月收入和收入涨幅.西雅图无论是平均工资水平(14930美元)还是累计涨幅(18.8%)都是最

程序员想找好工作?那就学好Linux吧!

近期,USNews最新公布了3721.html">2014年全美最佳职业TOP100,其中软件开发者名列该榜单榜首.软件开发者从事在各行各业,其中Linux人才是软件开发者中"僧少粥多"的一份职业.而从人们使用的手机到最大型的超级计算机集群,无一不在使用Linux内核和Linux编译的软件,Linux的应用很广泛.有新的调查显示,Linux人才是为数不多至今依然热门的职业之一. 然而,很多技术精湛的软件工程师都缺乏或没有Linux编程方面的经验,Liunx专业人才无论在

想成为优秀的程序员这些码德不能缺

我把这些看成是作为一个程序员的基本素质,多数是编码之外的事情: ●代码每天备份:(预防意外导致的任何损失) ●上传代码时写清楚log信息:(为维护这个模块的人着想,有可能是你自己) ●提供接口时不要把问题抛给使用接口的人,升级或者变更接口时不要删掉原来的接口:(为使用你接口的同事着想) ●变量命名要见名知意:(起码不能误导别人) ●在工程中新建一个doc文件夹将项目相关的文档放在该目录下,方便后面维护的人员理解项目和代码:(为维护这个模块的人着想,有可能是你自己) ●签署bug或者转办bug时写

你是想做个安静的程序员,还是去创个业呢?

其实,很多人对程序员"无聊""呆板"的误解都是来自于网络上的段子.而在现实生活中,我们接触到的程序员同学,他们也是非常活泼.开朗,还是充满激情的一群人.移动互联网时代,基本上所有互联网公司的CTO都是程序员出身,所以程序员玩创业并没有什么好稀奇的.本期移动开发精英俱乐部的话题就围绕" 程序员如何创业?"这个话题.文章系ITOM管理平台OneAPM编译整理. 程序员为什么要创业呢? 熊欣_主持人:程序员也算是个高薪行业,大家聊聊,为什么要创业呢?