一、计算机语言发展史
计算机已经成为人大脑的延伸
计算机已经成为我们这个时代的核心设备,每时每刻都需要它。计算机也不再是大家以前印象中的台式机、服务器,已经演变成了我们身边随处可见的物体。比如:手机、平板电脑、笔记本,以及很多人没意识到,但实际上设备内部包含“计算机”的设备。比如:电视机、微波炉、汽车,甚至小孩玩的智能小机器人等。
可以这么说, 计算机已经成为了人类身体的延伸、大脑的延伸,成为不可或缺的一部分。未来,计算机将真的进入人体、进入大脑,真正成为人体的一部分。比如,在科幻电影《黑客帝国》中,主角被超级针头插在颈部后方,便能使他快速学习,改变大脑神经网络,几秒就成为功夫高手,如图 1-1 所示。
算法是计算机的灵魂,编程语言是塑造计算机灵魂的工具
计算机是如何工作的?对于普通人来说,这很神秘。让计算机具备“灵魂”,可以按照人的意志运行,甚至某天按照计算机自己的意志运行(如果这一天实现,科幻电影《终结者》中的场景也会成为人类社会的可能选项),其核心就是“算法”。“算法就是计算机的灵魂”算法的实现又依赖于“计算机编程语言”。
计算机编程语言的发展,是随着计算机本身硬件发展而发展的。硬件速度越快、体积越小、成本越低,应用到人类社会的场景就会越多,那么所需要的算法就会越复杂,也就要求计算机编程语言越高级。
最初重达几十吨但一秒只能运算 5000 次的 ENIAC(世界上第一台计算机),只能做非常小的应用,比如:某些情况的弹道计算。现在任何一个人的手机运算能力都可以秒杀那个年代地球上所有计算机运算能力的总和。
计算机编程语言的发展历经了从低级到高级发展。发展的核心思想就是“让人更容易编程”
越容易使用的语言,就有越多人使用;越多人使用,就有越多协作;越多协作,就可以创造越复杂的物体;现代社会,一个软件动辄几十人协作、几百人协作、甚至几千人协作也成为可能,这自然就为开发复杂软件提供了“人力基础”。这是一个人类普遍的社会现象,越容易使用的工具,通过使用数量,通过大量人的协作,彻底改变某个行业甚至人类社会。
计算机语言经历了三代:第一代是机器语言,第二代是汇编语言,第三代是高级语言。
第一代语言:机器语言(相当于人类的原始阶段)
机器语言由数字组成所有指令。当让你使用数字编程,写几百个数字、甚至几千个数字,每天面对的是纯数字,我大胆预测:“程序员群体 100%会有精神问题”。
机器语言通常由数字串组成(最终被简化成 01),对于人类来说,机器语言过于繁琐。使用机器语言,人类无法编出复杂的程序。如下为一段典型的机器码:
1. 0000,0000,000000010000代表 LOAD A, 16
2. 0000,0001,000000000001代表 LOAD B, 1
3. 0001,0001,000000010000代表 STORE B, 16
第二代语言:汇编语言(相当于人类的手工业阶段)
为了编程的方便,以及解决更加复杂的问题。程序员开始改进机器语言,使用英文缩写的助记符来表示基本的计算机操作。这些助记符构成了汇编语言的基础。如下是一些常见的汇编语言助记符(单词)比如:LOAD、MOVE 之类,这样人更容易使用了。识别几百、几千个单词,感觉要比几百几千个数字,美妙多了。汇编语言相当于人类的手工业社会,需要技术极其娴熟的工匠,但是开发效率也非常低。
汇编语言虽然能编写高效率的程序,但是学习和使用都不是易事,并且很难调试。另一个复杂的问题,汇编语言以及早期的计算机语言(Basic、Fortran 等)没有考虑结构化设计原则,而是使用 goto 语句来作为程序流程控制的主要方法。这样做的后果是:一大堆混乱的调转语句使得程序几乎不可能被读懂。对于那个时代的程序员,能读懂上个月自己写的代码都成为一种挑战。汇编语言仍然应用于工业电子编程领域、软件的加密解密、计算机病毒分析等。
第三代:高级语言(相当于人类的工业阶段)
对于简单的任务,汇编语言可以胜任。但是随着计算机的发展,渗透到了工作生活的更多的方面,一些复杂的任务出现了,汇编语言就显得力不从心(应该说是程序员使用汇编语言解决复杂问题出现了瓶颈)。于是,出现了高级语言。像我们熟知的 C、C++、Java 等等都是高级语言。
高级语言允许程序员使用接近日常英语的指令来编写程序。例如,实现一个简单的任务:A+B=C ,使用机器语言、汇编语言和高级语言的的实现如下图 1-2 所示(OH MY GOD~~).
从上面这个简单的加法计算,可以看出越到高级语言,越接近人的思维,人使用起来就越方便。
高级语言的出现,尤其是面向对象语言的出现,相当于人类的工业社会,高级语言极其易用,编程门槛和难度大大降低,大量的人员进入软件开发行业,为软件爆发性的增长提供了充足的人力资源。目前以及可预见的将来,计算机语言仍然处于“第三代高级语言”阶段。
未来简史中关于计算机和人的核心思想有如下三点:
1. 生物也是算法,而生命过程就是进行数据的处理
2. 智能和意识从碳基进入到硅基,实现人类的终极进化
3. 硅基智能生命的进化速度将是指数级的,从而实现“人到神的进化”
二、常见编程语言介绍
Tiobe 发布了最新一期编程语言欢迎度榜单,其榜单根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如 Google、Bing、Yahoo!)以及 Wikipedia、Amazon、YouTube 统计出排名数据。
TOP5 几乎没有变化,Java 和 C 语言牢牢占据前两名。Python相较去年上升一位进入 TOP3,C++下降一位,Visual Basic .NET 也超越 C#上升到 TOP 行列。
C语言
C语言诞生于 1972 年,可以称之为现代高级语言的鼻祖,由著名的贝尔实验室发明。C 语言是人们追求结构化、模块化、高效率的“语言之花”。在底层编程,比如嵌入式、病毒开发等应用,可以替代汇编语言来开发系统程序。在高层应用,也可以开发从操作系统(Unix/Linux/Windows都基于 C 语言开发)到各种应用软件。
老鸟建议:
大学开这门课请一定认真学习,而不要觉得老套,那是经典;C 语言在现代流行程度仍然排名前三。
C++语言
作为 C 语言的扩展,C++是贝尔实验室于80 年代推出的。C++是一种混合语言,既可以实现面向对象编程,也可以开发 C 语言面向过程风格的程序。
C语言让程序员第一次可以通过结构化的理念编写出易于理解的复杂程序; 尽管 C 语言是一个伟大的语言,但是程序的代码量达到 30000 行以上时,程序员就不能很好的从总体上把握和控制这个程序。 因此,在 80 年代初期,很多软件项目都面临无法解决的问题而不能顺利进行。 1979 年,贝尔实验室发明了 C++。 C++最初的名字叫做“带类的 C”,后来才改名叫 C++。国内通用叫法:“C 加加”,国际通用读法“C plus plus”。
C++语言在科学计算、操作系统、网络通讯、系统开发、引擎开发中仍然被大量使用。
Java语言
由美国 SUN 公司(被 oracle 公司收购)发明于 1995 年,是目前业界应用最广泛、使用人数最多的语言,连续多年排名世界第一,可以称之为“计算机语言界的英语”。
Java广泛应用于企业级软件开发、安卓移动开发、大数据云计算等领域,几乎涉及 IT 所有行业。关于 Java 的发展历史和特性,将在后面专门介绍。
JavaScript语言
JavaScript是一种脚本语言,已经被广泛用于Web 应用开发;应用范围越来越大,重要性越来越高。目前,流行的 H5 开发的核心其实就是 JavaScript 语言。
Python语言
Python发明于 1989 年,语法结构简单,易学易懂;Python 具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。
Python广泛应用于:图形处理、科学计算、web 编程、多媒体应用、引擎开发;尤其是在未来大热方向机器学习和人工智能上有非常大的潜力。
PHP语言
PHP 原始为 Personal Home Page 的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。PHP 语言,一般用于 WEB 开发领域;大量的中小型网站以及某些大型网站使用 PHP 开发。
Object-C和 Swift 语言
Object-C通常写作 Objective-C 或者 Obj-C 或 OC,是根据 C 语言所衍生出来的语言,继承了 C 语言的特性,是扩充 C 的面向对象编程语言。OC 主要用于苹果软件的开发。
Swift,苹果于 2014 年 WWDC(苹果开发者大会)发布的新开发语言,可与 OC 共同运行于 Mac OS 和iOS 平台,用于搭建基于苹果平台的应用程序。
C#(c sharp)语言
C#是微软公司发布的一种面向对象的、运行于.NET Framework 之上的高级程序设计语言。C#在基于 windows 操作系统的应用开发这一领域在取代 C++,占据主导地位。“成也萧何败也萧何”,C#的微软身份,也成为了发展的阻力,在其他 IT 领域应用较少。
Kotlin语言
Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。
Kotlin 已正式成为Android 官方支持开发语言,并且是一种可以兼容 java 的语言。
Go语言
Go(又称 Golang)是 Google 的Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
易语言
易语言是一门以中文作为程序代码编程语言,其以“易”著称,创始人为吴涛。易语言早期版本的名字为 E 语言。其最早的版本的发布可追溯至 2000 年 9 月 11 日。
Fortran语言
世界上第一种高级语言,IBM 公司在 1954 年提出的,主要用在需要复杂数学计算的科学和工程领域。现在仍然被广泛使用,尤其是工程领域。Fortran 虽然适合编写科学计算方面的程序,但是不适于编写系统程序。
Basic语言
虽然易学,但功能不够强大,应用到大程序的有效性令人怀疑。已经逐步退出历史舞台。
COBOL语言
于 1959 年提出。主要用于大量精确处理数据的商业领域中,比如金融、银行。今天,仍然有超过一半的商业软件使用 COBOL 编写。有将近 100 万人使用 COBOL 编程。
Pascal语言
Pascal 的名称是为了纪念十七世纪法国著名哲学家和数学家 Blaise Pascal 而来的,它由瑞士 Niklaus Wirth 教授于六十年代末设计并创立的。Pascal 语言语法严谨,层次分明,程序易写,可读性强,是第一个结构化编程语言。由于没有大厂商和政府的支持,只是限于大学教育这一块。
三、未来的发展方向
为什么担心软件开发人才饱和是多余的?
很多未进入或刚进入软件行业的朋友,特别担心一个问题“这么多人学,会不会饱和?”。这其实是杞人忧天,越多人编程,才能为软件行业提供巨量的人力资源,才能实现我们以前都不敢想的应用开发。要以发展的眼光看问题,而不是静态的眼光。
越多人编程,越多应用需要做,越多应用需要做,更需要越多人编程。这就像一个农夫刚刚进入工业社会,担心服装工厂工人招满了怎么办? 他没有想到工业发展后,钢铁厂也需要工人、汽车厂也需要工人。年轻朋友请记住“软件行业发展永无止境,将会整合人类现有所有行业,也会创造很多新的行业”。
未来 30 年必将是软件人才的世界
未来 30 年的世界必将是软件人才的世界;除了普通软件的应用,大批的人工智能应用也将出现;未来自动驾驶、自动翻译、机器人保姆甚至机器人女友都会进入我们的生活,甚至计算机编程和基因工程结合,长生不老都能实现;有兴趣的童鞋,推荐大家看《未来简史》这本书,把握一下未来的脉搏。 请发挥我们年轻人的想象力,尽情的在 IT 的世界中挥洒吧!
附:未来简史,人类社会的终极变革:从智人到神人
经过7万年的演化,人类主题已从饥荒、瘟疫和战争,转变为永生、快乐和神人(拥有特定的超能力)。宗教创建秩序,科学寻求力量,二者共同推动人类文明的演进。人文主义成为我们的信仰,人类相信自由意志、个体价值。
但生命工程等技术的发展已经颠覆了人文主义的基石,我们发现并没有所谓的自由意志,人类也不是什么不可分割的个体,也没有灵魂,只找到了基因、荷尔蒙、神经元,遵守着世界共同遵循的物理和化学原则。大脑和意志可以被操控。“个人”概念在逐步瓦解消融。
人是一堆算法,人的感觉、情绪、想法,都是算法在支配,生命就是进行数据处理。人类正在利用人工智能、生物科技,不断自我升级,大部分人将沦为“无用阶层”,一小部分人则进化成“神人”,统治世界。
以人为中心的世界观将转换为以数据为中心。取代人文主义的将是数据主义,它将以最大化数据流量和系统效率为价值目标。在未来有可能不再需要人类,这是我们应该认真思考的问题。
但科技的发展并不会带来一定的结果,同样的科技也会创造出非常不一样的社会,未来无法真正预测,仍有无限可能。
用心做到极致,坚持改变命运
欢迎大家点击了解百战程序员并评论分享的你的想法和建议,在下一篇文章中,我们一起走进Java语言的大门。