当前课程知识点:程序设计基础 > 第一章 编程初步 > 师生问答 > 师生问答二:语言选择
老师 您好
我在您课上听到过很多种计算机的语言
那为什么我们会有这么多种语言呢
关于这个问题呢 我觉得是这样
咱们自然语言当中其实产生这个什么英语啊 汉语啊
这个是由于这个文化的差异
但是 大家觉得 计算机嘛 都是这个一起发明的
就产生同一个语言就得了嘛
为什么还会产生这么多语言是吧
我觉得我们提到过一点啊
计算机语言实际上是为了与计算机沟通来设计出来的
那人们实际上遇到一类的问题
发现已有的这些计算机语言呢
并不适合于表达这一类的问题
不适于针对这一类的问题
跟计算机做沟通的时候
我们就会尝试设计新的语言
比如说 我们课上这个 给大家列了很多语言
其中有一个语言 不知道有没有注意
叫PHP的语言
这是一种呢
针对于方便这个网站的服务器程序设计来设计出的一种语言
那这种语言呢 它提供更多的
既然是为了方便网站设计嘛
它提供了更多的这种 网络访问啊 电子邮件相关的啊
数据库相关的 以及这个字符串处理等等这样地功能
使得这个网站的设计 更加的方便
其实很难想象 如果大家以后学的多了
就算把这个C语言学完了
也很难想象大家从头用C语言写一个网站 很困难
再比如呢 这个Mathematica语言
大家听这个名字 实际上就是英文的这个数学的这个词
所以听这个名字就知道
是为了数学而设计出的一种程序设计语言
那它提供了更多的这种数学函数
甚至于这个方程的求解 方程组的求解
求导 偏微分方程等等等等
非常高深的这种数学的工具都在里面
甚至于说呢 它还提供了一些这种绘制功能
可以让你们很快的画出一种这个函数的非常美妙的一些图像
比如说我这里给大家举一个例子
很炫的这种3D的这个函数图像
那我觉得还有一种另一个方面啊
有的时候是选择一个语言呢
是由于操作系统的这种限制或偏好
比如说呢 同学们应该都听说过的手机上的安卓系统
在这个安卓系统上的应用呢
就比较推荐用这个Java语言来书写
那反过来呢 另一个这个苹果手机的上面的应用
就比较推荐Objective-C那种语言来书写
这是这个关于操作系统的一些偏好
那么 如果从这个程序执行的角度
会有三种类型 我认为有三种类型
一种是C语言等等为代表的这种叫“编译方式”
他呢 就是像咱们之前演示过的
在程序执行之前 需要先做一个编译的过程
把这个程序呢
翻译成一个计算机能认识可执行的一个文件
然后再把这个文件交由操作系统来执行
那第二种呢 是像PHP 我们刚才提到的
这种是不将这个程序做一个这种事先的翻译
而直接将个程序呢交给一个解释器来解释执行
这个解释器拿到的就是一个咱们写出来的这种文本的程序
然后它会读这个文本当做字符串一样
然后做对应的处理
读到一个功能
然后就去执行对应的功能
所以这种情况呢
其实很适合来表达一个网页
那么网页的这种形式
其实就是要把一段文本
翻译成一个咱们看到的这个很炫的网页的图像啊
甚至动画啊这个效果
那第三类呢
我觉得是这个以Java为代表的这种混合式的
结合了两种特点
那么Java语言呢就会将这个程序先编译
成一种中间的语言
他认为比较方便表达的这个中间语言
这个中间语言呢
再交给解释器来解释执行
大概有这么三种
那么其实随着这个语言的发展啊
这个大家也觉得这个这三种方式就是各有利弊
所以 很多语言呢
开始支持编译混合解释的方式
两种方式都可以
你可以选择把这个程序编译成一个可执行的文件
也可以直接把这个程序交个解释器来执行
那在我们这么多的语言当中
哪一种语言是更好的呢
为什么我们要选择C++的这样一个语言呢
是因为它更有优势么
这个问题我可不敢这么说
我可不敢说C++语言是最好的
你可以尝试把这个问题发到一些这个程序员的网站上
相信会引起很长时间的争吵
甚至于有这个调侃程序员的一个笑话
就是说这个有一天 女神跟这个程序员说
你要是能发一个帖子把它这个顶上十大
我就跟你走 干什么都行
然后程序员就去发了
然后真的把这个帖子顶上十大了
然后女神就很好奇
说你发了一个什么帖子啊
程序员说 我发了一个帖子叫 我认为PHP是最好的语言
然后就吵开了
然后女神就说 好吧
我服了 我跟你走 你干什么都行
然后程序员说不行 今天不行
这个我还得去说服他们PHP就是最好的语言
就可能在每一个人的心中都会有一个这种答案
但是没有一个说哪一种语言是大家公认的最好的语言
但是呢 如果说这个使用的人数上
如果我们可以用百度来搜索一下这个计算机语言排名
大家可以发现一个TIOBE这样一个软件公司
他们通过搜索引擎呢做了一下统计
统计了一下这个各种语言的流行程度
就是这个用户的人数的排名
每个月更新一次啊 更新的挺勤的
大家可以看到这个月的排名呢
从最新这个排名中
我们可以看出 C和Java语言是排在前两位的
那C++呢其实也没有靠后多少
也是名列前茅的
但是这里呢 只是说这个语言使用人数
并不代表说就是排第一的是不是就是最好的
那我们为什么会选择C++语言呢
那它有哪些特点
好 那这个问题我觉得可以从我们的这个
C和C++语言的这个历史说起
最早呢 1970年
大家知道这个第一台计算机什么时候发明的
1970年的时候其实也没过二十几年
也是很早的一个时间
1970年 Ken这个人首先研制出了B语言
然后过了两年
1972年的时候
Dennis觉得这个B语言有很多的缺陷
在B语言的基础上呢
他为了研制这个UNIX的系统
在B语言的基础上完善了一下
发展出了C语言
所以呢 这个人被称为C语言之父
那到后来
1983年的时候 Ken和Dennis这两个人
就因为C语言和UNIX系统这个杰出的成就
获得了咱们计算机界的诺贝尔奖 我们叫图灵奖
咱们在上课的时候也说了
图灵这个人就是理论计算机的创始人对吧
那诺贝尔那个年代比较早
他那个时候还没有计算机
所以这个计算机界的诺贝尔奖
我们有一个图灵奖
那为什么就因为这两个事就给他一个最高奖呢
这个UNIX系统啊
在后来影响了几乎所有的现代的操作系统
包括大家的熟悉的Linux Windows
包括苹果上的MAC iOS等等
那么C语言呢也几乎影响了现代很多的这种现代的编程语言
包括咱们的C++ C# Objective-C Java JavaScript等等
所以呢我们选择这个C和C++
主要是因为它有一些这个历史渊源
它对很多后面的一些语言影响很大
大家学完这个C和C++之后呢
可能学习其他的语言
会觉得语法上就很像 很容易上手
那么刚才是C语言的
到1983年的时候
贝尔实验室的这个叫Bjarne这个人
在C语言的基础上发展出了C++这个语言
那么最初呢这个语言的名字不叫C++
叫C with Classes 带类的C
那么随后呢又不断的这个新特性被加到C++的语言当中
这些新特性总结起来
最后发展成了我们这个面向对象的编程的思想
我们这门课呢
其实不会涉及到太多的面向对象的编程思想的内容
这可以单独去上一门课了
有兴趣的同学可以继续学习
但是呢我们这门课当中
用到了一些只有C++才有的表达方式
所以我们说这个我们用的选择语言还是C++语言
那么这些表达方式呢
使得原来C语言当中不太容易理解的一些表达方式
被替换成了一些比较容易理解的表达方式
所以呢如果有兴趣的同学可以下去再找一些参考书
看看到底哪些表达方式是C没有的C++才有的
那说到这里 老师您能推荐一些参考书么
啊好的
我这里列了几本啊
这个第一本呢
是我们在清华大学上课的时候用做程序设计基础教材的一本
第二本呢是关于语言本身的《C++程序设计语言》
大家可以看到作者就是这个C++设计者
所以这本书应该是很权威的语言的详解
-1.1 基础知识
-1.2 买菜问题
-1.3 数学运算
-1.4 补充说明
-1.5 总结
--1.5 总结
-程设论道
--程设论道
-师生问答
-第一章 编程初步--语法自测
-2.1 关于超级计算器的几点思考
-2.2 电子秤模拟 — 背景介绍及需求分析
-2.3 电子秤模拟 — 代码实现
-2.4 变量定义与变量类型
-2.5 猜数游戏与数据表示
-2.6 关于变量的讨论
--公告
-2.7 变量体现的计算思维
-程设论道
--程设论道
-师生问答
--师生问答
-第二章 变量与代数思维--语法自测
-3.1 谁做的好事——语义表示
-3.2 谁做的好事——真假检查
-3.3 谁做的好事——循环枚举
-3.4 谁是嫌疑犯——多重循环枚举
-3.5 谁是嫌疑犯——破案线索表示
-3.6 谁是嫌疑犯——用二进制枚举
-程设论道
--程设论道一
--程设论道二
--程设论道三
-师生问答
-第三章 逻辑推理与枚举解题--语法自测
-4.1 插花游戏
-4.2 筛法
-4.3 线性查找
-4.4 折半查找
--4.4.1 提问
-4.5 排序问题
-4.6 总结
--4.6.1 总结
-程设论道
--程设论道二:筛法
-师生问答
-第四章 筛法与查找--语法自测
-5.1 阶乘
-5.2 排序
-5.3 矩阵填充
-5.4 分书与八皇后
-5.5 青蛙过河
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答一
--师生问答二
-第五章 分治思想与递归--语法自测
-6.1 兔子数列问题
-6.2 分鱼问题
-6.3 橱窗的插花问题
-6.4 最长公共子序列问题
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第六章 递推与动态规划--语法自测
-7.1 统计记录总数
-7.2 统计活跃用户数
-7.3 统计在线时长
--7.3.2 结构
-7.4 总结
--7.4.1 总结
-程设论道
--程设论道
-师生问答
--师生问答
-第七章 文本数据处理--语法自测
-8.1 将数据组织成链表
-8.2 提高链表访问效率 —— 哈希链表
-8.3 以二进制文件存储链表
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第八章 非文本数据处理--语法自测
-9.1 自动售卖程序
-9.2 配制水果信息
-9.3 指定界面语言
-程设论道
--程设论道
-师生问答
--师生问答
-第九章 可配置的程序设计--语法自测