装个 linux 系统。ubuntu 。学习一些命令行、makefile 。手动组织一个 c 语言项目,编译运行。从这个作为入口点开始学习。不会的问 AI ,AI 说了不懂的,继续问 AI 。接着用 C 语言实现一个复杂点的项目,(我当时是 OpenGL ,但有可能过于复杂了;可以做个简单的命令行工具,比如文件夹下的查找,于是会涉及到非常多的概念,文件系统,编码、二进制/文本,正则表达式)。这个过程中,不断深入学习一下系统的用法,鸟哥那本书不错。这样感觉有了之后,开始补全各个环节的基础课内容(其他人都提过那些基础课了,我基本全部补了一遍;其实也还好,现在有 AI ,更方便跳着看书了)。
有心要打通任督二脉,还是建议学习 C/C++。先从 C 开始接触底层语言的世界,看看 C 的魅力,为何 C 能作为底层去支撑整个代码世界。再延伸到 C++,看看 C++要解决 C 的哪些问题。这一步非常关键,学的好的话,数据结构和算法水到渠成。之后找个动态/脚本类型语言看看,比如 Python ,了解下动态类型的优势。接着就会发现其他语言都是语法糖+专注某些方向的特定优化。至于其他的,比如题中提到的系统架构,私以为有了上述学习经验后,也难不倒你,毕竟任督二脉已经通了。
如果是针对多个语言之间,联系之类的。学习一些编译原理和汇编语言。然后,我个人觉得可能深入 C++会比较方便理解多个语言(深坑),C++中有各种指针,GC ,多态,模板等等技术,回过头来,其他语言的很多特性也就能有所理解。然后还需要看一些操作系统的具体实现原理,页管理、线程调度之类的。基本上组合这些底层技术,大概就能明白高级语言的一些特性是怎么实现出来的。每当看到一个语言特性的时候,脑子里大概能猜得出来底层怎么实现的,算是打通任督二脉了(然并卵)。
最后,你还是应该通过长期推进一个自己的项目,选择聚焦 1-3 门语言,来不断的深入技术,累积更多技术声望。
如果只是纯编写代码。数据结构加架构就够了。
一是 IO (输入输出),二是计算
没有例外
所有的硬件和软件,所有的编程语言,从汇编到 C 到 python ,都是为了做这两件事
我建议初学者先彻底理解这两件事具体是什么、怎么做、为啥所有工作都是他俩
1.找规模小一点的开源项目研究源码,看看人家的设计和代码,我当年看的 redis ,negix ,Cassandra ,ceph 等一大堆
2. 自己有个想法,写代码实现,不断重构
架构的话也可以看看大厂架构的讨论
编程语言要将内存中的数据导出变成文件,则需要借助操作系统的 I/O 接口。或者将数据交予另一个进程,则需要借助操作系统提供的进程间通信接口。不管是 I/O 接口还是进程间通信接口都需要对数据进行编码( Encoding ),或者说序列化( Serialization )。因为持久化存储和网络传输都是面向字节流的。序列化本质上是一种“降维”操作,将内存中高维的数据结构降维成单维的字节流,于是底层硬件和相关协议,只需要处理一维信息即可。
好像是哪本书上看来的,对我启发很大,摘录下来了。