• 一个程序员的迷惑:是从数据结构和算法入手,还是从架构出发?
  • 发布于 12小时前
  • 24 热度
    12 评论
  • 梦清幽
  • 0 粉丝 48 篇博客
  •   
学习计算机编程已久,但是一直不得其门,Java 、python 、PHP 、go 、JavaScript 都有涉猎,它们之间的联系是什么,怎么才能打通它们之间的任督二脉,我是要从架构、数据结构还是算法开始,给点指点。叩谢!
用户评论
  • 心在旅途
  • 如果你真的想,下载 Linux 内核源码,OpenJDK 源码,CPython 源码,GoLang 源码等。首先能够顺利编译,然后找一些源码分析资料,把一些主要流程和重点模块原理梳理通透。一定要源码,因为源码才最真实和最详细!
  • 2025/12/1 18:07:00 [ 0 ] [ 0 ] 回复
  • 青春已去
  • 装个 linux 系统。ubuntu 。学习一些命令行、makefile 。手动组织一个 c 语言项目,编译运行。从这个作为入口点开始学习。不会的问 AI ,AI 说了不懂的,继续问 AI 。接着用 C 语言实现一个复杂点的项目,(我当时是 OpenGL ,但有可能过于复杂了;可以做个简单的命令行工具,比如文件夹下的查找,于是会涉及到非常多的概念,文件系统,编码、二进制/文本,正则表达式)。这个过程中,不断深入学习一下系统的用法,鸟哥那本书不错。这样感觉有了之后,开始补全各个环节的基础课内容(其他人都提过那些基础课了,我基本全部补了一遍;其实也还好,现在有 AI ,更方便跳着看书了)。

    如果是针对多个语言之间,联系之类的。学习一些编译原理和汇编语言。然后,我个人觉得可能深入 C++会比较方便理解多个语言(深坑),C++中有各种指针,GC ,多态,模板等等技术,回过头来,其他语言的很多特性也就能有所理解。然后还需要看一些操作系统的具体实现原理,页管理、线程调度之类的。基本上组合这些底层技术,大概就能明白高级语言的一些特性是怎么实现出来的。每当看到一个语言特性的时候,脑子里大概能猜得出来底层怎么实现的,算是打通任督二脉了(然并卵)。

    最后,你还是应该通过长期推进一个自己的项目,选择聚焦 1-3 门语言,来不断的深入技术,累积更多技术声望。
  • 2025/12/1 18:05:00 [ 0 ] [ 0 ] 回复
  • 君子坦荡荡
  • 之前有看到国外程序员会在业余时间设计自己的编程语言和编译器,单纯从搞清这些语言间的联系角度来看,op 如果也尝试去自己实现一门语言的话,或许会很有帮助
  • 2025/12/1 17:59:00 [ 0 ] [ 0 ] 回复
  • 尘世无情
  • 有心要打通任督二脉,还是建议学习 C/C++。先从 C 开始接触底层语言的世界,看看 C 的魅力,为何 C 能作为底层去支撑整个代码世界。再延伸到 C++,看看 C++要解决 C 的哪些问题。这一步非常关键,学的好的话,数据结构和算法水到渠成。之后找个动态/脚本类型语言看看,比如 Python ,了解下动态类型的优势。接着就会发现其他语言都是语法糖+专注某些方向的特定优化。至于其他的,比如题中提到的系统架构,私以为有了上述学习经验后,也难不倒你,毕竟任督二脉已经通了。
  • 2025/12/1 17:54:00 [ 0 ] [ 0 ] 回复
  • 半生輕狂客
  • 你这搞清联系是什么鬼。 如果只语言上联系,你至少懂计算机组成原理跟编译原理。
    如果只是纯编写代码。数据结构加架构就够了。
  • 2025/12/1 17:24:00 [ 0 ] [ 0 ] 回复
  • 山有木兮
  • 记住计算机编程只是做两件事
    一是 IO (输入输出),二是计算
    没有例外
    所有的硬件和软件,所有的编程语言,从汇编到 C 到 python ,都是为了做这两件事
    我建议初学者先彻底理解这两件事具体是什么、怎么做、为啥所有工作都是他俩
  • 2025/12/1 17:21:00 [ 0 ] [ 0 ] 回复
  • 远山迷雾
  • 基础有了,接下来可以尝试:
    1.找规模小一点的开源项目研究源码,看看人家的设计和代码,我当年看的 redis ,negix ,Cassandra ,ceph 等一大堆
    2. 自己有个想法,写代码实现,不断重构
    架构的话也可以看看大厂架构的讨论
  • 2025/12/1 9:24:00 [ 0 ] [ 0 ] 回复
  • 价值人生
  • 一切都是编码,定义的变量也好,对象也好,都只是在内存中的特定编码。其实根本就没什么语言,有的只是编译器。是编译器决定怎么解释某种关键字及某种语法。语言只是编译器和大家的约定,只要写入这样的代码,编译器便将其翻译成某种机器指令,翻译成什么样取决于编译器的行为,和语言无关。

    编程语言要将内存中的数据导出变成文件,则需要借助操作系统的 I/O 接口。或者将数据交予另一个进程,则需要借助操作系统提供的进程间通信接口。不管是 I/O 接口还是进程间通信接口都需要对数据进行编码( Encoding ),或者说序列化( Serialization )。因为持久化存储和网络传输都是面向字节流的。序列化本质上是一种“降维”操作,将内存中高维的数据结构降维成单维的字节流,于是底层硬件和相关协议,只需要处理一维信息即可。

    好像是哪本书上看来的,对我启发很大,摘录下来了。
  • 2025/12/1 9:11:00 [ 0 ] [ 0 ] 回复