Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


接下来的两年你可能需要这五种语言

2014-8-6 10:20    评论: 10 收藏: 4 分享: 3    

时至今日,动态语言不再享有特别的青睐,现在的程序员使用新语言和旧语言的搭配来开发项目。我不禁要问,为了保持自身的竞争力,哪些编程语言是程序员们最需要永久掌握的?

对于处在编程世界的我们来说,现在已经走到了一个转折点。十年前,程序员们对动态语言趋之若鹜。对我们中的大部分人来说,动态语言不仅使编程变得更 加简单,同时也意味着一种时尚。时至今日,动态语言不再享有特别的青睐,现在的程序员使用新语言和旧语言的搭配来开发项目。我不禁要问,为了保持自身的竞 争力,哪些编程语言是程序员们最需要永久掌握的?

在我们讨论哪些编程语言在未来会吃香这个问题之前,先来看看不同编程语言之间的的异同。

静态语言 vs. 动态语言

当我们说到动态语言时,这个“动态”实际上说的是变量类型。使用动态语言编写程序的时候,可以声明一个变量,在程序运行的过程中又可以改变这个变量的类型。 与动态语言相对的是静态语言,或者叫强类型语言。比如C++和Java就是强类型的语言,而JavaScript,PHP和Perl是动态类型的语言。

在C++中,声明变量的时候必须同时指定变量的类型。在程序运行的过程中,如果试图去改变这个变量的类型,编译器就会报错。这在Java中也是一样。

但是JavaScript不一样,在JavaScript程序运行过程中可以改变变量的类型。事实上,在声明变量的时候就不需要指定这个变量的类型,在使用变量的时候,可以先把一个整数赋值给这个变量,然后又用一个字符串覆盖这个整数,这在动态类型的语言中都是允许的。

尽管动态语言在最近才大行其道,可实际上这个概念在50年前就已经提出来了。

函数式语言

随着动态语言的发展,人们对函数式语言的兴趣也越来越大。在函数式语言中,函数本身可以被存储在变量中,存储在变量中的函数又可以作为参数传递给另外的函 数。现在的大多数语言都在一定程度上支持函数式编程。比如说C++,C++允许程序员将指针传递给函数。JavaScript等一些语言使函数的传递变得 更加容易。所以,一般认为C++不是一个真正意义上的函数式语言,而认为JavaScript是函数式语言,而Haskell一般被认为是函数式语言的绝 佳示例。

垃圾回收机制

理论上来说,只要你正确书写代码,你就不会有任何bugs。这听起来很美好。可实际上,当你和许多其他程序员合作完成一个大项目时,有一个bug会经常出现,这就 是内存泄露。你定义了一个变量,使用完这个变量之后却没有及时回收这部分内存,这时我们就说发生了内存泄露。如果发生了内存泄露又没有及时发现,随着程序 运行时间的增加,程序越来越大,直到消耗完系统的所有内存,然后系统崩溃。sounds terrible!

你可能会说,每次使用变量之后及时释放内存,内存泄露不就不会发生了?想法是好的,可实际情况可能比这要复杂的多。比如说,你申请了一个链表来存储数据,这 个链表被传递到另外一个函数,这个函数是别人编写的,在别人编写的这个函数中,将这个链表复制了一份,但是你并不知道,你说是应该删除这个链表还是继续保 留?基于这种情况,程序员们想到了一个变通的办法:将内存回收的工作交给系统来做。当你不再使用某个变量,系统通过扫描内存找到这个不再使用的内存,然后 主动回收,这就叫做垃圾回收机制。对新开发出来的语言来说,这是一个非常重要的特征。垃圾回收背后的思想是使编程更加容易,从而让程序员将精力放在创造伟 大的软件之上。

需要说明的是,确实存在几种不同的垃圾回收机制:一种是系统定期扫描内存,发现那些不再使用的内存;另外一种是系统为每一个变量保留一个tab,一旦发现变量不再使用,马上删除之。从技术上来说,后者并不是一种垃圾回收机制,而是“引用计数”,但是达到的效果是一致的。

虚拟机


当Java在20世纪90年代中期横空出世的时候,人们对它不是直接将代码编译成汇编语言这一点十分在意。和C++相反,Java在编译的时候先把程序编译 成一个叫字节码的中间代码。在运行的时候,系统调用虚拟机执行字节码,有时候甚至只是将字节码编译成汇编代码。这种编译方式刚刚出来的时候,程序员们抱怨 其速度慢,当然现在已经不成问题。许多语言采用虚拟机的方式运行,比如说前面提到的Java、C#等。现在这种类型的语言在速度上得到了长足的发展。

12下一页
查看其它分页:

发表评论


最新评论

我也要发表评论

soli 2014-8-12 12:46
把 Java 换成 c/c++,把 ErLang 换成 golang
回复
hyplove 2014-8-9 23:42
又是Java,又是linux shell 又是oracle plsql 又是oracle管理型语言,,,太多了,,慢慢学吧  还想学python 还想学go,,,,顾不了了
回复
粱小无拆 2014-8-7 17:43
Python大法好。
回复
koolar 2014-8-7 13:33
一个也不会啊!!!
回复
领导噶了 2014-8-6 11:33  新浪微博网友评论
#爸爸去哪儿#
回复
领导噶了 2014-8-6 11:33  新浪微博网友评论
,@Linux中国 #Lady Gaga#@爱马克 @Linux中国 p
回复
领导噶了 2014-8-6 11:33  新浪微博网友评论
[吃元宵][织女]@爱马克 @远方的家蔡丽娜 @麦克风德语
回复
基调网络官方微博 2014-8-6 11:03  新浪微博网友评论
无论在哪儿工作的程序员,学习JavaScript、 C#、Java、PHP(甚至包括C++)不会有错。如果你开始学习Swift,未来的就业形式一片大好。如果你想尝试一把高性能编程,看看 Erlang,尽管需要Erlang的工作可能不会马上出现。
1 回复
chocolatewj 2014-8-6 11:03  新浪微博网友评论
我觉得还是最后一句话实在。
回复
云上旭 2014-8-6 11:03  新浪微博网友评论
What's the difference between Dynamic-Weak PHP/Js to Static-Strong Java === PS: It's not perfect enough, because less of PHP/HackLang run under HHVM.
1 回复

热点评论

基调网络官方微博 2014-8-6 11:03
无论在哪儿工作的程序员,学习JavaScript、 C#、Java、PHP(甚至包括C++)不会有错。如果你开始学习Swift,未来的就业形式一片大好。如果你想尝试一把高性能编程,看看 Erlang,尽管需要Erlang的工作可能不会马上出现。
1
云上旭 2014-8-6 11:03
What's the difference between Dynamic-Weak PHP/Js to Static-Strong Java === PS: It's not perfect enough, because less of PHP/HackLang run under HHVM.
1
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。