当前位置: 首页 > news >正文

【从计算机的发展角度理解编程语言】C、CPP、Java、Python,是偶然还是应时代的产物?

参考目录

  • 前言
  • 什么是"computer"?
  • 计算机的大致发展历程
    • 计算机系统结构阶段(1946~1981)
    • 计算机网络和视窗阶段(1982~2007)
    • 复杂信息系统阶段(2008~today)
    • 人工智能阶段
  • 越新的语言是越好的吗、越值得学习吗?

前言

在这里插入图片描述

  最近读了 《Python语言程序设计基础》 这本书,起初没读的时候我以为是草草介绍一些基本语法的一些入门书籍而已,的确,读过一章之后,我发现他的确是一本入门书籍,令我吃惊的是他第一部分把计算机和语言的应时代发展讲的很好,今天特地参考书籍结合自己理解来写一篇博客。

  我想读过本篇文章之后可以回答你以下问题:

  • 计算机的大体发展历程是如何的?
  • 为什么会出现C、CPP、Python等众多语言?为什么他们具备其各自的特点?
  • 作为学生,我们应该选择C\CPP?还是Java?Python?

这里仅仅是谈自己的一些观点,有处理不妥善之处还请谅解…


什么是"computer"?

“compuper”,人类最伟大的发明之一。这是这本书开始的一段话…这不是空穴来风的一句话,的确,计算机的发展在过去的百年里已经深深的改变了世界。

“computer”最初指的是从事计算工作的人,后来在20世纪中叶,计算机的崛起成为计算机的专有名词。
  实际上,计算机不仅仅指的是电子计算机,比如我们的笔记本电脑、台式电脑…更准确来说,计算机的概念指的是对数据按照指令集进行处理的设备。也就是说,计算机的概念可以拓展到光子计算机、生物计算机…而不仅仅局限于电子计算机,当然还是以电子计算机最为常见就是了。
在这里插入图片描述
我们知道,现代意义上的计算机大概出现在20世纪中叶。那计算机以不到百年的时间迅速改变世界,经历了一个大致什么阶段呢?

计算机的大致发展历程

计算机系统结构阶段(1946~1981)

  1946年,全球首台数字计算机ENIAC诞生,标志着计算机正式起步发展,拉开了计算机系统结构阶段的序幕。
在这里插入图片描述

  这个阶段的特点,就是计算机主要服务于军事、商业、科学等国家或团体;其次,这个阶段的计算机普遍算力一般(相对于现在计算机而言),即使是现在几百块钱的“山寨”手机也比百年前“超级计算机”强得多…。
  受制于计算机的算力不足,科学家们必须从系统结构层面尽可能的让仅有的算力完成尽可能多的工作。——因此,为了完成这一目的,高效而简洁的C语言诞生了C语言应时代要求,以高效的执行方式出色的完成了大大缓解了几十年前计算机算力低的问题,使计算机算力充分得到利用,大大促进了计算机的发展。
  实际上,更准确的说是时代选择了C语言,与C语言同年代的一并出道的编程语言并不在少数,然而由于各种原因以及语言自身的局限性并没有得到大范围推广或延续…
后来,随着计算机的不断发展,1981年,IBM PC为代表的个人计算机诞生,为科学家、军事服务的计算机时代结束,计算机技术进入面向大众的新的历史阶段。
在这里插入图片描述

计算机网络和视窗阶段(1982~2007)

  1982年,面向全球子网间组网的TCP/IP网络协议的标准化为个人计算机PC的进一步发展提供了条件,计算机发展进入“互联网”时代。
  四百年前,新航路的开辟、美洲发现把世界由孤立逐渐拉近距离,成为全球。五十年前,“互联网”的出现则使信息快速传递提供了条件,“地球村”时代来临。
  应互联网发展的需求,各种技术层出补充,围绕计算机,网络技术、视窗技术、多媒体技术发展,个人计算机逐渐取代军事、科学专用机成为时代主流。为了更好的造好计算机面向大众使用,微软、苹果这些富有时代先觉的企业率先成立互联网公司,为电脑制造商业化…促进了计算机的普及。随后,为了提升用户体验,视窗技术迅速被两家世界互联网公司(微软和苹果公司)发觉,制造出了“图形化界面”。大大降低了用户的电脑使用学习成本。那个时代的计算机更加趋向于“图形化”计算机革命。计算机的图形化不仅仅依赖于硬件,更需要软件编程的支持。因此需要更加抽象,允许高度可移植、跨平台在不同机型上跑的编程语言被迫切需要——CPP、JAVA语言应运而生。
  最初CPP为CPP之父——Bjarne Stroustrup所构建,后来更多人加入了CPP发展计划…作为高级语言面向对象的先驱语言,CPP有很多优点,支持面向对象支持模板…但是有些问题是必须有先驱语言来“踩坑”的,CPP也造出了很多语法上的大坑,比较经典的就是零星虚拟继承的问题,为了填补这些大坑和向前兼容性,CPP又额外引入了一些复杂语法作为填补。毫无疑问,这会使CPP语言学习难度倍增…
  以CPP为前车之鉴,JAVA吸取CPP优点,集众语言之长,避免了CPP中的许多大坑,JAVA作为新一代抽象面向对象的高级语言诞生…
后来,苹果公司为了打败竞争对手微软(当然不仅是为了这个),苹果公司小型化个人电脑,2007年,制造出了iPhone智能手机。标志着计算机发展进入移动网络应用时代。
在这里插入图片描述

复杂信息系统阶段(2008~today)

  前文提到,2007年苹果公司发布iPhone智能手机。微软也不甘示弱,迅速投入到移动设备,尤其是手机领域的研究。苹果公司是一家软件硬件兼备的公司,当然容易把PC计算机小型化做出智能手机,微软是主要致力于硬件生产的公司,为了应对苹果公司的挑战,微软自己本身不搞软件,因此就联合谷歌开源操作系统——安卓操作系统。2008年,安卓系统的开源,是复杂信息系统时代的来临的开端
在这里插入图片描述
  该阶段,毫无疑问是竞争异常激烈的阶段…各种手机端APP的编写发布…各种电脑端软件与手机端软件的融合…在这个阶段,是多种技术相互协调发展的阶段,很难有一个技术”独领风骚“,而是各种技术相互融合发展。移动互联网、多核众核、云计算…物联网、互联网+…以及互联网信息安全技术…人类会逐渐到达自己所能理解掌控的智慧边界…
  为了更快的、抽象的、易学的。面向更多人、更多领域、更多业务的编程——Python作为新一代简单抽象易学面向大众诞生(2008年,Python3.0发布,并且不兼容Python2.0)并持续发展…时至今日,Python在编程语言排行榜上已是稳居前三,甚至经常是第一…
  实际上,Python语言如此“火爆”,是因为各个领域都会用到一点…我感觉Python简直可能会是下一个时段的“WPS”。
  该阶段目前仍在继续,已经逐渐向下一个阶段“计算机人工智能”阶段方向发展。当前,我们现在的AI并没有做出划时代意义的举动…但不久后一定会到来。

人工智能阶段

  这是未来的事情了,在未来,几十年之后,“人工智能”阶段展开。这必随着深度学习、智能机器人、搜索引擎、量子计算技术的发展…计算机将结合智能技术为人类呈现更友好的交互方式,逐步接管人类非创造性工作。
在这里插入图片描述

越新的语言是越好的吗、越值得学习吗?

主流语言都值得好好学习。

然而,这并不意味着Python语言就是最好的编程语言…只是说一种发展趋势而已,即使是今天,像很多大型游戏,系统内核用的主要依旧是C/CPP,很多网站、购物平台则用的是Java,很多插件则更多偏向于Python…

简而言之,C、CPP、Java、Python成为主流语言且常年不衰,是经得时间和实践考验的,更是时代的选择


EOF

相关文章:

【从计算机的发展角度理解编程语言】C、CPP、Java、Python,是偶然还是应时代的产物?

参考目录 前言什么是"computer"?计算机的大致发展历程计算机系统结构阶段(1946~1981)计算机网络和视窗阶段(1982~2007)复杂信息系统阶段(2008~today)人工智能阶段 越新的语言是越好的吗、越值得学习吗? 前言 最近读了 《Python语言程序设计基础》 这本书…...

《Google软件测试之道》笔记

介绍 GTAC:Google Test Automation Conference,Google测试自动化大会。 本书出版之前还有一本《微软测试之道》,值得阅读。 质量不是被测试出来的,但未经测试也不可能开发出有质量的软件。质量是开发过程的问题,而不…...

实战讲稿:Spring Boot整合MyBatis

文章目录 实战讲稿:Spring Boot整合MyBatis课程目标课程内容1. 创建员工映射器接口1.1 创建子包1.2 创建接口 2. 测试员工映射器接口2.1 自动装配员工映射器2.2 测试按标识符查询员工方法2.3 测试查询全部员工方法2.4 测试插入员工方法2.5 测试更新员工方法2.6 测试…...

基于深度学习的眼部疾病检测识别系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 眼部疾病的早期诊断对于防止视力下降乃至失明至关重要。然而,专业的医疗资源分布不均,尤其是在偏远地区,人们很难获得专业的眼科医生提供的及时诊断服务。本系统…...

curl格式化json之jq工具?

jq 是一个轻量级的命令行工具,用于解析、操作和格式化 JSON 数据。它类似于 sed 或 awk,但专门用于处理 JSON 格式。使用 jq,你可以从复杂的 JSON 数据中提取所需的信息,格式化输出,进行数据筛选,甚至修改 …...

百收SEO蜘蛛池

百收SEO蜘蛛池 网站搜索排名上不去?SSL证书来帮忙! #SSL证书#网站优化#搜索引擎优化 谷歌蜘蛛石的话有非常多的一个重要性,首先的话就是能够提升我们网站的一个输入,尤其是对于我们百收SEO蜘蛛池新站来说,我们在做独立…...

(娱乐)魔改浏览器-任务栏图标右上角加提示徽章

一、目标: windows中,打开chromium,任务栏中会出现一个chromium的图标。我们的目标是给这个图标的右上角,加上"有1条新消息"的小提示图标,也叫徽章(badge)注意:本章节纯属娱乐,有需要…...

JVM相关

1.JVM内存区域 一个运行起来的java进程就是一个Java虚拟机,就需要从操作系统中申请一大块内存。 内存中会根据作用的不同被划分成不同的区域: (1)栈:存储的内容是代码在执行过程中,方法之间的调用关系&a…...

9.18 微信小程序开发笔记

如何获取英语单词的发音,使其能在小程序界面通过点击外发? 1.通过外界API获取(例如有道API) 不下载音频文件,每次需要时直接API获取发音,存储压力小。但是一般的API都有使用次数限制,在背单词…...

dpdk课程学习之练习笔记八(dpvs的了解)

只是看到这个,跟着流程做一下练习,了解这个东东是干啥的,再就是搭建环境,基于dpdk的环境,顺手也就练习dpdk的环境搭建了。 0:总结 1:知道了lvs能实现的功能,挺强大。 2&#xff1…...

Linux标准IO-系统调用详解

1.1 系统调用 系统调用(system call)其实是 Linux 内核提供给应用层的应用编程接口(API),是 Linux 应用层进入内核的入口。不止 Linux 系统,所有的操作系统都会向应用层提供系统调用,应用程序通…...

LeetCode004-两个有序数组的中位数-最优算法代码讲解

最有帮助的视频讲解 【LeetCode004-两个有序数组的中位数-最优算法代码讲解】 https://www.bilibili.com/video/BV1H5411c7oC/?share_sourcecopy_web&vd_sourceafbacdc02063c57e7a2ef256a4db9d2a 时间复杂度 O ( l o g ( m i n ( m , n ) ) ) O(log(min(m,n))) O(log(min(…...

Unity携程Coroutine用法

一.携程概述 官方的解释是,携程允许你可以在多个帧中执行任务。在Unity中,携程是一个可以暂停并在后续帧中从暂停处继续执行的方法。 二.携程写法 下面示例使用携程和Update打印前5帧的时间间隔,展示了携程的基础写法 using System.Colle…...

腾讯百度阿里华为常见算法面试题TOP100(5):子串、堆

之前总结过字节跳动TOP50算法面试题: 字节跳动常见算法面试题top50整理_沉迷单车的追风少年-CSDN博客_字节算法面试题 子串 560.和为K的子数组...

「数据科学」清洗数据,真实数据集中缺失值的查看与处理

在数据科学的工作过程中,我们通过查看数据的基本要素和元数据之后,需要根据查看的结果,考虑是否需要清洗数据。缺失值的查看与处理,就是清洗数据的一部分。如果我们的数据集中,存在缺失值的话,就需要考虑如…...

彩蛋岛 销冠大模型案例

彩蛋岛 销冠大模型案例 任务: https://kkgithub.com/InternLM/Tutorial/tree/camp3/docs/EasterEgg/StreamerSales 视频 https://www.bilibili.com/video/BV1f1421b7Du/?vd_source4ffecd6d839338c9390829e56a43ca8d 项目git地址: https://kkgithu…...

大数据Flink(一百二十一):Flink CDC基本介绍

文章目录 Flink CDC基本介绍 一、什么是CDC 二、CDC的实现机制 三、​​​​​​​​​​​​​​传统 CDC ETL 分析 四、​​​​​​​​​​​​​​基于 Flink CDC 的 ETL 分析 五、​​​​​​​​​​​​​​什么是 Flink CDC 六、​​​​​​​​​​​​​​…...

SqlServer自定义类型的使用

目录 前言分类基于标量类型新建查询语句 用户定义的表类型新建查询语句 基于 CLR新建查询语句 前言 最近接触了SqlServer的自定义类型–TYPE,在此记录一下所得 分类 在 SQL Server 中,用户定义的类型(User-Defined Types, UDT)…...

LeetCode 滑动窗口 滑动子数组的美丽值

滑动子数组的美丽值 给你一个长度为 n 的整数数组 nums ,请你求出每个长度为 k 的子数组的 美丽值 。 一个子数组的 美丽值 定义为:如果子数组中第 x 小整数 是 负数 ,那么美丽值为第 x 小的数,否则美丽值为 0 。 请你返回一个包含…...

【JavaEE初阶】多线程(4)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 线程安全的 第四个原因 代码举例: 分析原因 解决方法 方法1 方法2 wait(等待)和notify(通知) wait和sleep区别 线程安全的 第四个原因 内存可见性,引起的线程安全问…...

初识 C++ ( 1 )

引言:大家都说c是c的升级语言。我不懂这句话的含义后来看过解释才懂。 一、面向过程语言和面向对象语言 我们都知道C语言是面向过程语言,而C是面向对象语言,说C和C的区别,也就是在比较面向过程和面向对象的区别。 1.面向过程和面向…...

Python数据分析 Pandas库-初步认识

Python数据分析 Pandas库-初步认识 认识Pandas ​ pandas是一个非常实用的Python工具,我们可以把它想象成一个超级强大的表格处理工具,它比Excel更智能,操作更为简单。pands可以从各种文件格式(CSV、JSON、SQL、Excel&#xff0…...

Flutter问题记录 - 适配Xcode 16和iOS 18

文章目录 前言开发环境问题及解决方案1. Upload Symbols Failed2. type UIApplication does not conform to protocol Launcher3. method does not override any method from its superclass 最后 前言 为了新的镜像功能升级了macOS 15和iOS 18,Xcode也不可避免的需…...

VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025

VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025 VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版) ESXi 7.0U3 标准版集成 Intel 网卡、Realtek USB 网卡 和 NVMe 驱动 请访问原文链…...

大数相乘,大数相加

大数相乘&#xff1a; #include <iostream> #include <vector> #include <string>std::vector<int> multiply(const std::vector<int>& num1, const std::vector<int>& num2) {int n1 num1.size();int n2 num2.size();std::ve…...

Spring Boot配置文件敏感信息加密

一&#xff0c;背景 Spring Boot应用中的数据库、Redis、Nacos、MQ等的用户名、连接地址、密码在配置文件中一般都是明文存储&#xff0c;如果系统被系统攻破或者配置文件所在的目录读权限被破解&#xff0c;又或者是动态配置文件被窃取&#xff0c;内部人员或者黑客很容易通过…...

Java操作数栈分析

Java 的操作数栈&#xff08;Operand Stack&#xff09;是 JVM 的运行时数据区域之一&#xff0c;位于每个线程的栈帧中。操作数栈用于临时存储操作的中间结果和数据&#xff08;操作数&#xff09;&#xff0c;在方法执行时&#xff0c;JVM 的字节码指令会对操作数栈进行操作。…...

C#|.net core 基础 - 值传递 vs 引用传递

不知道你在开发过程中有没有遇到过这样的困惑&#xff1a;这个变量怎么值被改&#xff1f;这个值怎么没变&#xff1f; 今天就来和大家分享可能导致这个问题的根本原因值传递 vs 引用传递。 在此之前我们先回顾两组基本概念&#xff1a; 值类型** vs 引用类型** **值类型&a…...

axure的下载,激活,汉化全过程,多图

1.前言 下载地址&#xff1a;https://pan.baidu.com/s/12xo1mJer2hmBK7QrYM5v-Q?pwd0107#list/path%2Fcsdn%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6 源文章&#xff1a;https://blog.csdn.net/iwanttostudyc/article/details/123773796?ops_request_misc%257B%2522request%25…...

LCR 026

题目&#xff1a;LCR 026 解法一&#xff1a;线性表 将链表中所有元素加入数组中&#xff0c;创建两个指针&#xff0c;分别指向数组的头部和尾部&#xff0c;然后向中间遍历 public void reorderList(ListNode head) {if (head null || head.next null || head.next.next …...