程序的前世今生--by Johnson

关于程序的歪门邪说--by Johnson

一、老子

老子是我国古代著名的老人家.

老子上学的时候,书都是写在竹片上的,比较费事,所以那时大学里的教授都不怎么喜欢写书,《易经》是唯一的教材。

老子读了四年的《易经》后,发觉被忽悠了,为了对得起学费,于是又忽悠了一篇名叫《道德经》的毕业论文:道生一,一生二,二生三,三生万物……

后来,有个老外不听爹妈劝,报了中国历史专业,闷头研究了四年老子的“智慧”,快毕业了,就扯了篇关于二进制的毕业论文。

他说二进制是最先进的计算方法,因为:

1.所有的数字(正数直接表示,负数用补码)都可以用二进制表示,比如:1
= 00000001;-1 = 11111110 = (255 - 1);

2.所有的数学计算(+、-、x、……)都可以转化为加法计算,比如:A x (-2) = 255 - (A +
A);

3.所有的逻辑运算(即是与、或、非)也可以转化为加法计算,比如:1011 & 1001 = 1001
(按位加,将对应的进位作为结果就是了);

二、第一台计算机

后来,有些科学家根据这篇论文的想法,折腾出了一个可读写数据的二进制加法器。如下图:

他们把每一种数据操作都给编了个号码,比如:1110表示两数相加,那么1110
0100 0001,即是表示将A=4和B=1丢进加法器里,求结果。

这种操作方式沿用至今。

三、第一个程序

当搞出这么个伟大的加法器后,科学家们再进一步,想出了用二进制数据来代表对数据的操作,比如:98表示两数相加,那么981543,即是表示将A=15和B=43丢进加法器里,得到C=58。类似了,用99表示两数相减。。。

于是第一个程序就出来了,它是由一堆用二进制表示的东西。

四、汇编代码

如果科学家仅满足于此,那现在这些程序猿估计对着这一堆的二进制加班会加到发疯了。但程序猿可不是科学家,他们是出了名的懒人。接着就设计出了一个软件,你写“ADD
#15 #34",这个软件会一一对应地将其转化为981534.

这看似很简单的一步,极大地解放了程序的生产力。程序猿不用再去数那些个0和1了,出错少了,更容易理解了,于是有时间喝茶、回家陪老婆了。而这个动作叫编译,你写的那个代码,叫汇编代码。

五、C语言

简单地一步,就产生了这么大的效果,于是爱偷懒的程序猿再接再励,搞出了个软件,能将你写的 “i = 15 + 34", 变成“ADD #15
#34",然后做一下上一步,就可以让电脑去算了。更直观了,是不是,还有点眼熟,这就是C语言,俗称”高级语言“,总算是个正常人能懂的了。

然后是C++、C#(四个+,程序猿是多懒啊,命个名都懒得多想)、……

当然了,程序猿太懒了,懒得换个名字,这步还叫编译。

六、函数

搞出个高级语言的同时,又有些家伙觉得,把一堆的代码写在一起,还是不爽,喝个茶回来,又忘了刚才的代码了。看起来还是太费劲,于是又搞出了个”函数“这个东西(苦逼!又懒得想名字,我都不想吐这个槽了。。。)。只要你给这个“函数”命名命得中肯,它可以让你看一下代码,接着喝茶回来还以跟上刚才的思路流程,而且不同项目的相同功能函数,还可以用“复制”+“粘贴”搞掂。

七、源文件

再后来,程序猿复制粘贴搞多了,发现搞来搞去都是那几个函数,于是就把那几个函数放到一个c后缀结尾的文件里去,然后用一个h后缀的文件声明一下函数,然后在要用到这些函数的地方引用下这个h后缀的文件,编译器就自动去找了。

只要归类得合理,想用什么函数,就容易想到对应的头文件,加进来,就可以使用那个函数的,这确实省了不少陪老婆的时间。

这个xxx.c格式命名的文件就叫源文件,而那个xxx.h格式命名的文件就叫头文件。

八、Makefile

需求继续变得越来越复杂,项目越来越膨胀,文件越来越多,每增加一个文件,程序猿都得相应地去编译那个文件,受够了这种反复地体力劳动,于是程序猿决定把所有的要编译的文件写到一个叫Makefile的配置文件里,又写了个叫make的程序,只要运行这个程序,它就会去找Makefile,然后自动将相应的文件进行编译。就这样,增减这个配置文件里记录的文件名,以后编译器就会自动编译了。

九、IDE

由于程序猿看上去好像天天上班喝茶、叹空调,越来越多的人争着要来做程序猿。但要这帮子空有着一股热情人去学习怎么编译、链接,那无疑等于在你心急火燎的问路人甲,厕所在哪的时候,他却跟你说,前面第三个红绿灯,左转第五过道,跨过那个围栏……

然而,有抱怨的地方就有机遇,那些程序猿老鸟发现了这个机会,就将那些编译、链接工具和Makefile整合到了一起,所有的一切耍杂技般的动作,变成了一个按钮的点击操作,这让这些老鸟大嫌了一笔的同时,也让一帮子人傻呵呵的成为自己的打杂工。

如果你还在为刚才所说的厕所问题捉急的话,也许那越难吃的麦当劳和肯德基店里的人流能给你点提示。

十、静态库

需求继续复杂,项目继续膨胀。现在软件编译一下,得花两个小时了,都没法调程序了。

最后,他们又想出了个办法,把每个组写的代码编译到一个文件里去,标示好每个函数、变量在文件里的位置。要出货时,再根据每个二进制文件的位置信息组成一个最终的完整文件。这样,各个组干改代码只要编译自己的那部分就好了,大大节省了编译时间。

这些编译好的文件,就叫静态库,而这个组合到一起去的过程,就叫链接。

十一、动态库

需求继续复杂,项目继续膨胀。有一天,正在家里准备制造小程序猿的老程序猿,突然接到主管的电话,说刚发出去的软件,把客户的电脑内存吃完了,其它软件都用不了,都嚷着要退货。在这个要钱没老婆,要老婆没钱最终也将没老婆的情况下,他们又加了一天班,发现很多软件,其实都用到了相同的逻辑代码。于是他们把相同的逻辑功能的函数放到一个文件里,其它软件需要这些功能时,就将那文件调用到内存里,运行相应的函数,不要时再把内存释放出来。这样,就省了不少内存了。

这个文件就叫动态库,只有需要的时候,才会被调用到内存中执行。

来自为知笔记(Wiz)

程序的前世今生--by Johnson

时间: 2024-10-09 07:41:54

程序的前世今生--by Johnson的相关文章

阿拉丁小程序生态课7月开课,解读小程序的“前世今生”

阿拉丁小程序生态课·北京站将于7月8日13:30-17:30在北京京粮大厦四层方糖小镇举行,开课前期工作正在紧锣密鼓筹备中.会务方透露,本次生态课将从小程序对O2O商业带来的变革.小程序未来的发展.以及小程序如何实现商业化等方面进行探讨.目前已邀约到多位早期小程序应用者以及在小程序上玩出花样的企业负责人进行现场交流. 众多与会行业大咖中有首个标杆微信小程序腾讯自选股小程序负责人张坤.京东到家产品总监练燕杰.险峰长青投资副总裁吴炳见.原极客公园CEO阿禅.花帮主创始人赵继强等,届时将围绕小程序商业

小程序的前世今生

微信小程序(wei xin xiao cheng xu),简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用.全面开放申请后,主体类型为企业.政府.媒体.其他组织或个人的开发者,均可申请注册小程序.小程序.订阅号.服务号.企业号是并行的体系. 2017年1月9日,张小龙在2017微信公开课Pro上发布的小程序正式上线. 发展历程 2016年1月11日,微信之父张小龙时隔多年的公开亮相,解读了微信的四大价值

微信小程序开发视频教程

课程:拜师学艺,微信小程序从入门到大神必经之路(第一季,共四季) 课程观看地址:http://www.xuetuwuyou.com/course/172/lesson/list 课程出自学途无忧网:http://www.xuetuwuyou.com 讲师:风舞烟 课时列表: 第一部_诞生 - 天降大任:名门贵族,互联网开发新宠--小程序横空出世 第1章 : 忽如一夜春风来--小程序的前世今生 课时1:课程开场 课时2:本章目标及任务 课时3:第一回合_小王子出世-微信小程序_小程序为什么这么火

C程序运行的背后(1)

一个成功的男人背后,至少有一个伟大的女人:一个不成功的男人,至少有一双手. 而一个C程序,无论成功不成功,它的背后一定有一个操作系统,一个shell,一套工具链. 世界本就不公平.隐藏在显而易见的事实背后的,你若能看透,便可以站在对自己公平的那一端. 1.进程地址空间 一个进程一旦建立,就会自认为占有4G内存(X86_32),这个内存被称作虚拟内存,也就是进程的地址空间.在Linux下,进程地址空间的布局大致如下图所示,其中的用户空间大致由这些部分组成: 代码段 初始化数据段 未初始化数据段 堆

程序员的自我修养—链接、装载与库pdf

下载地址:网盘下载 内容简介 编辑 <程序员的自我修养:链接.装载与库>对装载.链接和库进行了深入浅出的剖析,并且辅以大量的例子和图表,可以作为计算机软件专业和其他相关专业大学本科高年级学生深入学习系统软件的参考书.同时,还可作为各行业从事软件开发的工程师.研究人员以及其他对系统软件实现机制和技术感兴趣者的自学教材. 媒体评论 编辑 这是一本深人阐述链接.装载和库等问题的优秀图书,读来让人愉悦,你从巾可以清晰地了解程序的前世今生,彻底理解敲人的代码如何变成程序任系统中运行.通读本书不管对于开发

在安卓手机上学习C语言 -- 前言

现在有很多学习C语言的系列教程, 不过这些教程都是在电脑上进行练习的, 这系列文章是给那些手上还没有电脑, 但对于编程有很大的兴趣的朋友看的. 这一系列的文章是写给没有编程基础的朋友的, 在这系列文章的前期, 可能会有一些类似于童话的谎言, 因为没有基础的朋友对于一些非常专业的术语可能会非常迷茫,而想要解释清楚这些术语需要非常多的陌生的概念.而这些概念可能比一个术语更加复杂, 所以在前期, 我会对一些非必要的术语进行片面的阐述. 这系列的文章我也是一时想起, 并没有建立好完善的体系 , 不过我会

Dubbo学习心得

一.什么是Dubbo? Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成. 参考资料:https://www.cnblogs.com/zeussbook/p/10454099.html 相关名词解释: 微服务架构:按功能拆分模块,每个模块有 服务消费者和服务提供者两个项目. RPC:RPC(Remote Procedure Call):远程过程调用. Spring框架:Spring框架是一个开放源代码

基于Java EE技术的公司职员信息管理系统查询与统计功能的设计与实现

获取项目源文件,技术交流与指导联系Q:1225467431 摘要 二十一世纪的今天,随着互联网的普及与发展,计算机技术已经广泛的应用于人们的生产办公中,特别是信息的处理加工,更大大的推进着企业的生产效率的增长,企业管理信息化已经成为一个必然的趋势. 本课题研究并开发基于J2EE多层框架的人事信息管理系统.此系统不同于以往的人事信息管理软件,而是在互联网的大背景下,实现以数据库服务器来维护人事信息数据,浏览器客户端来动态访问服务器,这种采用B/S架构的管理系统,有利于充分利用互联网覆盖范围广,通信

Git前世今生-版本控制软件的发展

版本控制软件发展至今已有40多年的历史. 最早的版本控制软件是1972年由Marc J. Rochkind开发的SCCS (Source Code Control System),通过将不同版本下的文件单独保存的形式完成,将同一版本的所有文件打包保存.SCCS使用了长达10年的时间,直到1982年RCS的问世. 1982年,Walter F.Tichy 发布了RCS (Revision Control System),提供了较SCCS更多的功能,并作为GNU项目的一部分. 1986年创建的CVS