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

你遇到过哪些比较难理解的编程语言概念

  •  2
     
  •   pythonee · 109 天前 · 11466 次点击
    这是一个创建于 109 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我先来:递归 -> Y 组合子 -> Monad

    第 1 条附言  ·  108 天前
    本来是面向编程语言,但话题扩展,不过也好,补充几个大家提到的
    yield
    协变、逆变
    lisp 的宏
    闭包
    所有权
    cps
    prototype
    大 O 表示法

    非编程语言的
    六边形架构
    reactor 背压
    TCP 粘包
    IO 多路复用
    可计算理论
    第 2 条附言  ·  108 天前
    C++模板元编程
    Continuation
    Channel
    异步
    并发&内存屏障
    第 3 条附言  ·  107 天前
    箭头函数
    无栈协程
    Delegate
    asycio
    139 条回复    2024-09-06 11:56:44 +08:00
    1  2  
    liudewa
        1
    liudewa  
       109 天前
    异步
    liudewa
        2
    liudewa  
       109 天前
    @liudewa #1 递归 +1
    vfs
        3
    vfs  
       109 天前
    一个函数返回另外一个函数,一个函数的参数时另外一个函数。 这绝对是取乱之道
    superhot
        4
    superhot  
       109 天前 via Android   ❤️ 2
    @vfs 不懂闭包与函数式编程就别乱说话 你 Java 的接口回调本质上也是把函数作为参数传递 没见你说 Java 乱
    ltyj2003
        5
    ltyj2003  
       109 天前 via Android
    @vfs c 就没这个烦恼,啥都可以是指针,是指针就能传。
    Maboroshii
        6
    Maboroshii  
       109 天前   ❤️ 1
    yield 绝对算一个
    Building
        7
    Building  
       109 天前   ❤️ 9
    Process 懂了
    Thread 懂了
    Queue 懂了
    Group 懂了
    Atom 懂了
    Lock 懂了
    Await/Async 懂了
    Promise 懂了
    Callback 懂了
    当你把他们放在一起的时候...
    nagisaushio
        8
    nagisaushio  
       109 天前 via Android   ❤️ 3
    难懂概念千千万,rust haskell 占一半
    zeonluang
        9
    zeonluang  
       109 天前   ❤️ 1
    js 里的原型和 promise 把
    pisc
        10
    pisc  
       109 天前   ❤️ 1
    Monad 有啥难理解的? A monad is just a monoid in the category of endofunctors, what’s the problem?

    想要实用一点的理解? A monad is just a typeclass with the three laws !

    还是不太好理解? A monad is just the bind/flatMap !!!
    tinytoadd
        11
    tinytoadd  
       109 天前
    tokio
    JackYao
        12
    JackYao  
       109 天前
    @Maboroshii +1 当年理解这货 废了我好多脑细胞
    passive
        13
    passive  
       109 天前 via Android
    cps 、monad 这些都简单。

    #define 宏替换比较绕
    kissmenow
        14
    kissmenow  
       109 天前
    golang 的指针传参
    dapang1221
        15
    dapang1221  
       109 天前
    yield ,最开始接触的时候寻思这是啥破玩意,理解之后恍然大悟,惊为天人
    lonelee
        16
    lonelee  
       109 天前
    自旋锁/偏向锁
    csys
        17
    csys  
       109 天前
    Wh1t3zZ
        18
    Wh1t3zZ  
       109 天前
    yield
    caqiko
        19
    caqiko  
       109 天前 via Android   ❤️ 1
    泛型类和具体实现类
    看的迷迷糊糊的
    PTLin
        20
    PTLin  
       109 天前
    学 c 的时候是指针。
    学 python 的时候是 generator 和 async await 。
    学 rust 的时候是所有权和生命周期。
    学 Haskell 的时候是 reader applicative/monad/,monad transformer 。
    DOLLOR
        21
    DOLLOR  
       109 天前   ❤️ 7
    @vfs
    如果你从来只写过 java ,可能确实就会觉得函数作为返回值、参数、变量,是无法理解的事情。
    反过来也一样,学过其他语言(尤其函数是一等公民的语言)的人看 java ,也会很困惑 java 这边为了传递 callback ,还要整出依赖注入、控制反转这些设计模式。
    netabare
        22
    netabare  
       109 天前 via iPhone
    DDD 和六边形那套东西,函数式编程的概念反而没什么难的
    GuardX
        23
    GuardX  
       109 天前
    reactor 那套,比如背压。。
    jeesk
        24
    jeesk  
       109 天前 via Android
    @vfs 这都嫌弃乱,那 golang 和 cpp 不适合你,连 js 都不适合你
    xuanbg
        25
    xuanbg  
       109 天前
    其实不是概念难以理解,更多的是名词难以理解。譬如 JS 的原型链和闭包
    wangjh0802
        26
    wangjh0802  
       109 天前   ❤️ 3
    就没人提 控制反转 和 依赖注入吗 哈哈哈哈哈哈哈
    Kaiv2
        27
    Kaiv2  
       109 天前
    @DOLLOR 不能这么说返回参数是函数和函数参数是函数,当作是匿名 class 就理解了。而且 Java8 就有了 lambda
    TWorldIsNButThis
        28
    TWorldIsNButThis  
       109 天前 via iPhone   ❤️ 1
    闭包是穷人的对象 对象是穷人的闭包
    nagisaushio
        29
    nagisaushio  
       109 天前 via Android
    楼主想要讨论编程语言概念,但楼上说的有些并不是编程语言概念
    johnhsh
        30
    johnhsh  
       109 天前
    闭包
    GeekGao
        31
    GeekGao  
       109 天前
    C++ 的模版、预编译指令
    povsister
        32
    povsister  
       109 天前
    Makefile
    cookii
        33
    cookii  
       109 天前
    @GuardX reactor 绝对是 java 程序员的噩梦
    rabbbit
        34
    rabbbit  
       109 天前   ❤️ 1
    指针
    函数式编程
    ts 类型体操
    M4n5ter
        35
    M4n5ter  
       109 天前
    第一眼看到 go1.23 有些丑陋的迭代器和其文档中给出的 example 时
    adoal
        36
    adoal  
       109 天前
    @ltyj2003 然后发现很多程序员看不懂 Linux 举的那个编程品位例子里的二阶指针
    levelworm
        37
    levelworm  
       109 天前
    @ltyj2003 像我这种小白就喜欢 C 。简洁,没那么多花招。函数式编程实在是超过了我的智商。
    echoless
        38
    echoless  
       109 天前
    我觉得没有难的概念, 只是大部分人(包括很多知名教授)没有把一个概念解释清楚的能力.

    我看递归, Monad, 都是看多个资料慢慢懂得.

    你要懂 C. 可能需要你先了解 A, B, 但是你可能不懂 A, 或者你知道 B’.

    但是很多资料(或者老师), 给所有人直接讲 C.

    那么就是恰好了解 A, B 的人明白了 C.

    因为你不懂 A, 了解 B’, 又干扰了你了解 B. 所以会觉得 C 很难.

    教学是 1 对 1 的. 需要知道学习的人的状态, 要学习的概念. 跟化学反应一样, 要把所有的条件都达到, 才能进入下一步.
    echoless
        39
    echoless  
       109 天前
    @levelworm #37 这个绝对是那些追求 Pure functional 的把函数编程给弄的阳春白雪了. pure functional 代价很大.
    但是函数编程思想倒是很容易理解, 根本在于对状态(state)的处理上. C 语言可以 OOP 也可以 FP. 追求 pure OOP 或者 pure FP 就意义不大.
    echoless
        40
    echoless  
       109 天前
    插一句, 我想象中科班和非科班的 CS 区别, 在于编程语言理论, 计算理论. 但是实际上, 无论科班和非科班, 99.99%的人都是刷题, 被八股文, 搞我这个非科班的也可以滥竽充数.
    yb2313
        41
    yb2313  
       109 天前
    今天看 go 那个生成器看晕了, 最后才发现我看漏了, 是个语法糖
    yb2313
        42
    yb2313  
       109 天前
    @M4n5ter 我也是, 感觉说不出的难受, 但是总比 java 好点
    yb2313
        43
    yb2313  
       109 天前
    @M4n5ter 我去, 这么巧, 我今天也是看的这个东西, 最后发现就是个语法糖, 还很丑陋
    aliensb
        44
    aliensb  
       109 天前
    erlang 这都是啥
    Acsw
        45
    Acsw  
       109 天前
    闭包,内存屏障
    kinkin666
        46
    kinkin666  
       109 天前
    高三结束准大学生的时候去新华书店看《 C#入门经典(第四版)》看到第六章泛型,卡在那里卡了一个星期,有一天一瓶可乐干下去,悟了,这就是把类型当参数!!!

    下一次再这么悟是在学高数下册和离散数学的时候,高数里三层积分里面那个函数我就当它是回调函数了、离散数学和线性代数里那些东西我就当他是 C++里的运算符重载了

    haskell 、scala 、f#、pearl 这些东西没用过,粗看一眼看不懂
    raptor
        47
    raptor  
       109 天前
    印象中第一个这种坎是二十多年前在汇编语言的保护模式,后来搞懂了。第二个这种坎是十几年前 C++的 TMP ,后来放弃了 C++。
    purringpal
        48
    purringpal  
       109 天前 via iPhone
    可以考虑备注一下大学专业和工作年限,作为科班毕业来说,完全 get 不到楼上说的这些困扰~
    yafoo
        49
    yafoo  
       109 天前 via Android
    yield
    qinfensky
        50
    qinfensky  
       109 天前 via iPhone
    Macro
    spidah
        51
    spidah  
       109 天前
    monad
    levelworm
        52
    levelworm  
       108 天前
    @echoless 我一直觉得函数式编程是需要一定智商的,我这种还是就 C-like 吧。。。
    NoOneNoBody
        53
    NoOneNoBody  
       108 天前
    堆、栈 其实至今只能说知道大概
    iintothewind
        54
    iintothewind  
       108 天前
    CPS (Continuation-passing style)
    HOF(Higher-order function)
    还有些其它的,

    总之就是函数式编程真的很费脑子,不过挺好玩,逼格确实挺高的,就是工作中几乎用不上。
    busuzhike
        55
    busuzhike  
       108 天前
    python 的装饰
    ZGame
        56
    ZGame  
       108 天前
    @superhot 喷的好
    ZGame
        57
    ZGame  
       108 天前
    @echoless #39 应该是说能把函数式写明白很难。函数式增加了很多约束,如果编程的时候按照相关规范去做,思维负担会减轻,局部查看每个函数的时候只用关系入参和出参对不对。 然后现实是因为约束的原因,取巧或者工期赶,有的变量直接就透传进来,然后就变成了使用函数式的方式,写出了非函数式的代码,反而加重了局部查看代码时候的混乱度。另外类似 java 后端 rjdbc 函数式的 zip,merge 等等响应式的 api 在进行调试的时候,我个人感觉也没有传统的编程方式那样好调试
    ZGame
        58
    ZGame  
       108 天前
    @echoless #39 不过前端领域目前函数式 hooks 那套结合的算是现实里的表率了,很赞。
    nutting
        59
    nutting  
       108 天前
    js 的底层。异步啥的那些有点别扭
    test4zhou
        60
    test4zhou  
       108 天前
    js 一些底层原理
    diroverflow
        61
    diroverflow  
       108 天前
    指针这个概念主要是名字起的不好,其实不就是内存地址吗?学过汇编的都能理解
    querysecret
        62
    querysecret  
       108 天前   ❤️ 1
    协变、逆变
    dododada
        63
    dododada  
       108 天前
    设计模式,太多了,很多死搬硬套,最怕那种一开口就是我觉得这个用什么什么模式比较好的,以前有个同事,不管什么语言,上来就是设计模式,头大
    a1b2c3T
        64
    a1b2c3T  
       108 天前
    我感觉大部分设计模式都不是太好理解,可能单独看示例 i 还可以,但是自己用的时候就不大行了。
    MRG0
        65
    MRG0  
       108 天前
    闭包
    xntzmk
        66
    xntzmk  
       108 天前
    @Maboroshii 赞同,还好后面 async 冒出来了
    lew1
        67
    lew1  
       108 天前
    套接字
    shangyu7
        68
    shangyu7  
       108 天前
    "对象"
    theprimone
        69
    theprimone  
       108 天前   ❤️ 1
    ”运行时“,本科相当长一段时间没懂啥意思 😅
    CREEPER5
        70
    CREEPER5  
       108 天前
    右值引用,每次看的时候觉得自己理解了,事后发现并没有
    ixx
        71
    ixx  
       108 天前
    @superhot 特意去翻了翻这老哥以前的帖子和回复 也没看出来是搞 java 的吧 咱话题都跑 java 上来了🤣
    p1gd0g
        72
    p1gd0g  
       108 天前
    刚入行搞不懂 interface ,业务写多了自然也就明白了
    Fallever
        73
    Fallever  
       108 天前
    逆变和协变 对于人来说这是很自然的转换. 但是到泛型里再加上拗口的翻译 真的绕晕了
    coderzhangsan
        74
    coderzhangsan  
       108 天前
    @theprimone +1
    runtime 看中文教材很难理解,可能是最早接触并翻译的人,没有系统性的理解,犯了民科的毛病,类似的还有所谓 TCP 粘包。
    sunrain
        75
    sunrain  
       108 天前
    刚学 OC 的时候吧,这是什么鬼?!
    Mogamigawa
        76
    Mogamigawa  
       108 天前 via Android
    我自己最近的新发现:
    符号越多,看着越难
    直接用关键词,就好理解多了
    RainCats
        77
    RainCats  
       108 天前
    @DOLLOR 还好,我经常搞 lamdba 函数,然后当成其他方法的入参
    qW7bo2FbzbC0
        78
    qW7bo2FbzbC0  
       108 天前
    @vfs 我在 go 里面遇到这种情况最多。。。
    jheroy
        79
    jheroy  
       108 天前
    过程式编程都不算啥,去看下 erlang 这种纯函数式编程才知道啥叫难理解,什么高阶函数什么单次赋值就不说了,就尾递归这概念就比较难理解。虽然纯函数编程数学上完美,就是不是按人好理解设计的,不过学数学专业出身的应该很喜欢。
    loryyang
        80
    loryyang  
       108 天前
    c++ 元编程见过吗?
    aleimu
        81
    aleimu  
       108 天前
    一通百通
    opengps
        82
    opengps  
       108 天前
    竟然没人说:完成端口
    neimengwuyanzu
        83
    neimengwuyanzu  
       108 天前
    @csys lambda 真的就是 写时候还行 写完过段时间在回头看 自己写的读起来有点费劲
    LitterGopher
        84
    LitterGopher  
       108 天前
    套接字+句柄


    (我觉得是翻译问题,你要说是网络通讯和指针我当场就能理解)
    me1onsoda
        85
    me1onsoda  
       108 天前
    自从我开始写 go ,我发现我对 interface 一无所知
    davin
        86
    davin  
       108 天前
    说多了都是语法糖
    javazero
        87
    javazero  
       108 天前 via Android
    rust 的特征?我不是科班出身,只会 Python 。想学点底层的,看到特征想着以后再看,结果再也没看过了哈哈
    EndlessMemory
        88
    EndlessMemory  
       108 天前
    promise.then
    Subfire
        89
    Subfire  
       108 天前   ❤️ 1
    "你们自己先入为主地错误地认为 send 与 recv 是一一对应的, 从而生造出"TCP 黏包"这种东西, 还有理了吗?"
    aloxaf
        90
    aloxaf  
       108 天前
    Memory Order
    inhzus
        91
    inhzus  
       108 天前
    C++ coroutine 提案
    winglight2016
        92
    winglight2016  
       108 天前
    scala 的柯里化阻止了我学习 Scala
    leona723
        93
    leona723  
       108 天前
    递归,每次做这个我感觉我就进入了无限循环的时空里
    yazinnnn0
        94
    yazinnnn0  
       108 天前
    谁能解释一下 call/cc

    看过一些解释 call/cc 的文章, 我对这个概念的理解还停留在 "砸哇噜多" 阶段
    besto
        95
    besto  
       108 天前
    @yazinnnn0 你说出了我心里话,我找了一圈居然上面没有人说 call/cc 的。。。
    KFCVIVO50
        96
    KFCVIVO50  
       108 天前
    异步+事件循环
    FYFX
        97
    FYFX  
       108 天前
    continuation ,
    qbmiller
        98
    qbmiller  
       108 天前
    python 的异步
    17681880207
        99
    17681880207  
       108 天前
    @kissmenow
    传指针其实就是传内存地址吧,这么理解
    Dcrclub
        100
    Dcrclub  
       108 天前
    难以理解的东西, 基本都是故意为之, 目的就是增加编程的入门门槛, 很多能用白话解释的东西. 故意弄个晦涩难懂的词,搞到这里, 有的还是用英文表示. 显得很高大上
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1533 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:54 · PVG 00:54 · LAX 08:54 · JFK 11:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.