到目前为止,对计算机也算有一个通透的认识了。也该总结一下了。
由于我很乱,不想按照写程序的思路来写成一篇博客,反而想轻松的说一说。不一定真实,但可以作为参考。
windows早期为了竞争pc领域,不想自己造轮子,而是基于DOS的API开发。DOS的系统调用当时明显不够,为了支持更多的硬件,DOS的系统调用逐渐增多。随着90年代计算机和互联网的如火如荼,钱,驱使着人,微软的人一下子变多了。
不断选拔出的编程精英们,不断优化着各种系统调用。开始有最早一批的架构师系统性的总结API,并进行归类。并且必须做到的是可以迭代。旧的代码一定可以复用。这是为了使windows内部代码的健康走向而不得不未雨绸缪的。那时候的架构师们,就像任正非一样,有着远见的目光。
为了给员工们提气,比尔盖茨开始游说当时各种著名的公司,频繁的露脸使得这位年轻的BOSS逐渐在世人的目光。win的崛起依赖数亿的软件。当时gcc 90年代才开发好,c只是一个标准,我们何不自己开发?win抱着这个想法写了vc。为了更好的配合windows的生态,造了IDE。各种硬件的加入,使得DOS系统内部打了许多驱动。还有一些不知名的硬件不得不给windows提供驱动才行。这是捆绑的。
靠着office套件在中国大卖,一下子用户体量得到了奠基。

故事还很长。


操作系统到底有什么奥义?抛开复杂性不提,系统最核心的就是内核。这点linux已经验证,无需多言。
你想过用c语言实现一个printf么?平时你不写这种代码,但当你写操作系统时才能明白需要写这样的代码。
你想过怎样实现么?printf()后面的可变参数又是怎样写的?你一定烦了吧。你还觉得c语言的标准输入输出麻烦呢。不如python的1句print(),不如java的一句syso,不如c++的一句cout。qdebug。确实,这些函数的调用是不是很爽啊,但只能让你云里雾里。你也写过程序,你也知道你不喜欢写文档。你造个轮子后,需要让别人使用,你肯定嫌麻烦,不会将文档写的面面俱到,你会来一句,看代码吧。在你看来,别人的抱怨就是他们懒得瞧你写的代码。我个人觉得早期接触编程看代码的文档是一件不可能的事。我刚学c的时候那时候也是刚接触编程。老师给我们一本电子书,好家伙,我当时也是看了十几页的人,但是实在枯燥,不看。后来老师发了chw,还是中文的,但是,这函数说的啥意思啊。啥是内存地址?啥是初始化?…啥都不明白的我,当时也是直接把那个软件仍一边了。真的是…自己笑自己,哈哈。就是这样的年代,我接触了Java。怎么说呢?我记得我学得很远,一直学到了微服务。你得承认有的人他虽然对电脑感兴趣,但他有时的思维也不是很适合搞算法之类的。Java给人的最大好处就是懒。我们是被上帝宠的孩子,还远看不到编码的冰山一角。我之前写过一篇很短,但非常有趣的文章。for循环。仔细研读就会发现里面的奥妙。我们可以知道Java在封装数据时的边界以及越界了怎么处理。完全是计算机科学导论里面讲的嘛。导论难学,幸好我遇到了个有趣的老师,我不认为他很难,只要潜心研究。大学里只是教我们有这门课,和真实的机器怎么联系还是得看课下的功夫。而我认为我远远没有达到。代码啊,一行一行。写的适合没感觉,就加个for就3,4行了。问我自己,怎么做到的。为什么一下的功夫就多了这门多代码?每啥,就是脑子里灵光闪过,就形成了代码呗。代码说穿了就是要干什么干什么。有时候涉及到相关的内容了,查查文档,资料啊,复制拷贝代码就上去了。如果你去研究github上neovim项目的代码贡献度,你会发现一个很有意思的事情。github上贡献代码最多的,也是删除代码最多的。我不想搞什么Unix哲学,可是事实就是这样。而这就关乎了代码质量。同时养活了几门学科,什么数据结构啊,软件工程啊。我虽然每写过大型C项目。我也知道,按照C的特色,到最后代码上升到万行后,怕是如果没有好的数据结构来支撑,自己都不想多看一眼。甚至眼一瞪,大叫一声,老子不干了,转行转行。这时候Java,C++可能就会被垂爱。可能还不放弃的,叫嚣着重拾数据结构,于是就有了一遍遍地挣扎…青春,也在挣扎中消逝。这个故事没人给我讲过,我只是模拟一下,故事也可能只是虚拟。
可这就是生活啊。我们在代码中耗费我们大量时间。于是,有人去研究了更底层的事情。教育水平也在不断推进着。
学校的任务啊,我觉得,最重要的事情啊,就是要让你尽可能的看到事情的全貌。可能今后你挣扎着的那块领域你会不屑学校的肤浅,可是不必恨啊。因为如果你没学过编译原理,会不会听信了别人代码一定要写成这样的风格的鬼话?第1是所有代码进编译器一致对待。第2是你可以写一个程序,然后格式化你的代码啊。我用vim写java的时候,只要保存就会默认给我加上缩进。我不觉得这是很难的技术。甚至是谈不上编译原理前端的一部分。关键是你得知道一些历史上关于\n,\r,\n\r,\t等字符的处理。不同的系统有不同的处理。学到正则你还会惊喜的发现,这些统统可以用\s来代替。所以,在某些不是那么花的课程上下点功夫,哪怕你只是记记笔记,多年后再重拾这门学科,也可以啊。这些扩宽了我独立思考的深度。
等到接触脚本后,才发现这又是一个新的世界。我睡着的时候就可以帮我下载电影,然后自动关机。这在以前一定是高大上,到后来才发觉不过是脚本的妙用罢了。我在目前觉着有几点十分重要,需要着重说明的,不包含在这篇聊天范围内的,就是,代码要保存好。面向对象调用类头花时要记得思路,然后保存代码。永远永远看官方文档是最好的。英文?别搞笑了。我用linux,现在有道都出linux了。虽然启动有点慢。。。但屏幕取词什么的该有的都有了。这当然只能是忠告。因为按照我的德行,当初死活不听别人的忠告,忠告,也只能是忠告了。唉。写软件里面的也不乏异类。他们写代码完全上升到了哲学的高度。他们对编程语言甚至称之为实现范式。关键是人一开始就这样指导自己的编程了。我不知道这对于他们度过数据结构,算法那段枯燥期有没有帮助,但他们的视野肯定不会太差。写出来的代码是有灵魂的。不像我,一开始只是把别人给的代码敲了一边,到现在也只是学会了别人的风格,还差的远呢。有的人真的是废弃忘食的写了。当然我听到的大多是10年之前的例子。时间是很重要的参考条件。
怎么说呢?编写那些底层的代码真的不难。我大大小小也算见过猪跑的人了。对于一些底层的问题,我会向一些立志本科写操作系统的人建的QQ群提问。如果你没进,推荐可以搜一下进1个,对你是很有帮助的。我就是问了很多问题啊。
其实OS就是管理你硬件的。硬件什么的也是有API的。这是硬件厂商本身的进化。所以他给你提供的API操作系统的人肯定就要默默的搞了。在这个API基础上封装一个系统的API。比如,print,如果是OS的,就是printk。最后一个k是kernal内核的意思。你说,这又什么难的?大家不要小看这个函数,OS人必须保证别人掉这个函数是没问题的。
接着就是开发一下常用的软件了。比如shell。ls,pwd。之类的。而且他们需要遵循一个约定,GNU的好像,是一个开发操作系统所遵循的标准,虽然是参考性的,但还是很多开发OS的人遵守了。不为别的,就为标准。硬件这样做了,软件也这样做了,大家才能各自干好自己的事。我见过挑战标准最成功的例子就是微软,到最后自己成了标准。牛逼。
然后给别人提供进入你系统的内存地址。也就是系统调用。封装一下,成为API。供开发者开发。就是这了。
所以你写的#include <stdio.h>其实不就是系统有这个库嘛?或者是gcc有。反正肯定是有对应函数实现的,至于到底这个函数已经变成了二进制文件还是其他的,我没研究过。不过结合我使用这么长时间linux来看,肯定是stdio.h对应函数的事先早已变为二进制。反正纠结个这也没啥意思。
这就是这啊。至于怎么获取你的音箱,鼠标,甚至游戏手柄,在linux下就一个设备文件的事儿。别人都抽象好文件了,会文件读写不就会操作了?
当然你说为什么抽象称文件?他们怎么做到的。很简单,就是OS开发者不断的写结构体,不断的写,不断的抽象,恩,就成了。
你有兴趣可以看一下维护可以说是这个世界上最大C项目的人–linus,他最常用的软件。emmm。我不敢说现在,我觉得过去他一定经常用gdb作为调试工具。是的,就是那个带超级多参数的CLI界面的工具。人家用的。linus还是对很多GNU的东西保持好感的,比如gcc。他可没有自己去搞套gcc啊。
我所说的真的是事实啊。因为我加入的OS群,看源码的化,会发现很多OS相关的概念,进程,等都是代码里的数据结构啊。然后就是相关算法。
啊。。。
好吧。
就是这样了。

关于计算机这一块儿的认识相关推荐

  1. 跨考计算机性价比学校,高性价比院校推荐第五波,又想骗我考你们学校!

    高性价比院校推荐第五波,又想骗我考你们学校! 摘要:不知道如何择校择专业的崽崽们看过来!帮帮又来给大家推荐高性价比的院校专业了,已经到第五篇,一起来看看吧!►西南交通大学/公共管理 作者 佚名 次阅读 ...

  2. 黑客水平测试 大家可以自测一下

    以下各题中,有肯定答案的给1分,否则不给分.  测试结束后,把你的总分与下表对照,以判定你的黑客级别:     0x000 - 0x010 -> 计算机盲  0x011 - 0x040 -> ...

  3. 自拟计算机作文100字,我的电脑作文100字五篇

    我家有一台电脑,颜*是黑*的,电脑的作用是可以玩游戏,还可以查自己不懂的问题.有一次,爸爸和妈妈不在家,我就先做完作业,在做作业的时有一道题我不知道怎么做,于是,我上百度上一搜,结果就出来了.我希望每 ...

  4. 华南理工计算机接口技术随堂练习_研究生考试计算机408跟845有什么区别?

    楼上已经解释了什么是408,什么是845,那我当时考的就是计算机408,我就来补充一下408该怎么复习才能拿高分吧. 首先介绍一下我自己,计算机本科生,然后头铁考了某个985的计算机专业,最后以403 ...

  5. 计算机c盘用户,windows 7 c盘的用户文件夹users如何转移

    在这儿逛的朋友一看转移系统文件夹,肯定想到了Windows7优化大师或者魔方,通过他们可以轻松的转移"收藏夹"."我的文档"等等系统文件夹.但是,如果要把 c: ...

  6. 计算机中那些事儿(四):我眼中的虚拟技术

        虚拟这个词语想必大家不陌生.双十一阿里巴巴再创奇迹,其旗下的淘宝网等虚拟商店更是惠及了全国人民.游戏中的虚拟世界,令无数青年竟折腰.最近世界杯正在如火如荼的进行着,令无数球迷激动的莫过于在网上 ...

  7. 史上最难的大学专业 计算机 土木建筑 医学,大学最易挂科的专业,智商不够别报考,不然很难毕业!...

    原标题:大学最易挂科的专业,智商不够别报考,不然很难毕业! 今天向学霸进军给高考生和家长们说一说"大学里最容易挂科专业排行榜",要更加努力哟! 医学专业 每逢期末考试 医学专业应该 ...

  8. 计算机图形学实验——二维卡通人物交互

    计算机图形学实验1.2卡通人物交互 OpenGL卡通人物交互 基础"图元"绘制 OpenGL拾取物体 反走样 略提反走样问题 OpenGL实现二维反走样 放缩.旋转和拖动 小结 O ...

  9. 第 4 篇、Linux操作基础 | 计算机组成

    1.计算机的组成  输入输出设备   输入:键盘.鼠标.麦克风.触控屏 输出:屏幕.音响 ALU运算器(运算单元) 控制器 存储设备 总线(传递数据) 2.存储设备类型 存储设备的类型:内存.外存 内 ...

最新文章

  1. Python用selenium简单方法处理完子窗口切换到主窗口
  2. python中定义的函数不掉用不会执行_如果出现异常/错误,如何不在python中停止执行其他函数...
  3. [深度学习] 自然语言处理--- 基于Keras Bert使用(上)
  4. 浅谈Floyd的三种用法 By cellur925
  5. docker命令及挂载
  6. Nginx安装手册(摘自入云龙老师教案,亲测可用)
  7. 梦想还是要有的,万一实现了呢
  8. 惠普第八代游戏家族产品重磅首发,搭载英特尔第十二代酷睿处理器
  9. 2021年高考文科成绩 查询,预计2021年高考文科分数线
  10. 打破“信息孤岛”不能透支信息安全
  11. c语言编程智能交通灯系统,智能交通灯系统.doc
  12. 容联七陌×惠州燃气丨用服务之光,点燃美好生活
  13. VMware安装Ubuntu教程
  14. 稳定性及性能调优<二十四>-------性能优化3【页面加载耗时优化实战、页面滑动流畅度FPS优化实战】
  15. GitHub 上最适合初学者的开源项目——Python 篇
  16. ArcGIS 教程:Workflow Manager 高速浏览
  17. SELECT数据查询例题4——分组查询
  18. MyEclipse快捷键Alt+Shift+s详解
  19. 抠图技术及方法简介(Image Matting Overview)
  20. 微信crm平台是什么系统?

热门文章

  1. DevTools failed to load SourceMap Could not load content 控制台显示的这个警告是什么意思
  2. 0428-团队项目2
  3. 工业机器人智能制造生产线教学案例
  4. web前端开发规范项目流程总结
  5. Redis + Lua 实现 sorted set 集合保证固定数量的数据,并保留新数据剔除旧数据
  6. 【Java语言】交换两个数的数值
  7. lemming games 1!! hdlbits
  8. 关于Unity特效未播放完的问题
  9. vue实现生成二维码,并生成图片
  10. 多人在线编辑文档 开发_太方便了,支持多人同时编辑,电脑和手机端实时同步保存...