给点迷津指点:是从数据结构和算法入手,还是从架构出发,搞通计算机编程: - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Rust2015
V2EX    程序员

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

  •  
  •   Rust2015 16 天前 3547 次点击

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

    叩谢!

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

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

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

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

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

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

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

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

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

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

    最后,你还是应该通过长期推进一个自己的项目,选择聚焦 1-3 门语言,来不断的深入技术,累积更多技术声望。
    FYFX
        26
    FYFX  
       15 天前
    plai.org 常用的语言特性差不多有了,静态类型啥的你得去看 TaPL(Types and Programming Languages)了。。。
    或者 Programming Language Pragmatics ?作者最近在 ytb 上讲课 https://www.youtube.com/@JonathanAldrich
    HarrisonLee
        27
    HarrisonLee  
       15 天前
    如果你真的想,下载 Linux 内核源码,OpenJDK 源码,CPython 源码,GoLang 源码等。首先能够顺利编译,然后找一些源码分析资料,把一些主要流程和重点模块原理梳理通透。一定要源码,因为源码才最真实和最详细!
    beck8
        28
    beck8  
       15 天前
    运维一枚,fork 了一个仓库,已经 3.7k star 了,哈哈哈
    xljya
        29
    xljya  
       14 天前
    @beck8 同运维,老哥有链接吗
    fkdtz
        30
    fkdtz  
       14 天前
    万丈高楼平地起,编程语言也好、三高架构也罢,一切的设计、考量、模式,在底层实现中都已经存在了
    去看系统和网络吧,去看那些真正男子汉该看的东西
    beck8
        31
    beck8  
       14 天前
    @xljya 这个就不分享啦,相关的
    midraos
        32
    midraos  
       14 天前
    计算机原理、编译原理、软件工程的需求分析到系统设计、分布式系统,然后就着手实际项目
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3658 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 00:58 PVG 08:58 LAX 16:58 JFK 19:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86