关于 C++和其他语言

2018-08-01 20:15:48 +08:00
 Leigg
在 golang 论坛看到一句话:
「 C++语言好比珠穆拉玛峰,爬过最高的山,再爬其他的山简直轻而易举。 」
说这句话的人精通 C++/python/golang 各种编程语言,改过比特币 /以太坊源码。。。
没别的,就想问问熟练 C++语言的大佬们在学习其他编程语言的时候真的是这种感觉吗,觉得语法特简单,很快就能上手开发?
先感谢分享。
4471 次点击
所在节点    程序员
41 条回复
DOLLOR
2018-08-02 00:39:57 +08:00
我不太相信精通 C++后能轻松学习 haskell、lisp 这种另一个世界的语言
chai2010
2018-08-02 06:42:21 +08:00
觉得 Go 语言简单的同学可以尝试玩下 Go 汇编语言或 cgo 等特性 :)
junmoxiao
2018-08-02 08:52:30 +08:00
重要的是系统,架构,语言特性就是细枝末节。要知道 c++很多语言特性是妥协出来的,你把这些奉为圭臬,学不到什么有用的东西
iConnect
2018-08-02 09:01:15 +08:00
会说中文不是每个人都能李白杜甫,会英文也不是每个人都能莎士比亚,主要看你用语音干了啥
tt67wq
2018-08-02 09:32:34 +08:00
实际上,珠穆朗玛峰应该不是最难爬的山吧
hitmanx
2018-08-02 10:20:17 +08:00
“” 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
2018-08-02 10:25:32 +08:00
忘了回核心的问题了,没觉得会 c++的人能很容易掌握其它语言。如果一定程度上有,是因为 c++的多范式,而不完全是因为 c++自己的难度。但是其它语言还是有太多语法糖和语言自己独特的特性是 C++没有的,另外熟悉一门语言的基本语法是很容易的,别的语言的基础主要是用在这儿, 但是真正掌握是很难的,不花功夫是不行的,放在哪门语言里都是一样的。
abc612008
2018-08-02 10:38:51 +08:00
其实是因为其他语言的特性大部分都能在 c++里找到类似的东西,所以类比学习很好学。( lisp haskell 这种语言除外)
Leigg
2018-08-02 11:35:39 +08:00
@tt67wq 最高的啊,只是例证而已,(我记得你哈哈被领导摸的那位兄 dei )
BBCCBB
2018-08-02 11:38:57 +08:00
学的时候和用的时候 根本不是一回事, 一大堆生态要花时间看, 就算看得快也要花时间不是?
Leigg
2018-08-02 11:53:31 +08:00
@hitmanx 老哥例举的这些特性好像其他语言都有但都没有被人们过于注意的地方,比如 py 的深浅拷贝,引用计数,go 的指针类型 /传递,如果在 C++中这些原理都熟悉的话,不说其他语言,光是上手其他 python 和 golang 肯定是事半功倍的啊。。
Leigg
2018-08-02 11:57:48 +08:00
@hitmanx 语法糖这种就是各自语言的“招式”了,这个应该算不上有难度的东西。而每个语言共性的(比较根本的)地方应该就是那几个吧。 当然,要说精通的话,那一定得另当别论了。我也不是说无脑把 C++往神坛上推 :)
chungzh
2018-08-02 12:03:48 +08:00
你先爬过 C++这座山再说。。。。。。。
firebroo
2018-08-02 12:10:14 +08:00
珠穆拉玛峰不是最难爬的山,贡嘎的攀登死亡率了解一下,还有梅里雪山。。没人爬上去过。。
wzxlovesy
2018-08-02 12:14:33 +08:00
原话没什么毛病
jm00
2018-08-02 12:24:24 +08:00
我觉得这里的 c++应该换成 c,因为 c++大部分新特性都是对 c 的 hack 或者包装,之所以他会说学会了 c/c++学其他的简单,是因为他通过学 c/c++掌握了或者很了解程序语言的实现原理,如果换一个人,这个人不会去主动学习,对原理不感兴趣,那么所有语言对他来说都是一个功能的集合体,他会发现 c 语言需要自己管理内存,而 java 不需要,至于为什么,他不感兴趣也就不会知道,你再给他一门语言,他就会当作一个全新的功能集合来学习,完全不去思考程序语言之间的共性和每种程序语言独有的特性。程序语言就是对实现它的语言的特性或者语法的包装,举个例子:当你理解了 c 程序到底是怎么执行的时候你就会明白 js 里通过字符串索引的数组只不过是经过分类的、语法包装的 hashmap 或者字典,达到这种程度,当你要学一门新语言的时候只需要掌握基础语法就够了(无非就是那些标点符号),至于这门语言那些花里胡哨的功能只不过是一些“工具”根本谈不上“学”。
missdeer
2018-08-02 12:47:35 +08:00
假的,C++难是真的,但主要原因是 Go 简单易学。
northisland
2018-08-02 13:06:03 +08:00
感觉 c++的设计缺陷是异常,各种 programming guide 都禁止用异常
hotdogwc
2018-08-02 13:32:32 +08:00
@danc 你确定 Rust 是稍简单一点的语言?我感觉突破天际了。。
Wicked
2018-08-02 19:47:40 +08:00
C/C++熟悉的同学,对内存,数据结构会更敏感。其他语言的高级特性,本质上就是这二者的封装,知道原理之后至少会用得更恰当
例如,我在学 python 的时候,很自然就会将 str,list,dict 等映射成 C++的实现,然后我就知道该用 join 而不是 a+b+c,该用 iterkeys 而不是 keys,对循环引用这些也是天然敏感
之所以会有顶楼的说法,我觉得是从上述的角度来考虑的。至于 C++复杂的语法,其实是缺点…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/476056

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX