知识体系结构
整个计算机体系结构,从确定电路开关二进制用于计算到现在几乎没有大的变化。基于二进制,顺序计算的计算机,所发展出来的技术知识体系,虽然为了处理问题演化出各种服务各种领域,但本质的基础是一样的。所有应用软件、解决方案都是为了更高效利用现有计算机资源,完成计算任务。
对于有志于进入IT领域,从事计算机行业的同学来说,了解和认识要学习那些知识。以及学习这些知识在实际工作中的用途,这是很有必要的。入门时有一个清晰的概念和全览视图对学习掌握知识很有帮助。
分类
- 基础知识
包括不限于计算机组成、计算机网络、操作系统、编程语言(最好编译和解释都掌握一门)、数据结构、编译原理等
通过这些知识,可以很好的认识计算机,了解计算机是做什么的,包含那些硬件软件,计算机如何运行,程序如何运行
- 计算机组件核心是CPU,用于计算的机器,其他组件都是配合CPU工作的,所有数据都会通过CPU的集成电路的二进制计算
- 网络是为了计算机进行数据交换,因为计算机硬件的多种多样,为了屏蔽底层具体实现,抽象出网络协议,提出一个规范,任何计算机支持这个规范就能互相交换数据,当然这里为了简化复杂性,协议分了好多层
- 操作系统是为了更好的管理计算机的硬件资源,给到更上层的软件服务使用,最早期软件服务是可以直接跑在硬件上的,自身包含一定操作系统的功能。在业务越来越复杂的情况下,独立出通用操作系统出来管理硬件,现在业务软件服务还是通过系统调用进入内核态操作硬件
- 数据结构和算法是程序的基础,程序最终是跑的机器指令,运行在CPU上。高级语言会先编译成汇编,汇编再变成二进制,通过链接成为可执行二进制文件。数据结构和算法可以写出更少的机器指令和顺序完成计算工作,节省硬件资源
- 编程语言不管是编译型还是解释型最终都是变成机器指令才能执行。机器指令过于复杂,不利于记忆,于是有了助记符,汇编。但汇编又太多低级和繁琐而且绑定平台,不利于维护和移植,于是抽象出更高级的语言,需要编译器进行编译,这样只需要维护一个好的编译器,高级语言的代码在哪里都可以执行
后续延伸,可以自制操作系统,对于计算机基础的认知会有很深的理解
- 基础服务
掌握计算机基础知识后,仅仅是熟悉和理解了计算机的运行原理和机制,但这个并不能直接用于解决业务问题,通常我们遇到的业务问题都是用来存储、计算、查询具体数据,这个时候我们需要一些常见的基础服务,这些服务是在操作系统之上的通用的基础服务
以web开发为例子介绍
db:mysql、mongodb、oracle、r|edis、sqlite、sqlserver、postgresql、elasticsearch、hive、hbase等,用于存储操作数据
middleware:mq、nginx、zuul、kong、linkerd等,用于处理系统与系统之间的数据通信
通过对基础服务的学习认知,了解其原理设计以及最佳应用,可以针对业务问题,选型最佳的解决方案,也可以从中获取设计灵感,在一些新系统设计中可以借鉴使用
- 实践知识
解决业务问题中,必定会遇到很多实际上的问题,资源受限、权限受限、团队受限等,要在一定限制下,完成问题解决,在熟悉基础知识和基础服务条件下,通过实践,掌握更多实际解决问题的思维方式和经验。这些可以通过自己实践去学习,也可以通过阅读别人项目经验分享和最佳实践总结来学习。
这方面涉及最为广泛:
编程范式、编程规范、项目管理、架构设计、文档规范、自动化、开发模式、语言短板、多语言混合编程、服务治理、备份多活、日志质量体系、风控告警、各种业务特殊场景解决方案等
常用思维
计算机知识虽然多种多样,但是有几种常用的思维方式,了解和掌握这几种思维方式有助于快速理解相关技术
- 拆分
把大而复杂的问题,拆分成原子的小问题,通过拆分使得编程逻辑更为简单,当感觉问题不好解决时,拆分增加一层,问题就变得好解决
- 抽象
把可以归类的事物,抽象成一个统一的类型,通过对类型的定义和使用,来更为易于理解的处理问题
- 复用
无论拆分还是抽象,都有一部分目的是为了复用代码,好的设计可以更好的复用代码,减少开发量,让代码实现更好维护和理解
最后
现在国内软件研发情况,面向业务和游戏等开发内卷程度较高,面对专业软件领域的开发内卷较少,有想从事计算机行业的同学不妨考虑下专业软件领域,这方面更容易跨过开发35的槛
作者:Caps