关于 C++和其他语言 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容 #Wrapper { background-color: #e2e2e2; background-image: url("/static/img/shadow_light.png"), url("//cdn.v2ex.com/assets/bgs/circuit.png"); background-repeat: repeat-x, repeat-x; } #Wrapper.Night { background-color: #1f2e3d; background-image: url("/static/img/shadow.png"), url("//cdn.v2ex.com/assets/bgs/circuit_night.png"); background-repeat: repeat-x, repeat-x; background-size: 20px 20px, 162.5px 162.5px; }
Leigg
V2EX    程序员

关于 C++和其他语言

  •  
  •   Leigg 2018-08-01 20:15:48 +08:00 via iPhone 5044 次点击
    这是一个创建于 2697 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 golang 论坛看到一句话:
    「 C++语言好比珠穆拉玛峰,爬过最高的山,再爬其他的山简直轻而易举。 」
    说这句话的人精通 C++/python/golang 各种编程语言,改过比特币 /以太坊源码。。。
    没别的,就想问问熟练 C++语言的大佬们在学习其他编程语言的时候真的是这种感觉吗,觉得语法特简单,很快就能上手开发?
    先感谢分享。
    第 1 条附言    2018-08-01 22:07:31 +08:00
    41 条回复    2018-08-03 14:51:16 +08:00
    CEBBCAT
        1
    CEBBCAT  
       2018-08-01 21:18:28 +08:00 via Android
    他骗你的
    lhx2008
        2
    lhx2008  
       2018-08-01 21:23:22 +08:00   9
    [中文好比珠穆拉玛峰,爬过最高的山,再爬其他的山简直轻而易举]
    说这句话的人从事该语言超过 20 年,读过几百年前的项目的代码。。。
    zhustec
        3
    zhustec  
       2018-08-01 21:46:12 +08:00 via iPad
    关键是 C++这座山来说,怎么样才算爬过。
    D3EP
        4
    D3EP  
       2018-08-01 21:51:31 +08:00 via iPhone
    因为 go 太简单了,特性和语法糖都很少,像个平胸的妹子,没有手感
    AngelCriss
        5
    AngelCriss  
       2018-08-01 22:02:16 +08:00 via Android   1
    不谦虚的说,真是这样。谦虚的说,还是要认真看看语法,才能写。
    Leigg
        6
    Leigg  
    OP
       2018-08-01 22:08:05 +08:00 via iPhone
    @zhustec 母鸡啊,目前只会 py 和 golang,golang 正在深入学习中...
    changdy
        7
    changdy  
       2018-08-01 22:08:20 +08:00   1
    假的,
    珠穆拉玛峰 并不是最难爬的. 有些山峰都还没被破处
    Leigg
        8
    Leigg  
    OP
       2018-08-01 22:08:59 +08:00 via iPhone
    @D3EP 哈哈,听老哥一讲好像还真是,比起 python 都算少
    kunluanbudang
        9
    kunluanbudang  
       2018-08-01 22:09:04 +08:00 via Android
    话术而已
    ashong
        10
    ashong  
       2018-08-01 22:15:27 +08:00
    实际上精通任何一种编程语言,再学新的语言都应该很快
    prolic
        11
    prolic  
       2018-08-01 22:27:01 +08:00 via Android
    把 c++的每种编程范式学会之后再碰新语言确实容易很多啊
    luozic
        12
    luozic  
       2018-08-01 22:35:21 +08:00 via iPhone
    C++是多范式语言,简单点说,一个项目不统一风格,最后 C++能写出屎一样的巨山
    dtgio
        13
    dtgio  
       2018-08-01 22:38:45 +08:00 via iPhone
    总的学习成本一样的,在 c++上面消耗的时间会在其他语言上补回来
    SuperMild
        14
    SuperMild  
    nbsp;  2018-08-01 22:38:54 +08:00
    其实难点主要还是算法,以及真实业务本身的复杂性、多变性。语言特性啥的,来来去去就是那些,也就纯函数式比较需要脑袋转弯,其他流行的 py js go php java 等等用起来都是很直白的东西,已经被改进到很符合人类直觉了。
    K0
        15
    K0  
       2018-08-01 22:44:45 +08:00 via iPhone
    是的
    farseeraliens
        16
    farseeraliens  
       2018-08-01 22:51:56 +08:00 via iPhone
    然而在上手函数式编程语言方面,感觉还不如学完 java 有优势。
    danc
        17
    danc  
       2018-08-01 23:02:11 +08:00
    哈哈,还真是这样的。不仅是 CPP,你去学会一种比 CPP 稍简单点的语言,比如 Rust,然后再回过头来看 golang、python 等一些简单的语言,就觉得不过如此了。但是,不踏踏实实搞 2 年 Rust,你也不敢说熟悉它,但是,2 年时间你足够熟悉 golang+python 吧?
    glues
        18
    glues  
       2018-08-01 23:06:50 +08:00   2
    井底之蛙而已
    C++ 也就是坑多而已,本身哪有什么难度。
    先把 Haskell 搞明白了再来装逼吧。。
    lance6716
        19
    lance6716  
       2018-08-01 23:57:59 +08:00 via Android
    因为其他语言的解释器、编译器一般就是 CPP 写的…
    young6
        20
    young6  
       2018-08-02 00:04:05 +08:00 via Android
    写代码是为了实现需求,而不是为了装逼。比较语言不如比较项目。学 C++不如学 Java,顺带学 jvm 上的其他语言。大厂有多少新项目会选择用 C++?
    AV1
        21
    AV1  
       2018-08-02 00:39:57 +08:00   1
    我不太相信精通 C++后能轻松学习 haskell、lisp 这种另一个世界的语言
    chai2010
        22
    chai2010  
       2018-08-02 06:42:21 +08:00
    觉得 Go 语言简单的同学可以尝试玩下 Go 汇编语言或 cgo 等特性 :)
    junmoxiao
        23
    junmoxiao  
       2018-08-02 08:52:30 +08:00 via Android
    重要的是系统,架构,语言特性就是细枝末节。要知道 c++很多语言特性是妥协出来的,你把这些奉为圭臬,学不到什么有用的东西
    iConnect
        24
    iConnect  
       2018-08-02 09:01:15 +08:00 via Android
    会说中文不是每个人都能李白杜甫,会英文也不是每个人都能莎士比亚,主要看你用语音干了啥
    tt67wq
        25
    tt67wq  
       2018-08-02 09:32:34 +08:00   1
    实际上,珠穆朗玛峰应该不是最难爬的山吧
    hitmanx
        26
    hitmanx  
       2018-08-02 10:20:17 +08:00   2
    “” C++是多范式的“”+1.
    很多时候大家用的是同一个 C++,又不是同一个 C++,有些人用的只是 C with classes,有些人会用到一些高级技巧例如模板元编程,不一而足。
    长期用 C++的人给我的最大的印象是对于内存的分配和管理非常敏感,比如这个内存是在栈还是在堆上,是浅拷贝还是深拷贝,指针、引用何时失效,空间是何时分配(例如 copy on write 等技术)又是何时释放的(尤其在智能指针中)。C 也有很多类似的通用的概念,但是 C++由于引入了 operator overloading 以及一些广泛应用的 smart pointers,导致这个情况要比 C 里复杂很多,比如只是简单的一个 a = b,背后会发生什么得仔细分析才知道

    另外 C++11 里用 std::for_each, std::transform,std::copy_if 等配合 lambda 也可以写出**类似**函数范式的代码,map,filter,reduce 这些都不是问题,当然不是说这就是完全的函数式编程了。
    hitmanx
        27
    hitmanx  
       2018-08-02 10:25:32 +08:00
    忘了回核心的问题了,没觉得会 c++的人能很容易掌握其它语言。如果一定程度上有,是因为 c++的多范式,而不完全是因为 c++自己的难度。但是其它语言还是有太多语法糖和语言自己独特的特性是 C++没有的,另外熟悉一门语言的基本语法是很容易的,别的语言的基础主要是用在这儿, 但是真正掌握是很难的,不花功夫是不行的,放在哪门语言里都是一样的。
    abc612008
        28
    abc612008  
       2018-08-02 10:38:51 +08:00
    其实是因为其他语言的特性大部分都能在 c++里找到类似的东西,所以类比学习很好学。( lisp haskell 这种语言除外)
    Leigg
        29
    Leigg  
    OP
       2018-08-02 11:35:39 +08:00
    @tt67wq 最高的啊,只是例证而已,(我记得你哈哈被领导摸的那位兄 dei )
    BBCCBB
        30
    BBCCBB  
       2018-08-02 11:38:57 +08:00
    学的时候和用的时候 根本不是一回事, 一大堆生态要花时间看, 就算看得快也要花时间不是?
    Leigg
        31
    Leigg  
    OP
       2018-08-02 11:53:31 +08:00
    @hitmanx 老哥例举的这些特性好像其他语言都有但都没有被人们过于注意的地方,比如 py 的深浅拷贝,引用计数,go 的指针类型 /传递,如果在 C++中这些原理都熟悉的话,不说其他语言,光是上手其他 python 和 golang 肯定是事半功倍的啊。。
    Leigg
        32
    Leigg  
    OP
       2018-08-02 11:57:48 +08:00
    @hitmanx 语法糖这种就是各自语言的“招式”了,这个应该算不上有难度的东西。而每个语言共性的(比较根本的)地方应该就是那几个吧。 当然,要说精通的话,那一定得另当别论了。我也不是说无脑把 C++往神坛上推 :)
    chungzh
        33
    chungzh  
       2018-08-02 12:03:48 +08:00
    你先爬过 C++这座山再说。。。。。。。
    firebroo
        34
    firebroo  
       2018-08-02 12:10:14 +08:00
    珠穆拉玛峰不是最难爬的山,贡嘎的攀登死亡率了解一下,还有梅里雪山。。没人爬上去过。。
    wzxlovesy
        35
    wzxlovesy  
       2018-08-02 12:14:33 +08:00 via Android
    原话没什么毛病
    jm00
        36
    jm00  
       2018-08-02 12:24:24 +08:00 via Android
    我觉得这里的 c++应该换成 c,因为 c++大部分新特性都是对 c 的 hack 或者包装,之所以他会说学会了 c/c++学其他的简单,是因为他通过学 c/c++掌握了或者很了解程序语言的实现原理,如果换一个人,这个人不会去主动学习,对原理不感兴趣,那么所有语言对他来说都是一个功能的集合体,他会发现 c 语言需要自己管理内存,而 java 不需要,至于为什么,他不感兴趣也就不会知道,你再给他一门语言,他就会当作一个全新的功能集合来学习,完全不去思考程序语言之间的共性和每种程序语言独有的特性。程序语言就是对实现它的语言的特性或者语法的包装,举个例子:当你理解了 c 程序到底是怎么执行的时候你就会明白 js 里通过字符串索引的数组只不过是经过分类的、语法包装的 hashmap 或者字典,达到这种程度,当你要学一门新语言的时候只需要掌握基础语法就够了(无非就是那些标点符号),至于这门语言那些花里胡哨的功能只不过是一些“工具”根本谈不上“学”。
    missdeer
        37
    missdeer  
       2018-08-02 12:47:35 +08:00   1
    假的,C++难是真的,但主要原因是 Go 简单易学。
    northisland
        38
    northisland  
       2018-08-02 13:06:03 +08:00 via Android
    感觉 c++的设计缺陷是异常,各种 programming guide 都禁止用异常
    hotdogwc
        39
    hotdogwc  
       2018-08-02 13:32:32 +08:00
    @danc 你确定 Rust 是稍简单一点的语言?我感觉突破天际了。。
    Wicked
        40
    Wicked  
       2018-08-02 19:47:40 +08:00 via iPhone
    C/C++熟悉的同学,对内存,数据结构会更敏感。其他语言的高级特性,本质上就是这二者的封装,知道原理之后至少会用得更恰当
    例如,我在学 python 的时候,很自然就会将 str,list,dict 等映射成 C++的实现,然后我就知道该用 join 而不是 a+b+c,该用 iterkeys 而不是 keys,对循环引用这些也是天然敏感
    之所以会有顶楼的说法,我觉得是从上述的角度来考虑的。至于 C++复杂的语法,其实是缺点…
    danc
        41
    danc  
       2018-08-03 14:51:16 +08:00
    @hotdogwc 我确定啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2747 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 07:20 PVG 15:20 LAX 23:20 JFK 02:20
    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