[求助] 我好像再也没学会另外一门编程语言! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
closedevice
V2EX    程序员

[求助] 我好像再也没学会另外一门编程语言!

  •  a href="Javascript:" Onclick="downVoteTopic(892459);" class="vote">
  •   closedevice 2022-11-03 20:19:00 +08:00 3230 次点击
    这是一个创建于 1072 天前的主题,其中的信息可能已经有所发展或是发生改变。

    记得以前刚从事研发这个行业,做的是 Java 方面的事情,当时认真研究了几年语言特性,从使用到语言实现,再到 VM 实现细节。

    这么多年过去了,用的过语言蛮多,但好像再也没有花大量的时间研究另外一门语言:很多时候就是用的时候看看,一段时间不用就忘了,仿佛从未将它们学透过一样。

    所以各位同行有遇到类似的问题么?是怎么解决这个问题的?

    16 条回复    2022-12-18 16:14:08 +08:00
    msg7086
        1
    msg7086  
       2022-11-03 20:36:48 +08:00   1
    解决什么问题?
    没有学透第二门语言是一个问题吗?造成了什么样的后果,对你产生了什么样的坏影响?

    学编程语言,基本上两个作用,一能用这门语言挣钱养家糊口,二能学习这门语言设计的思想精髓。
    现在养家糊口不成问题,设计思想也差不多都学完了,你还需要解决什么问题?
    wu67
        2
    wu67  
       2022-11-03 21:01:32 +08:00   2
    表示一直想学一门 js 以外的语言, 但每次一看那些语言的符号(定义 /操作符)就头疼, 然后不了了之, 像 :: [] 全大写蛇形常量 之类的, 混在一起我每个符号都认识, 但组合一起就不知道啥意思了. 第一次感受这种痛苦时大二时学 C 艹
    FrankHB
        3
    FrankHB  
       2022-11-03 21:07:59 +08:00
    你确信?
    JVM 的 bytecode 编码的就是一种跟 Java 截然不同的语言。
    zhuo1ang
        4
    zhuo1ang  
       2022-11-03 23:27:08 +08:00
    说真的我也有这种感觉,浅尝辄止的语言很多,都没有能掌握到一个比较深入的程度,这一点上还需要额外自律,自己真是动力不足...
    2NUT
        5
    2NUT  
       2022-11-03 23:31:23 +08:00
    看 op 的描述 你算 T 型人才
    thinkershare
        6
    thinkershare  
       2022-11-04 00:15:44 +08:00
    没有必要去深入理解一门编程语言,如果你是做编译器和编程语言设计的另说.
    iClass
        7
    iClass  
       2022-11-04 00:32:00 +08:00
    程序员的必修之路:语言从入门到放弃。唯有改行才能改邪归正。
    HeapOverflow
        8
    HeapOverflow  
       2022-11-04 08:18:21 +08:00
    会那么多语言干嘛,深度大于广度
    lmshl
        9
    lmshl  
       2022-11-04 10:22:45 +08:00
    学语言重要的是语言特性
    在消除 illegal state 方面,Option/Optional/Maybe 和 Either/Result 就都出现在 Java/Rust/Scala/Haskell 中,其根本思想一致,但是表现深度各有不同( Haskell ≈ Scala > Rust >> Java)
    而 Kotlin/Swift/TypeScript 等则走向另一条路,Union type ,Explicit Null Type
    ADT 数据结构,也就同时出现在这些现代语言中( Haskell/Scala/Rust/Kotlin......)。Go 则是开历史倒车,这也是为什么我不喜欢 Go 。

    说到并发,大部分语言都选择了用户有感的 stackless coroutine (基于 IO Monad 的 Haskell ,Scala ,Javascript Promise 。以及基于编译器翻译成状态机的 Rust ,Kotlin ,Javascript Async ,C#),少部分选择了用户无感的 stackful coroutine (比如 Java Loom ,Goroutine )。

    说到资源管理,有 GC 的语言可以用 (AutoCloseable/IDisposable),无 GC 则可能用 RAII ( Drop/Deinit),函数是语言可能选 Resource Monad 甚至还能配合 linear type 做更强力的保证。


    回到问题:我认为学语言的主要目的是学语言特性,因为健壮代码的最佳实践已经被抽象成这些语言特性。当你学会这些语言特性以后,你可以很低代价迁移到具备此类语言特性的其他语言中,甚至在不具备这些特性的语言里(比如 Java )你依然可以写出正确的代码。

    如果你想学语言特性,我建议可以用《 SICP 》打基础,用多范式的 Scala 做练习,同时继续学习 Rust 与 Haskell 。并且给自己一个驱动力,比如在允许的情况下,新项目选型或者个人项目可以考虑采用 Rust / Kotlin 来逼自己一把。
    tobeyoung
        10
    tobeyoung  
       2022-11-04 10:25:09 +08:00
    @FrankHB bytecode 编码应该不算一种语言吧,我觉得 smali 这种才算一种语言
    pocarisweat
        11
    pocarisweat  
       2022-11-04 10:36:05 +08:00
    vczh 以前说它推荐学五个语言就够了:C++、Ruby 、Haskell 、Prolog ,因为它们代表了不同的编程范式,还有一个是啥忘了,按照他的风格可能是 C#吧。

    刚好有本《七周七语言》的书也涵盖了这些语言: t/797161

    但是一般情况下,只要没有工作压力,人是很难深入学习另一门语言的
    junmoxiao
        12
    junmoxiao  
       2022-11-04 10:41:01 +08:00
    @lmshl sicp 就算了,懂的人不需要看,不懂的人看着费劲
    FrankHB
        13
    FrankHB  
       2022-11-04 19:46:35 +08:00
    @tobeyoung 怎么不是呢,机器码编码的汇编语言也是语言,还不止一种。
    只不过不是所谓的高级语言罢了。
    JVM bytecode 的 opcode 和 IL 都是放在 JVMS 里讲的。就是 Dalvik bytecode ,也是同时给出运算格式和助记符语法的。Smali 反而不算一个很正式的语言,因为总结它的文法的正式文档都找不到。
    如果 OP 说的是真的,那根本不需要有什么焦虑,因为高级语言和不高级的语言差的比多数不同高级语言之间大多了。
    FrankHB
        14
    FrankHB  
       2022-11-04 19:57:34 +08:00
    @lmshl 这个结论是菜鸡理解。
    说学语言的目的是学语言特性,就跟学库的目的是学 API 一样。典型地没搞清目的和手段。
    如果学语言的目的是要了解不同的范式,那么学会怎么使用特性是可以提供一些帮助,但是因为不熟练就没法确定是否顶用,这非常低效,是个不推荐的做法。
    正常的做法是,直接把目的拔高到修改和制造不同的语言,然后才能方便在不同的语言特性中去重。语言特性不再需要是直接学习的对象,要学习的应该是语言规则怎么写的原因。理解了为什么怎么写,比理解具体是什么重要得多,也理应更加花时间消化。比较几下顺带还可以看出编写 spec 的作者的水平问题。
    至于学会具体语言特性怎么用,那本来就是顺便。须知,大多数个别特性其实都不怎么顶用。归纳出什么特性组合顶用,无非是两种套路:一整个语言挨个儿学(因为一大抄,非常低效),要么就是自己理解怎么去组合。当你清楚怎么组合时,那自然就知道该怎么用了(或者说怎么批判不顶用)。
    只有遇到实际需求叫你用哪个具体语言去实现什么东西的时候,再去考虑学整个语言通常也不需要(因为绝大多数语言的设计者都有不少明确不求甚解的地方,设计出来的东西从没正常到值得你整个照搬去参考的地步)。
    lmshl
        15
    lmshl  
       2022-12-18 15:42:31 +08:00
    @FrankHB
    大佬的建议给我的感觉就像是......
    学霸:“真的很建议大家考清华大学”
    专家:“真的很建议大家全款买房”

    楼主这个阶段和水平的人,我觉得离着大佬说的“改语言”和“造语言”还远得很
    FrankHB
        16
    FrankHB  
       2022-12-18 16:14:08 +08:00
    @lmshl 又不是重写,改改局部特性,跟改库 API 没多少区别。
    会难改的八成是原始设计的错,不见得轮得到显示出用户的菜。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     882 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:42 PVG 04:42 LAX 13:42 JFK 16:42
    Do have faith in what you're doing.
    ubao 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