编程哲学之 C# 篇:006——什么是 .NET
本章将用本系列第二章中提到的 类比 思维来让读者快速了解什么是.NET。
当年在网上看到一个初学者问《Java编程思想》第一章看不懂怎么办。然后我发现在很多经典的技术书中,如《C#入门经典》、《C#高级编程》、《Java核心技术》、《Go程序设计语言》它们都会在前面一两章介绍该语言的特色,然而因为提到的概念太过大而且很多,导致初学者一下子很难消化,而且有些初学者认为第一章看不懂,后面就跟难了,导致学习的信心被打击了,其实是可以跳过前面章节的,而学了后面的章节后,再回去看第一二章。.NET也包含很大知识体系,我不会整体去介绍,而是给读者提供一个切入点,让读者找到一个了解什么是.NET的方法。
编译器-翻译员
如果要和外星人沟通,又不想学外星人的语言,那么这个时候你需要一个翻译员。
在电脑诞生之初,人们和电脑沟通是用机器语言,猜猜下面的机器语言是什么意思~
0010 0001 0000 0100
0001 0001 0000 0101
0011 0001 0000 0110
0111 0000 0000 0001
0000 0000 0101 0011
1111 1111 1111 1110
0000 0000 0000 0000
上面机器码的意思是:求 83+(-2) 的值。
机器语言[machine language]是一种指令集的体系。这种指令集称为机器代码[machine code],是计算机的CPU可直接解读的数据。
直接用机器语言和机器沟通和其痛苦,人类都希望能用接近人类的语言和机器沟通,所以设计了接近人类表达方式和思考方式的高级语言,同时发明编译器,用来将高级语言编译成机器语言,于是,我们得到的 类比 图是这样的:

注意上图的 机器码(Windows) ,这样表达的原因是因为现在机器(硬件)是由操作系统管理的,因此你可以把操作系统也比喻成精通各种机器语言的翻译员,所以要和机器沟通,那么是和操作系统沟通(貌似编写驱动级别的程序是可以绕过操作系统直接和机器沟通的)。
高级语言 → 编译器(翻译) → (操作系统 → 硬件)
(操作系统 → 硬件) 这样描述的原因是因为,现在硬件可以说是有操作系统管理和保护的,如程序A有登陆功能,把密码保持内存地址A10086处,而如果程序B可以去读取内存地址A10086,那么就...
所以我们现在面对的问题是和各种操作系统沟通。为了能和各种各样的操作系统沟通,Sun提出了Java解决方案,请看下面的 类比 图:

这种方案很不错,我们说一句话英语,所有外星人都听懂了。
高级语言 → 编译器(翻译) → 中间语言 → 虚拟机(翻译) → 多种(操作系统 → 硬件)
同时,90%的人类都是使用Windows和机器沟通,也就是Windows上面运行着用各种编程语言的软件。有些软件功能很好,其他软件想复用,但编程语言不一样,如用C语言去调用R语言编程的功能,用 类比 思维来讲,就如同汉语说几句突然说了几句英语,然后又说了几句日语。Windows表达这个翻译员不好当啊,于是微软提出了.NET解决方案,请看下面的 类比 图:

多种高级语言 → 编译器(翻译) → 中间语言 → 虚拟机(翻译) → (操作系统 → 硬件)
将上面两种解决方案相结合就是 .NET Core ,那么我们得到的 类比 图如下所示~

多种高级语言 → 编译器(翻译) → 中间语言 → 虚拟机(翻译) → 多种(操作系统 → 硬件)
总结
类比思维
你可以把.NET当作是翻译员,而.NET Core是更强大的翻译员作为切入点去理解。以后还要介绍这个翻译员需要什么,提供了什么,制定了什么规则,从而慢慢扩散到了解整个.NET知识体系。
分层思维
正如我在第二章学习思维种提到计算机科学是属于人造科学,我们从编程语言的发展来发现计算机科学家们是用什么思维来解决问题的。
从一开始的:机器语言 → 机器
发展到:多种高级语言 → 编译器(翻译) → 中间语言 → 虚拟机(翻译) → 多种(操作系统 → 硬件)
| 以前 | 現在 |
|---|---|
| 机器语言 | 高级语言 |
| 编译器(翻译) | |
| 中间语言 | |
| 虚拟机(翻译) | |
| 操作系统 | |
| 机器硬件 | 机器硬件 |
我们发现计算机科学家们是通过 加层 和 分层 来解决问题的。计算机网络七层模型也是用同样的思维:
| 计算机网络七层模型 | 编程语言 |
|---|---|
| 应用层 | 高级语言 |
| 表示层 | |
| 会话层 | |
| 传输层 | |
| 网络层 | |
| 数据链路层 | |
| 物理层 | 机器硬件 |
可以调侃说,计算机科学没有什么是加一层不能解决的,如果有,那么就再加一层。
所以 加层 和 分层 是很重要的计算机科学思维,请牢记!
吐槽
如果微软在2002年的时候就将 .NET 按上面图4去实现,那么...算了,没有如果~
结束语
本章介绍了:
类比思维通常可以让你很快速切入了解某个知识点。- 计算机科学家们经常用
加层和分层来解决问题。
下一章,我们将介绍怎么如何像上帝一般创造万物。
编程哲学之 C# 篇:006——什么是 .NET的更多相关文章
- 编程哲学之C#篇:02——学习思维
<代码大全>的第二章:介绍隐喻(类比)的思维方式, <经济学原理>的第二章:介绍怎么像经济学家一样思考, <计算机的心智操作系统之哲学原理>的第一章:介绍学习操作系 ...
- 编程哲学之C#篇:01——创世纪
我们能否像神一样地创建一个世界? 对于创建世界而言,程序员的创作能力最接近于神--相对于导演,作家,漫画家而言,他们创建的世界(作品)一旦完成,就再也不会变化,创建的角色再也不会成长.而程序员创建的世 ...
- 编程哲学之 C# 篇:007——如何创造万物
上帝拥有创建万物的能力,本文介绍创造万物的道,让你也拥有上帝般创造万物的能力! 道 中国哲学家,道家学派创始人--老子,在<道德经>写到: 道生一,一生二,二生三,三生万物 那么,是什么 ...
- Python黑帽编程2.1 Python编程哲学
Python黑帽编程2.1 Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...
- Linux shell脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- 浅谈.Net异步编程的前世今生----APM篇
前言 在.Net程序开发过程中,我们经常会遇到如下场景: 编写WinForm程序客户端,需要查询数据库获取数据,于是我们根据需求写好了代码后,点击查询,发现界面卡死,无法响应.经过调试,发现查询数据库 ...
- Scala进阶之路-并发编程模型Akka入门篇
Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...
- 浅谈.Net异步编程的前世今生----EAP篇
前言 在上一篇博文中,我们提到了APM模型实现异步编程的模式,通过使用APM模型,可以简化.Net中编写异步程序的方式,但APM模型本身依然存在一些缺点,如无法得知操作进度,不能取消异步操作等. 针对 ...
- 从编程哲学到开发应用:Spring的初步应用
一.前言 在学习Spring的过程中,我们学习了很多东西,可是实际应用中,我们究竟用到了那些?常用的又是那种方法呢? 二.书上与开发的差异 1.IOC 1) IOC,控制反转,是Spring框架的核心 ...
- 并发编程之第三篇(synchronized)
并发编程之第三篇(synchronized) 3. 自旋优化 4. 偏向锁 撤销-其它线程使用对象 撤销-调用wait/notify 批量重偏向 批量撤销 5. 锁消除 4.7 wait/notify ...
随机推荐
- Python标准库之 xml.etree.ElementTree
Element类型是一种灵活的容器对象,用于在内存中存储结构化数据. 每个element对象都具有以下属性: 1. tag:string对象,表示数据代表的种类. 2. attrib:dictiona ...
- OpenMP 教程(一) 深入人剖析 OpenMP reduction 子句
OpenMP 教程(一) 深入人剖析 OpenMP reduction 子句 前言 在前面的教程OpenMP入门当中我们简要介绍了 OpenMP 的一些基础的使用方法,在本篇文章当中我们将从一些基础的 ...
- Halcon使用MeasurePos来实现检测边缘点
(1)为了提高性能,测量句柄只需要初始化一次: 参数:测量矩形的中心点行坐标,测量矩形中心的列坐标,测量矩形的角度,测量矩形的宽,测量矩形的高,待处理图像的宽,待处理图像的高,使用的算法,输出测量句柄 ...
- 国产图形化的msf——Viper初体验
目录 免责声明: Viper简介 安装 使用 免责声明: 本文章仅供学习和研究使用,严禁使用该文章内容对互联网其他应用进行非法操作,若将其用于非法目的,所造成的后果由您自行承担,产生的一切风险与本文作 ...
- ubuntu 18.04安装tensorflow (CPU)
在已经安装anaconda环境及pip之后. 添加并设置pip配置文件: mkdir ~/.pip vim ~/.pip/pip.conf pip.conf文件内容: [global] index-u ...
- linux mint 归档管理器报错Extraction not performd
解决办法 后缀名的问题,后缀名与文件的真正类型不符合,至于到底是上面压缩类型,那只能靠尝试了,比如我这个是rar, 实际是zip,很坑,网上也没有这个问题的描述 其他 感觉 linux 对于文件类型方 ...
- Google Chrome(谷歌浏览器)安装使用
谷歌浏览器官网https://www.google.cn/chrome/ Chrome是由Google开发的一款简单便捷的网页浏览工具.谷歌浏览器(Google Chrome)可以提帮助你快速.安全的 ...
- 【Shell案例】【awk、grep、sort、uniq】10、第二列是否有重复
给定一个 nowcoder.txt文件,其中有3列信息,如下实例,编写一个shell脚本来检查文件第二列是否有重复,且有几个重复,并提取出重复的行的第二列信息:实例:20201001 python 9 ...
- 【每日一题】【与运算判断奇偶】【list的重载前后插入】2021年11月25日-103. 二叉树的锯齿形层序遍历
给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如:给定二叉树 [3,9,20,null,null,15,7], 来源:力扣 ...
- Qt的三套无边框窗体的方案:可按比例拖拽窗体大小的无边框窗口和几个常见的无边框实例
一.可按比例拖拽窗体大小的无边框窗口 前几天接到一个需求,就是视频广播的窗体画面要可以拖拽,修改成了可以拖拽全屏的窗口之后,又有一个问题:视频画面也被拉伸了. 由于视频画面是有比例的,所以我们最好也能 ...