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

程序人生 | 编程的上帝视角应该怎么去找

前言

📫作者简介:小明java问道之路,专注于Linux内核/汇编/HotSpot/C++/Java/源码/架构/算法

就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计📫 

🏆 CSDN专家博主/Java优质创作者/CSDN内容合伙人、InfoQ签约作者 、阿里云专家/签约博主、华为云专家、51CTO专家/TOP红人 🏆

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~


目录

本文导读

一、编程的上帝视角

二、编程 Root 是什么

三、找到 Root——系统调用

四、Root 的扩展和运用


本文导读

本文通过抛出一个编程的上帝视角问题,我们了解什么是编程的上帝视角,编程如何学习以及编程的root是什么,找到root之后,我们有如何利用上帝视角去解决编程中的推理。

一、编程的上帝视角

上帝视角乃是叙述视角中,第三人称叙述者如同无所不知的上帝,能够以非现实的方式不受限制的描述任何事物,操控者一切,监视着一切,想没想过,如果你打开了编程世界的上帝视角,会干嘛?

这将意味着:

1、学习将不区分语言
2、遇到问题快速定位
3、不再纠结于如何学习
4、对任何新技术,只要看一下架构和功能,马上能猜(推理)出底层实现原理
5、抓住语言共同点学习

从底向上学习:操作系统->计算机组成->计算机网络->汇编与C/C++语言 ->数据结构算法->其他高级语言 (Java、Python、Go…),刨根问底,从源码论证,去除不必要的争论与错误,对计算机思维模式进行训练。

上帝视角

二、编程 Root 是什么

我们需要找到一个 Root 点,然后往下对比学习分析,扩展知识脉络。那么我们先来定义下本文要探究的 Root是什么?

既然我们需要打开混沌视角,那么必然得把多个语言进行融合分析,不过我们先来基于已经知道的知识来进行推理:

1、计算机基础硬件:CPU、内存、硬盘(计算机组成原理、计算机体系结构
2、程序员直接通过命令或者鼠标、键盘外设来跟操作系统交流,操作系统来调度硬件完成操作(操作系统、计算机体系结构
3、我们的编程语言自然也是通过某种方式来跟操作系统进行沟通(操作系统编译原理、汇编语言
4、而如果是多个机器进行沟通,那么我们需要在硬件上支持网卡,操作系统上支持网络栈(操作系统计算机网络

Java知识体系架构图

三、找到 Root——系统调用

通过第二章我们得到了一个结论,一切事情由操作系统来完成。

操作系统和硬件将用户所处的环境分为,用户空间和内核空间,不过不懂也没关系。我们可以想想你在网站中编写的Controller,然后通过浏览器输入地址,然后就可以通过Http协议访问这个Controller(SpringMVC),从而获取到返回结果。

那么读者这里可以将操作系统提供的这些功能接口想象为Controller,而我们所需要做的就是通过编程语言去调用这些接口完成需要的功能。在上面我们提到了,通过Http协议来调用,那么我们与系统调用之间,是不是也需要定义一个协议来完成操作

程序、操作系统、计算机的关系

这就是系统调用,我们需要使用操作系统提供的方法来完成参数传递到操作系统,从操作系统中获取到结果。所以对于Http协议来说只不过是通过TCP/IP协议栈来完成调用,而系统调用来操作系统是单机上完成调用。这时我们找到了 Root,所有编程语言都会使用系统调用,来告诉操作系统需要完成的动作和获取结果。

四、Root 的扩展和运用

1、在计算机中保存计算数据的地方就是内存,一个内存基础单元为1byte = 8bit (位) 【存放数据的盒子,最小就是1byte ,不能再小了,比如:没有1bit的盒子,最小给的盒子就是1byte】编程语言需要提供些什么呢,操作这些不同大小盒子的东西,那是什么?基础数据类型

2、基础数据类型让我们可以从操作系统中获取到给定规格大小的盒子,而如果我们需要获取不属于这些规格的盒子呢?我们就需要:分配这些盒子的功能

3、如果我们只分配盒子,不释放,那么显然最终盒子用尽,导致系统奔溃,那么我们需要归还这些盒子,那么这时我们有两种方法:由某个东西帮我们自动归还、通过编程方式手动归还

4、在提供了这些基本操作后,我们考虑下,需要用户直接按照协议来直接操作系统调用么?那必然不是,我们需要在编程语言中提供给用户便捷的使用方法

最受欢迎的编程语言

通过以上分析我们可以得出以下编程语言需要提供的功能结论

1、封装系统调用方便用户调用(线程库、IO库、 图形库、网络编程库)
2、提供基础数据类型来使用规格化的内存(堆、栈、方法区…)
3、提供内存分配和释放的手段
4、提供基础算法与数据结构(数组、链表、队列、栈、树)
5、按照编程语言的特性,提供面向对象的支持(抽象、继承、多态)

当读者掌握到以上的内容后,恭喜已经打开了编程世界的上帝视角。

相关文章:

  • KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析
  • 夏日水果茶饮店如何引流?这四款饮品必学
  • ESP32_esp-idf_lvgl_V8环境搭建移植
  • 人工智能第2版学习——产生式系统2
  • Cortex-A核的异常的处理过程
  • 基于IDEA 工程项目的git实操
  • SAP 多个smartforms同时打印页码问题
  • 离线数仓搭建_03_Hadoop的配置与优化测试
  • 【设计模式】Java设计模式 - 命令模式
  • openstack-mitaka(二) 基于vmware的搭建
  • 【Vue2】VantUI项目入门教程
  • 痛苦与反思:想提升自己,却不知道该如何做
  • C++和QML混合编程_C++端后台多线程处理
  • Math 对象+JS数组求和的常用方法+ indexOf+js计算数组中每个元素出现的次数+while循环语句死循环
  • 用ARM进行汇编语言编程(7)HelloWorld和gdb调试Arm程序
  • 【391天】每日项目总结系列128(2018.03.03)
  • 2017前端实习生面试总结
  • canvas 高仿 Apple Watch 表盘
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • oldjun 检测网站的经验
  • sessionStorage和localStorage
  • SpiderData 2019年2月16日 DApp数据排行榜
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Vue官网教程学习过程中值得记录的一些事情
  • 从PHP迁移至Golang - 基础篇
  • 从setTimeout-setInterval看JS线程
  • 给新手的新浪微博 SDK 集成教程【一】
  • 如何优雅地使用 Sublime Text
  • 手写一个CommonJS打包工具(一)
  • 译自由幺半群
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 阿里云ACE认证学习知识点梳理
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #HarmonyOS:Web组件的使用
  • #includecmath
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二)c52学习之旅-简单了解单片机
  • (附源码)php新闻发布平台 毕业设计 141646
  • (论文阅读30/100)Convolutional Pose Machines
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三十五)大数据实战——Superset可视化平台搭建
  • (转)Linux整合apache和tomcat构建Web服务器
  • .“空心村”成因分析及解决对策122344
  • .NET Core引入性能分析引导优化
  • .NET4.0并行计算技术基础(1)
  • .NET连接MongoDB数据库实例教程
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [ linux ] linux 命令英文全称及解释
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)