作为程序员,你必须了解这些关于计算机的知识存储—-块设备,文件系统,集群文件系统,分布式文件系统,光纤SCSI,iSCSI,RAID等
网络—-以太网,光纤网,蜂窝网络,WIFI,VLAN等
计算机体系结构,主要就是CPU指令集
x86,ARM等
需要知道URB包
PCI协议,PCI-E协议
现代计算机的外设都是PCI协议和PCI-E协议的
显卡现在全是通过PCI-E协议连接到计算机上的
相对来说减少了很多需要学习的知识
搞虚拟化就需要深入掌握PCI协议
图像处理–图像压缩,视频实时编码等
3D游戏关系数据库NoSQL数据库操作系统分布式操作系统编译原理机器学习–现在大数据要用哦
了解这些领域知识,也包括了解该领域现有的商用硬件、商用软件和开源软件
很多时候,你要完成的工作,已经有现成的工具了
你只要使用现成的工具就可以完成任务,不需要进行开发
有时候,只需要组合现有的工具,写一些脚本就可以完成任务
如,我一次要实现一个双向同步任务
找到了一个优秀的开源软件Unison,编写一下配置文件就圆满地完成了任务
不需要编写任何代码
还有一次,要做高可用,用Python调用了几个开源软件就轻松实现了
编写安装程序,定制操作系统,知道了操作系统的领域知识,写几行脚本就可以轻松搞定
不具备领域知识的人,就可能不得不进行大量无谓的开发,甚至开发很久之后才发现,这根本就是一条死路
另外,扎实的领域知识,可以大大提高编程调试、查错的能力
知道编译器和编程语言运行时工作原理,就能快速根据编译错误和警告信息修改代码
知道操作系统底层运行机制,就能快速找到运行时错误的问题根源
如,有一次我编写一个windows升级服务程序
它是一个windows服务,需要执行dos脚本,这个脚本会替换掉这个windows服务本身
发现有时脚本执行无效,查了一晚上,发现当windows服务安装后,第一次