- 主题:都说十年成就一个专家,为啥很多人20年C语言经验还是菜鸟?
1万小时定律
【 在 xiakem (xiakem) 的大作中提到: 】
: 为何?
:
:
: --
--
FROM 120.244.176.*
rust是一门综合来说设计的相当好的语言。在很多细节的取舍上平衡感把握的很好。
【 在 zeus2615 的大作中提到: 】
: 最近在看rust,它的各种特质让我觉得很可能是最适合我的语言。
--
FROM 117.89.220.*
我基本上排名前20的语言都能写。但我主力就追求2个极端,
一个是c,追求最高的执行效率和最广的运行环境。另一个是python,追求最高的写代码效率和最广泛的应用场景。
至于c++,我认为是浪费脑细胞的行为,不值得投入。至于scheme,haskell这样的FP,我也认为算是coder必须会的语言,但主要是思维上的拓展,我不认为在实践中用它干活有啥特别的好处。
大部分情况下我的这套c+python的组合干的还不错,但项目复杂之后就会存在需求交叉的中间地带。倒也不是说无法解决,只是两者都有各自的力不从心的地方,解决的比较dirty。
比如c缺乏强大的抽象能力,也更容易犯错,需要砸不少时间在debug里面;python在复杂项目的场景下开发效率会迅速退化,退到跟其他语言开发效率差不多,就失去了它的价值。
所以我一直在寻找能取代这套模式的更好的语言。我之前的想法是rust+go的组合,但之前rust这块一直没啃下来,加上ai生态基本上也没go啥事,所以就一直没升级。
我目前的感觉是rust在c这一端可以做到完美取代,并且还能往python那一端延伸一大截。这种情况下似乎rust+python就足够了。
【 在 philbloo 的大作中提到: 】
: 我写c的时候是当汇编来写的 从硬件开始设计 到软件就全都是读写寄存器
: python是用来写原型 computational group theory
: c++用在需要强类型 和数据架构比较复杂的地方 比如编译器中端
: ...................
--
FROM 117.89.220.*
我前面说rust这门语言平衡的非常好,就是这种感觉。
在核心设计思路上,rust走的是组合的路线,而不是OOP一堆继承的路线。这个就比OOP高明的多。我是感觉OOP这种模型有点太学院派了,rust的组合+trait的方式有点实践派的感觉,我从中感觉看到很多c的影子。这一点我可太喜欢了。
rust的问题我目前感受来说,主要是这种trait的组合很破碎。不像OOP,虽然OOP会搞出很深看了就烦的继承关系,但起码大家可以追根溯源找亲戚。当然OOP这种一切都要从root一层层派生下来的设计哲学我是很讨厌的,我认为就是脱裤子放屁。所以我超喜欢python的duck typing这种简单直接的方式。
但反过来,我现在理解了rust其实用了一种很巧妙的方式缝合了这种破碎感。比如rust里想把任何东西暴露出去都必须显式的加pub。而且这个pub不会继承,你得一个个大量的加。我刚开始学rust的时候对这个设计怨念很大,我甚至想用rust的宏来让我不用敲一堆pub自动把所有东西都pub出去。但我现在就理解了,这其实是让你尽量把各种相关的trait组合在同一个文件中。简单的说你想写出很破碎的代码它也不拦着你,但如果你不想敲一堆pub让代码看起来很丑,你就得自己去组织好它们的关系,把相关的东西放在同一个上下文里。
这个想法就相当的实践派。理解了这一点之后我发现rust里面有很多设计哲学都是在贯彻这个思路。比如到处都是的unwrap是在逼你去组织好错误处理机制。
我只能说,这个设计太天才了。所以我为啥一直在说rust的平衡感很好,而不是它的xxx多么的nb,就跟c++那样xxx啥都有啥都能干,我听到这种说法就想吐。
【 在 beep 的大作中提到: 】
: rust最坑爹的地方不在于所有权和生命期这些玩意儿,这些学起来材料太多了,最坑爹的地方我觉得在于你要是不熟悉库函数,连最常用的Option Result都用的跌跌撞撞的
: 然后就是从OOP范式出身的人,看到别人把trait用得出神入化,感觉无法望其项背
:
--
修改:lvsoft FROM 117.89.220.*
FROM 117.89.220.*
生命周期确实 Rust 跟其他主流工业级语言不一样的地方,是它的难点也是它成功的点。
Option、Result 有一定的 FP 风格,但它既不是 Rust 首创也不是 Rust 独有,尤其 Option 差不多现代语言标配了,不但 Scala、Rust、Swift 有,更早的 SML、OCaml、Haskell 就有,甚至 Java 8、C++ 17 也有。有其他现代语言的经验,Option、Result 用起来就不会那么陌生了。
【 在 beep 的大作中提到: 】
: rust最坑爹的地方不在于所有权和生命期这些玩意儿,这些学起来材料太多了,最坑爹的地方我觉得在于你要是不熟悉库函数,连最常用的Option Result都用的跌跌撞撞的
: 然后就是从OOP范式出身的人,看到别人把trait用得出神入化,感觉无法望其项背
: 吕
: ...................
--
修改:jyw FROM 220.194.45.*
FROM 220.194.45.*
让类型系统在编译期来保证代码编写的正确性是语言更加智能的一个趋势。以后大家用多了就能习惯了。
【 在 beep 的大作中提到: 】
: 就比如说前面lvsoft用trait来保证量纲计算的正确性,类似这种使用trait的套路非常多。。。
--
FROM 220.194.45.*
全文严重赞同。
跟 pub 写起来麻烦这点类似的,还有 mut。因为 Rust 更推荐慎重 pub、少用 mut。这样做一定程度上强迫开发者写出比放任不管更好的代码。
【 在 lvsoft 的大作中提到: 】
: 我前面说rust这门语言平衡的非常好,就是这种感觉。
: 在核心设计思路上,rust走的是组合的路线,而不是OOP一堆继承的路线。这个就比OOP高明的多。我是感觉OOP这种模型有点太学院派了,rust的组合+trait的方式有点实践派的感觉,我从中感觉看到很多c的影子。这一点我可太喜欢了。
: rust的问题我目前感受来说,主要是这种trait的组合很破碎。不像OOP,虽然OOP会搞出很深看了就烦的继承关系,但起码大家可以追根溯源找亲戚。当然OOP这种一切都要从root一层层派生下来的设计哲学我是很讨厌的,我认为就是脱裤子放屁。所以我超喜欢python的duck typing这种简单
: ...................
--
修改:jyw FROM 220.194.45.*
FROM 220.194.45.*
每天干的工作没有挑战的话,也不会进步。
【 在 xiakem 的大作中提到: 】
: 为何?
--
FROM 113.225.2.*
我的感觉是,rust是少有的能消除个性的语言。
上一个把这点做得很好的语言是java。但java是谁来写都写的跟裹脚布一样又臭又长。我觉得java写起来就特别的放松,我完全没有心智负担反正怎么写都是一泡屎谁来写都差不了太多~~
但rust是谁来写都会写的很好,都会有很好的设计,都会有很高的代码质量。它的很多底层设计会逼着你必须把事情做对...
比如我今天为了让代码能编译过,不得不飞线改硬件...因为我硬件上的设计有一处不合理的gpio功能共享,设计的时候我知道这是一个潜在的小问题,但我当时也没太在意放它过去了。结果这个共享带到rust里,因为所有权问题把代码搞的很麻烦。也不是不能解决但就是会让代码很丑,而且这个丑会扩散到整个系统,到处都是变得全方位的丑...最后我实在是看不下去了改硬件从源头解决....
这种根植于底层的消除问题,消除个性的能力,意味着它是一门彻彻底底为工程,为团队服务的语言。我实在是太看好它的前景了。
【 在 jyw 的大作中提到: 】
: 全文严重赞同。
: 跟 pub 写起来麻烦这点类似的,还有 mut。因为 Rust 更推荐慎重 pub、少用 mut。这样做一定程度上强迫开发者写出比放任不管更好的代码。
:
--
修改:lvsoft FROM 117.89.220.*
FROM 117.89.220.*
在我看来 public,protected,friend,private 这几个作用域的词还是不够用的
还需要一堆, 比如 @foroverride @api 之类的作用域的词
【 在 jyw 的大作中提到: 】
: 全文严重赞同。
: 跟 pub 写起来麻烦这点类似的,还有 mut。因为 Rust 更推荐慎重 pub、少用 mut。这样做一定程度上强迫开发者写出比放任不管更好的代码。
: 单
: ...................
--
FROM 223.198.82.*