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

我的编程语言使用体会

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

    常年用 C/C++ (C++只限于 class 和 STL)开发底层,这些年用 Python 较多,最近在用 Go 。

    这个帖子并不抛出程序语言论战,而是我自己的一些体会。现在用 C/C++不多的原因是没太多时间折腾内存,除了必须用 C/C++实现,我首选 Go 。

    C

    用好 C ,其它语言都很简单(除了 Rust)。

    C++

    C++大部分特性都不实用,我只用 class 和部分 STL 。

    Python

    适合写 toy code ,性能太低,而且缺少类型检查,运行时错误满天飞。

    Rust

    如果熟悉使用 C/C++,找不到任何理由使用 Rust 。内存安全并不是 C/C++的问题,而是开发者的问题。

    Go

    比 C/C++开发效率高,性能也不错,包管理较为简单。

    Java

    没用过,实在不知道可以做什么... (对于底层)

    ===> 再复杂的程序或技巧对我已没有吸引力,实现它们需要的只是时间,但不同语言的模块(或程序)的连通,进而构建一个复杂系统是更大挑战。

    第 1 条附言    148 天前
    大团队开发使用 C/C++,内存和安全确实是问题,但用 Rust 并不是最佳方案 (微软等巨头公司除外,他们可以招到全世界最好的开发者,并且“不计成本”的重写现有代码)。

    ===> 根据场景,有些领域会用小众语言,例如我之修改别人写的 Ocaml ...


    喜欢和熟悉什么语言,就用什么语言,别折腾使用和你熟悉语言截然相反的语言。精通一门,再熟悉另一门足矣!
    50 条回复    2025-05-19 08:18:38 +08:00
    sampeng
        1
    sampeng  
       148 天前   2
    cursor:在座的都是垃圾
    liuhan907
        2
    liuhan907  
       148 天前   2
    使用 Rust 的理由之一:开发者会犯错(
    wxw752
        3
    wxw752  
       148 天前   25
    我还以为点进来能看到一篇精彩文章呢
    hwdq0012
        4
    hwdq0012  
       148 天前   3
    我是先 c# 再 c++的, 很多一直写 c++的人,是不会悟到高级语言才会接触到的设计模式的
    我接手的 qt c++程序,即使写它的人来自体面厂,雷米厂,等大厂, 但没看到有什么设计
    dll 都是头文件引用了,直接链接,没有抽象,统一的类型注册,初始化,安装,卸载接口 ,更别说依赖注入了
    表格显示连 qt 的 model view 都没用,ui 和业务揉在一块
    滥用信号槽( qt 观察者模式 松耦合通讯机制), 即使和 ui 线程没关的,也要连接到 ui 线程来中继一下
    导致某些操作 ui 卡顿竟然影响 plc 通讯, 等后台重要线程

    最蚤的操作是,某些功能做不出来,让我开发,我用开发完不让合并,因为用了他们不熟悉的技术栈,然后开会批我的时候我让他们自己做一个,沉默,他们提议让我做成小工具,他们在程序里做个按钮调用
    后面算法部又有一个功能类似的小工具需要做,他们用 widget 做了,然后和算法在需求上吵起来了,有个功能他们做不出来,算法说 xxx 那个工具上有这个功能, 然后就又让我做了,做完还来问我怎么实现的, 这个事情当时算法总监下场和他们争论,CTO ,CEO 都沉默,但我做出那个算法工具后(就是一个简单的 json 编辑工具),他们不久都离职了,具体怎么走的不知道,当然他们顶着原来大厂的光环,能轻易敲开更高的门槛,对他们来说未偿不是好事呢
    Suaxi
        5
    Suaxi  
       148 天前
    昨天在群里看到一个梗 Rust:reconstruction ing
    chambered
        6
    chambered  
       148 天前
    我说说我的想法:
    Python:我的入门语言。用 Python 开发过 web ,上手简单,但是弱类型以及各种魔法方法让我无法忍受
    Java:我蛮喜欢 Java ,但是目前业务都是基于 Spring 那一套,许多封装的东西让你一愣一愣的,而且很重很重
    Go:喜欢它的简洁语法,不花里胡哨。该怎么写就怎么写,不会写出很骚的代码,适合中间件开发
    Rust:目前正在学习中,入门太难了
    fffq
        7
    fffq  
       148 天前
    php 是世界上最好的语言!
    dacapoday
        8
    dacapoday  
       148 天前   2
    @hwdq0012 听着好熟悉,感觉市面上有两拨人,面试专家 和 工程师。一类拿 offer ,一类解 bug 。
    InkStone
        9
    InkStone  
       148 天前
    这个世界上可能有人能用 C/C++开发而极少犯错(就不抬不犯错这种杠了),但人数极少。

    如果你在一个超过十人的 C/C++团队中工作,那每次大规模迭代写出各种内存错误的几率是 100%,如果没有充足的测试用例覆盖,错误的数量还会往上翻好几倍。
    NessajCN
        10
    NessajCN  
       148 天前   1
    一看就既没用过 C 也没用过 Rust
    Reficul
        11
    Reficul  
       148 天前
    > 用好 C ,其它语言都很简单(除了 Rust)。

    看来是 C <--> Haskell 光谱上偏极左,没怎么接触过或者偏抵触 FP 。所以:

    > 如果熟悉使用 C/C++,找不到任何理由使用 Rust 。内存安全并不是 C/C++的问题,而是开发者的问题。
    xdeng
        12
    xdeng  
       148 天前
    “现在用 C/C++不多的原因是没太多时间折腾内存,除了必须用 C/C++实现,我首选 Go 。” +1 。我之前也是写 C/C++的。
    yb2313
        13
    yb2313  
       148 天前
    rust 应该是降低了心智负担吧, 不用一直想着有没有释放, 折磨自己, 不过还是能写出内存泄露
    guotie
        14
    guotie  
       148 天前
    zig
    arischow
        15
    arischow  
       148 天前
    每次看到 Python 都有人说弱类型啊
    BeiChuanAlex
        16
    BeiChuanAlex  
       148 天前
    《用好 C ,其它语言都很简单(除了 Rust)》哈哈哈哈哈,因为 rust 是自创了一个生命周期的东西,所以没有参考,学起来很难。
    just4id
        17
    just4id  
       148 天前 via iPhone
    没用过 Java ,不敢信
    zhangeric
        18
    zhangeric  
       148 天前
    ai 表示啥语言我都行.
    TWorldIsNButThis
        19
    TWorldIsNButThis  
       148 天前 via iPhone   2
    我谔谔

    经典土味 pl 指点江山
    zzf2019
        20
    zzf2019  
       148 天前
    为啥都说 java 重呢?对于一款语言而言看中的肯定不是启动时间和引用包的数量吧。java 重代表它的性能和扩展,用来做一些复杂的服务和多人协作来说刚刚好。那种简单几行起个服务的,真的不算是玩具吗?能应付企业级使用吗?语言还是要合适场景最好
    xsen
        21
    xsen  
       148 天前
    @zzf2019 #20 等一堆语言都用过之后,比如 c/c++/python/js/ts/java/golang/c#等,你就会为什么都说 java 重因为是真重

    对于刚入行或者语言用得少的,个人是建议主流的都多用用。真的,没对比就没伤害
    flmn
        22
    flmn  
       148 天前   1
    Go ,包管理较为简单。
    想起了 go 的黑历史……
    luting
        23
    luting  
       148 天前   1
    你的发言看出来, 你用的挺多, 但是哪个都不行
    pulutom40
        24
    pulutom40  
       148 天前 via iPhone   1
    入门 php ,写了快 10 年 php 了
    然后 python ,断断续续也用了 7 8 年了
    然后写了两年 java
    最近 5 年主要写 go

    没有什么优劣,每种语言有自己适合的场景
    henix
        25
    henix  
       148 天前
    跟我的爱好差不多,我也喜欢用 C (非 C++)写个人项目,我目前的编程语言选择方法是:
    1. 如果用命令能解决:几行 bash 或 cmd
    2. 更复杂的任务,比如需要字符串处理:写一个几十行 Python 脚本
    3. 需要抽象出函数、模块:写几个 Go 文件,放在一个目录里
    4. 需要很多目录里放很多模块:C 语言
    sodesga
        26
    sodesga  
       148 天前
    国内就是因为 java 技术栈,疯狂分层和造轮子,才养活了一大批码农。EJB -> Spring -> SpringBoot
    zzf2019
        27
    zzf2019  
       148 天前
    @xsen 你都拿 js 和 ts 跟 java 比了,我还说什么呢?就没看懂我说的是什么意思,那么我只能说你是对的,继续保持
    exch4nge
        28
    exch4nge  
       148 天前
    虽然没在工作中用过 Rust ,不过个人觉得 Rust 优势在团队开发的时候,review 别人的代码变得更简单,你能相信代码没有诡异的多线程安全问题,没有内存泄漏等,相对来说看 C++ 就得考虑前面几种问题
    即使有很多年 C++ 经验,复杂需求下的写出内存安全还是有些难度的,难免会踩一些坑
    看好 Rust ,不过国内岗位太少
    kzfile
        29
    kzfile  
       148 天前
    写过的感觉最没法掌握的语言是 scala ,看别人写的代码总有一山更有一山高的感觉
    meinjoy
        30
    meinjoy  
       148 天前 via Android
    有了 ai ,我都敢用 rust 开发项目了…
    weiwenhao
        31
    weiwenhao  
       148 天前
    @meinjoy ai 自己都难以解决 rust 的复杂所有权问题,可能是 rust 材料不够多。大部分时候还是要自己写,只能用 chat 模式和 ai 稍微问一些 rust 里的问题
    pokeyou
        32
    pokeyou  
       148 天前
    @fffq 大 php 真的没落了,没人关心~
    anivie
        33
    anivie  
       148 天前
    > 用好 C ,其它语言都很简单(除了 Rust)。

    这是从来没没接触过 FP ,但凡用过 js……
    netizen
        34
    netizen  
       148 天前
    @fffq 没必要玩这个梗了,没落语言就让它去吧
    hysjw
        35
    hysjw  
       148 天前
    现在都靠 AI 了 能用 Rust 我都用 Rust 写代码已经不是难事了 为啥不更安全些 反正也不是自己写
    levelworm
        36
    levelworm  
       148 天前 via Android
    楼主是做啥的?看来是做底层或者工具啊,求问手下还招人不?
    faimin
        37
    faimin  
       147 天前
    “内存安全并不是 C/C++的问题,而是开发者的问题。” 同意这个观点,不过是人就会犯错,而 Rust 就是为了降低人为犯错的概率。
    zwenooo
        38
    zwenooo  
       147 天前
    @kzfile 没有吧,我当时学 spark 的时候专门去学了 scala ,跟 java 类似,除语法外也跑在 jvm 上,会 java 的反正学起来超级快。这语言感觉非常优雅。我超爱它的 case class ,可是就应用场景太少了。
    hongchends1
        39
    hongchends1  
       147 天前
    go 只适合做单一功能,逻辑复杂的不要用
    py 除了机器学习就当个脚本用把,当然 cv 啥的还是挺方便的
    c/c++没办法了再用
    java 适合做一些业务逻辑处理,现成的轮子怎么用怎么方便
    cnbatch
        40
    cnbatch  
       147 天前
    老实说,如果 C++只能用 class 和 STL ,我绝对不用 C++。
    换句话说,我坚决拒绝 C++98 。

    我是用了好一段时间 C# 再回到 C++的,高版本 C++的特性是刚需。
    frayesshi1
        41
    frayesshi1  
    PRO
       147 天前
    @hwdq0012 #4 嘿嘿,不管是 Qt ,MFC 这些都是这样的,业务线程和 UI 在一个 CPP ,这样调用方便,都是为了一个开发效率,因为 C++没得一个很好模式或者框架供开发者使用
    SiLenceControL
        42
    SiLenceControL  
       146 天前
    我猜没人用 Dlang
    36963
        43
    36963  
       146 天前
    没有提汇编吗。。。呵呵
    kekeabab
        44
    kekeabab  
       146 天前 via iPhone
    用了几年 rust 和 go 学了一堆乱七八糟的花里胡哨语言,最后还是返璞归真用回 c 了
    hwdq0012
        45
    hwdq0012  
       146 天前
    @frayesshi1 # 41 对我来说,入门 c++就是把 qt c++用得和 .net + c#一样
    每一种 c#的常用设计模式 ,或语言特性都在 c++或 qt 中找到对应的东西
    比如智能指针, 协程 ,反射,。 业务和 ui 线程分开为不同线程当然也是必需的
    所以刚换 qt c++的工作时,感觉同事总体来说写的代码比之前的 c#同事差很多,所以我才说 很多一直用 c++的开发者,靠自己写项目是很难悟出更高级的 oop 语言的设计模式的
    techphoebe
        46
    techphoebe  
       146 天前 via iPhone
    @weiwenhao 我用 Claude 3.7 写 rust 代码,很少有编译错误,所有权类的问题它也能自己解决。不过稍微复杂点的模块架构、逻辑不行,改几次后容易越改代码越长
    Syiize
        47
    Syiize  
       146 天前 via Android
    @lianglu Python 是强类型语言。

    根据维基百科,“强类型的语言遇到函数引数类型和实际调用类型不符合的情况经常会直接出错或者编译失败;而弱类型的语言常常会实行隐式转换,或者产生难以意料的结果。”
    Syiize
        48
    Syiize  
       146 天前 via Android
    因为我 Python 用的最多,所以针对 Python 的观点小小反驳一下。代码写的好了基本不会产生运行时错误漫天飞的情况,何况你还可以通过 type hints 显式告诉 IDE 这个变量应该为什么类型,让 IDE 帮你做类型检查。
    frayesshi1
        49
    frayesshi1  
    PRO
       146 天前
    @hwdq0012 #45 qt 没有协程,但是有反射的,但是很多都是自己写 C++动态工厂实现动态反射的,动态加载 lib 。
    tairan2006
        50
    tairan2006  
       144 天前 via Android
    2025 年了,这算怀旧贴么
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     911 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 21:57 PVG 05:57 LAX 14:57 JFK 17:57
    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