V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Rust2015
V2EX  ›  程序员

给点迷津指点:是从数据结构和算法入手,还是从架构出发,搞通计算机编程:

  •  
  •   Rust2015 · 1 天前 · 2360 次点击

    学习计算机编程已久,但是一直不得其门,Java 、python 、PHP 、go 、JavaScript 都有涉猎,它们之间的联系是什么,怎么才能打通它们之间的任督二脉,我是要从架构、数据结构还是算法开始,给点指点。

    叩谢!

    31 条回复    2025-11-30 18:09:22 +08:00
    MasterCai
        1
    MasterCai  
       1 天前   ❤️ 4
    从 Codex ,Claude 入手
    sampeng
        2
    sampeng  
       1 天前 via iPhone
    多写多看,自然融会贯通。10000 小时定律什么时候都生效。指望会个语法就融会贯通了那是不可能的
    commoccoom
        3
    commoccoom  
       1 天前   ❤️ 3
    一切都是编码,定义的变量也好,对象也好,都只是在内存中的特定编码。其实根本就没什么语言,有的只是编译器。是编译器决定怎么解释某种关键字及某种语法。语言只是编译器和大家的约定,只要写入这样的代码,编译器便将其翻译成某种机器指令,翻译成什么样取决于编译器的行为,和语言无关。

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

    好像是哪本书上看来的,对我启发很大,摘录下来了。
    crh3188
        4
    crh3188  
       1 天前   ❤️ 3
    ‌组成原理 → 操作系统 → 计算机网络 → 编译原理 -> 语言特性 -> 数据结构与算法
    songco
        5
    songco  
       1 天前 via Android
    基础有了,接下来可以尝试:
    1.找规模小一点的开源项目研究源码,看看人家的设计和代码,我当年看的 redis ,negix ,Cassandra ,ceph 等一大堆
    2. 自己有个想法,写代码实现,不断重构

    架构的话也可以看看大厂架构的讨论
    penisulaS
        6
    penisulaS  
       1 天前
    从实际需求入手才能知道数据结构、算法、架构到底有什么用,否则概念都是虚的
    ruzhan123
        7
    ruzhan123  
       1 天前
    建议做个小玩具
    NessajCN
        8
    NessajCN  
       1 天前
    记住计算机编程只是做两件事
    一是 IO (输入输出),二是计算
    没有例外
    所有的硬件和软件,所有的编程语言,从汇编到 C 到 python ,都是为了做这两件事
    我建议初学者先彻底理解这两件事具体是什么、怎么做、为啥所有工作都是他俩
    dearmymy
        9
    dearmymy  
       1 天前   ❤️ 1
    你这搞清联系是什么鬼。 如果只语言上联系,你至少懂计算机组成原理跟编译原理。
    如果只是纯编写代码。数据结构加架构就够了。
    Rust2015
        10
    Rust2015  
    OP
       1 天前
    @dearmymy 嗯,谢谢提醒
    ghm2mail
        11
    ghm2mail  
       1 天前
    请叫我克劳德工程师
    phoulx
        12
    phoulx  
       1 天前 via iPhone
    可以先学操作系统,算是 CS 学科的中枢
    coefu
        13
    coefu  
       1 天前   ❤️ 1
    他们的联系叫做,《计算机程序的构造与解释》->SICP.
    Donahue
        14
    Donahue  
       1 天前   ❤️ 1
    nand2tetris 项目做一下,你就能大致理解 cpu/编译型语言的底层实现,
    然后再找个解释型语言也学习以下,就知道它们之间的联系了。
    nnccree
        15
    nnccree  
       1 天前
    learn by doing 比较有效率一些
    listenerri
        16
    listenerri  
       1 天前 via Android   ❤️ 1
    有心要打通任督二脉,还是建议学习 C/C++。

    先从 C 开始接触底层语言的世界,看看 C 的魅力,为何 C 能作为底层去支撑整个代码世界。

    再延伸到 C++,看看 C++要解决 C 的哪些问题。这一步非常关键,学的好的话,数据结构和算法水到渠成。

    之后找个动态/脚本类型语言看看,比如 Python ,了解下动态类型的优势。

    接着就会发现其他语言都是语法糖+专注某些方向的特定优化。

    至于其他的,比如题中提到的系统架构,私以为有了上述学习经验后,也难不倒你,毕竟任督二脉已经通了。
    miKaSaAkerMan
        17
    miKaSaAkerMan  
       1 天前
    深入理解计算机系统,就这一本书,看完你就基本通了
    duolanengda
        18
    duolanengda  
       1 天前
    之前有看到国外程序员会在业余时间设计自己的编程语言和编译器,单纯从搞清这些语言间的联系角度来看,op 如果也尝试去自己实现一门语言的话,或许会很有帮助
    prosgtsr
        19
    prosgtsr  
       1 天前 via iPhone
    学 c 语言,操作系统,组成原理,编译器
    cs4forever
        20
    cs4forever  
       1 天前
    @listenerri 专业
    pkm
        21
    pkm  
       1 天前
    语言大同小异,掌握 c/c++,计算机基础课( 408 )打好基础,数据结构算法是内功
    opengps
        22
    opengps  
       1 天前
    我的出发点是业务,能解决业务需要都是好技术。甚至你可以独创一个操作方法。
    比如前几年火起来的云计算,只因为各个大厂的热门活动,普通物理服务器加到顶配都难以抗住并发,最后反而是大量小机器分大压力各自干小事把峰值承载力提高到一个难以打趴的程度,坑过了顶峰还能自动关停减少机器。
    这足够说明合理的架构合适的资源达到最终效果的重要性,并没有哪家云厂商专门说自己用了什么语言
    ACoderWu
        23
    ACoderWu  
       1 天前
    系统架构什么的一开始学的时候完全不用考虑,这个东西还是比较看经验,工作几年了再来学事半功倍。我个人觉得从数据结构、算法、计算机原理这些入手确实不太友好,但这些确实也是非常重要的,我理解的你可能是想把这些串起来,让自己的知识更有系统性,那么建议从真实的完整项目入手,在解决需求的过程中慢慢体会到数据结构、算法、网络、内存的概念,有了这些概念之后再系统性的整合学习就不会很枯燥,同时也能知道自己所学的各种语言合适的应用场景等。
    saleacy
        24
    saleacy  
       1 天前 via Android
    硬件定义计算方式 内核定义计算接口 语言定义计算实现 是这样理解吗
    crackhopper
        25
    crackhopper  
       1 天前
    装个 linux 系统。ubuntu 。学习一些命令行、makefile 。手动组织一个 c 语言项目,编译运行。从这个作为入口点开始学习。不会的问 AI ,AI 说了不懂的,继续问 AI 。接着用 C 语言实现一个复杂点的项目,(我当时是 OpenGL ,但有可能过于复杂了;可以做个简单的命令行工具,比如文件夹下的查找,于是会涉及到非常多的概念,文件系统,编码、二进制/文本,正则表达式)。这个过程中,不断深入学习一下系统的用法,鸟哥那本书不错。这样感觉有了之后,开始补全各个环节的基础课内容(其他人都提过那些基础课了,我基本全部补了一遍;其实也还好,现在有 AI ,更方便跳着看书了)。

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

    最后,你还是应该通过长期推进一个自己的项目,选择聚焦 1-3 门语言,来不断的深入技术,累积更多技术声望。
    FYFX
        26
    FYFX  
       21 小时 34 分钟前
    plai.org 常用的语言特性差不多有了,静态类型啥的你得去看 TaPL(Types and Programming Languages)了。。。
    或者 Programming Language Pragmatics ?作者最近在 ytb 上讲课 https://www.youtube.com/@JonathanAldrich
    HarrisonLee
        27
    HarrisonLee  
       21 小时 30 分钟前
    如果你真的想,下载 Linux 内核源码,OpenJDK 源码,CPython 源码,GoLang 源码等。首先能够顺利编译,然后找一些源码分析资料,把一些主要流程和重点模块原理梳理通透。一定要源码,因为源码才最真实和最详细!
    beck8
        28
    beck8  
       20 小时 49 分钟前
    运维一枚,fork 了一个仓库,已经 3.7k star 了,哈哈哈
    xljya
        29
    xljya  
       4 小时 51 分钟前
    @beck8 同运维,老哥有链接吗
    fkdtz
        30
    fkdtz  
       3 小时 36 分钟前
    万丈高楼平地起,编程语言也好、三高架构也罢,一切的设计、考量、模式,在底层实现中都已经存在了
    去看系统和网络吧,去看那些真正男子汉该看的东西
    beck8
        31
    beck8  
       52 分钟前
    @xljya 这个就不分享啦,🪜相关的
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2521 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:01 · PVG 19:01 · LAX 03:01 · JFK 06:01
    ♥ Do have faith in what you're doing.