共计 4644 个字符,预计需要花费 12 分钟才能阅读完成。
导读 | 对于处在编程世界的我们来说,现在已经走到了一个转折点。十年前,程序员们对动态语言趋之若鹜。对我们中的大部分人来说,动态语言不仅使编程变得更加简单,同时也意味着一种时尚。 |
时至今日,动态语言不再享有特别的青睐,现在的程序员使用新语言和旧语言的搭配来开发项目。我不禁要问,为了保持自身的竞争力,哪些编程语言是程序员们最需要永久掌握的?
在我们讨论哪些编程语言在未来会吃香这个问题之前,先来看看不同编程语言之间的的异同。
当我们说到动态语言时,这个“动态”实际上说的是变量类型。使用动态语言编写程序的时候,可以声明一个变量,在程序运行的过程中又可以改变这个变量的类型。与动态语言相对的是静态语言,或者叫强类型语言。比如 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# 等。现在这种类型的语言在速度上得到了长足的发展。
说了这么多,那么程序员到底应该学习哪些语言呢?下面列举了五种在未来工作中有丰富需求的语言。除此之外,我还列举了第六种语言,作为一个“honorable mention”。
JavaScript,HTML5 和 CSS3:从技术上来说,HTML5 并不是一种语言,而是一项技术,这项技术和 CSS3、JavaScript 一起使你能够构建基于 Web 的应用。你可以创建运行在浏览器中的软件,这样做的好处是,你构建的应用将会拥有前所未有的移植性——几乎可以在所有的设备上运行,包括手机。几年前,Facebook 开始使用 HTML5 来构建他们的手机应用,他们超前了这个时代,那时 HTML5 还不成熟。一段时间后,他们回归了传统模式。过去两年中,浏览器纷纷开始实现最好的 HTML5 技术,对 JavaScript 的需求随之增加。如果想保持你的竞争力,这是一项你必须学习的技术。(在服务器端,很多大公司以 Node.js 的方式使用 JavaScript)。
JavaScript 示例:
下面这个例子展示了 JavaScript 是怎么将一个函数存储到变量中,然后又传递给另外一个函数的。JavaScript 方面的资源非常多,权威指南,参考 Mozilla Developer Network,新手教程,参考以下网站。
var myfunc = function() {alert(‘hi’);
};
setTimeout(myfunc, 2000);
C#:在 15 年前,Microsoft 创造了 C#,从那时起,C#不断发展壮大。C#的语法类似于 Java(同时也类似于 C ++)。C# 编程软件首选 Visual Studio,免费版和付费版都有。
C#是一种强类型的语言,带有一个虚拟机。最初的发行版对函数式编程的支持非常少,在 2006 前后,Microsoft 为这门语言加入了一些函数式编程的特征。和 Java 一样,C# 也有自己的垃圾回收机制。
C# 示例:
示例定义了一个叫做 Program 的类,Program 包含一个叫做 Main 的函数。程序从 Main 函数开始运行。Main 函数定义了一个强类型的整形变量 x,并且在屏幕上打印 x 的值。学习 C# 方面的更多知识,移步 Microsoft’s official site。
using System;
class Program {static void Main() {
int x = 1000;
Console.WriteLine(x);
}
}
Java:Java 即将迎来自己的 20 岁生日,时至今日,Java 还在不断的发展、成熟。在 2004 年,我的一位同事说这是一门“玩具语言”。经历了早期的成长之痛后,Java 早已不是一门玩具语言:它支撑起了不可胜数的网站和数据库,开源 office 套件也是用 Java 开发的。现在来看,Java 的前景依旧一片光明。
Java 是一种强类型的语言,运行在自带垃圾回收机制的虚拟机中。尽管不是一种函数式语言,还是带有一些函数式编程的特征。
Java 示例:
Java 和 C#在很多方面类似。在 Java 程序中,从 main 函数开始运行。像上面提到的 C# 示例一样,在 main 函数中定义了一个整形的强类型变量 x,并且在屏幕上打印 x 的值。学习更多 Java 知识,参考 official documentation。
public class HelloWorld {public static void main(String[] args) {
int x = 1000;
System.out.println(x);
}
}
PHP:PHP 是一种易用的通用编程语言。其语法和 Java、C++ 类似。在一个非常简单的层次上来说,PHP 用于在网页中嵌入可变化的文本内容。比如说,在你的网页中可能存在打印当前日期的 PHP 代码,当你把网页代码送到浏览器,相应的 PHP 代码就会在屏幕上打印出当前日期。PHP 能做的远比在网页上打印日期多。PHP 的类库能够操作数据库(几乎你能想到的任何数据库都能处理),能进行科学计算,能处理文本。PHP 的未来依旧一片光明。
PHP 示例:
PHP 代码嵌入在 HTML 文档之中。这段 PHP 代码将时区设置为 Los Angeles,然后打印出当前时间。浏览器解析 HTML 文档的时候,PHP 代码部分被代码的输出结果所取代。所以最终显示在屏幕上的是“Hello! The current time is”,后面是当前时间。学习更多 PHP 相关知识,参考这个网站。
<html>
<body>
Hello! The current time is
<?php
date_default_timezone_set(‘America/Los_Angeles’);
echo (strftime(‘%c’));
?>
</body>
</html>
Swif:这是一门全新的语言,苹果制造。一般来说我不会推荐人们学习一门全新的语言。但是要知道我们说的是苹果,并且现在你已经能使用这门全新的语言来创建 iOS 应用了。事实上,已经有迹象显示 Swift 将会成为 iOS 平台编程的未来。Swift 的语法非常像 JavaScript,但是没有分号和括号。
Swift 是一种强类型的语言,运行在带垃圾回收机制的虚拟机中。
Swift 示例:
示例中定义了一个叫做 str 的变量,存储一个字符串。尽管没有明确指出 str 的类型,但是 Swift 是强类型的,编译器通过赋值语句右边的字符串判断出 str 是字符串类型。学习 Swift 的更多知识,参考苹果官网的相关页面。
var str =“Hello, World!”println (str)
Erlang 是爱立信的工程师在 1986 年发明的编程语言。这本来是通信领域专用的编程语言,现在已经发展成一门通用的编程语言,并且在基于云的、高性能的并行计算中大行其道。现在人们使用 Erlang 编写出了一些强大的软件,比如说 CouchDB 和 Riak。这是一门与众不同的语言,其处理字符串的方式非常奇怪,但是也很容易学习。
我们应该学习 Erlang 吗?虽然需要 Erlang 的工作不多。但是,如果你真正掌握了这门语言,那你很可能得到一份极好的工作。这是一个抉择。在真正掌握这门语言之前,你需要投入大量的精力,一旦你学成,回报也很高。
Erlang 示例:
下面的示例来自这篇博客,这是“hello world”示例的复杂版本。记住,Erlang 是一门成熟的语言,如果你真的打算学习这门语言,参考前面提到的博客和这个网站。
-module(hello).
-export([start/0]).
start() ->
spawn(fun() -> loop() end).
loop() ->
receive
hello ->
io:format(“Hello, World!~n”),
loop();
goodbye ->
ok
程序员肯定是在哪都能找到工作,但不一定是你特别喜欢的职位,关键还在于学习真正能用得着的技术,找到那份属于你的好工作。学习 JavaScript、C#、Java、PHP(甚至包括 C ++)不会有错。如果你开始学习 Swift,未来的就业形式一片大好。如果你想尝试一把高性能编程,看看 Erlang,尽管需要 Erlang 的工作可能不会马上出现。不管你现在在致力于哪一门语言,都要脚踏实地的学到精,这是关键。
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)