V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ThinkStu
V2EX  ›  程序员

转语言真的这么容易吗?

  •  
  •   ThinkStu · 2023-11-03 13:40:21 +08:00 · 6397 次点击
    这是一个创建于 368 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 v2 里面泡的久了,经常能在许多帖子下面看到有人说“转语言非常容易”,Go 语言能半天入门 、Java 太简单了之类的回复。

    但是在我看来事情却没那么容易,换一门语言就意味着框架、最佳实践、对接第三方开发等都要重来一遍。自从 4 个月之前从 Java 转到 go ,过程中经历了许多“痛苦”,慢慢的我发现转一门语言没有那么容易,学了四个月都不敢说自己已经掌握 go 开发,越学到后面发现自己不会的也越多,同时 Java 的语法也忘了一些。

    作为一名对编程有着较大兴趣的爱好者,想知道大家对此事的看法。

    1. 转语言是否是一件容易的事?

    2. 真的有人同时擅长多门语言,并且写的都不赖?

    75 条回复    2023-11-09 08:19:14 +08:00
    fgodt
        1
    fgodt  
       2023-11-03 13:41:58 +08:00   ❤️ 2
    工作中 用过 c 、c++、java 、go 、oc 、js ,我感觉不是很难
    z7356995
        2
    z7356995  
       2023-11-03 13:44:06 +08:00 via Android
    借助 chatgpt 呀,有一点编程基础就可以了引导 gpt 给你写代码了
    cdwyd
        3
    cdwyd  
       2023-11-03 13:44:36 +08:00 via Android   ❤️ 24
    有些人表面是换了个语言实际上只是换了个语法而已
    每次看到 java 味的 python 和 php 代码就头大
    guoooo00oohao
        4
    guoooo00oohao  
       2023-11-03 13:46:01 +08:00   ❤️ 3
    用一个语言完成工作, 和完全掌握理解一个语言我感觉还是有很大不同.

    如果转语言完成工作, 我感觉如果都是强类型语言之间甚至都不需要学习,立马就可以开始写.就是慢一点,写起来不地道.
    witcat
        5
    witcat  
       2023-11-03 13:49:31 +08:00   ❤️ 2
    程序员也是有“原生语言”的,半天写个"hello world"可以,入门没可能。
    kaiveyoung
        6
    kaiveyoung  
       2023-11-03 13:49:49 +08:00 via Android
    工作语言 C ,C++,Python ,go ,php ,vue ,shell ,lua ,个人感觉,不难
    BlackEagles
        7
    BlackEagles  
       2023-11-03 13:49:59 +08:00
    转个语法那都不叫啥
    看看后端转前端、前端转 APP 、APP 转后端看看要多久熟练起来
    jasonchen168
        8
    jasonchen168  
       2023-11-03 13:51:45 +08:00
    转语言写业务代码不难,难的是你真正掌握一门语言
    sentinelK
        9
    sentinelK  
       2023-11-03 13:53:22 +08:00   ❤️ 1
    关键要给“转语言”下一个定义。
    是可以通过其他语法实现相同逻辑,叫转语言。
    还是利用本语言的最佳实践完成需求,叫转语言。

    前者很容易。
    后者不算太容易,但有其他语言的基础,难度也不大。毕竟人的经验是可以参照、对照、映射、反推的。每个语言也只是在其特色上的区别。

    但换而言之,如果“转语言”的环境变化过大,甚至是跨工种(后端<=>前端<=>统计)的,我觉得这个“转”字就不成立了。
    ewBuyVmLZMZE
        10
    ewBuyVmLZMZE  
       2023-11-03 13:53:23 +08:00   ❤️ 1
    还好吧,编程语言上的语法相似性挺多的,接触的语言越多越能感受到很多东西是相通的。其实 Go 和 Java 可能相对割裂大一点,你 Java 转到 Kotlin 和 Scala 就很容易。有 C 的经验转 Go 也很容易。关键点在于你使用的语言少,多接触点就发现不难了。

    另,Go 语言的语法看似简单,但是细节还挺多的,比如 Go 里面的赋值就没有那么简单。但是 Go 语言最难的,还是那个大道至简的思想,很难组织好代码结构,但是无脑写就很爽。
    meiguozhiguang
        11
    meiguozhiguang  
       2023-11-03 13:55:32 +08:00   ❤️ 1
    转语言在于心态,宽松的环境,放松自信的心态,客服困难写几个小项目,基本就过了阵痛期,然后就一马平川了。
    dobelee
        12
    dobelee  
       2023-11-03 13:57:40 +08:00
    Go 总是能看到很 java 和很 php 的写法,我也不知道他们算不算转了。
    meiguozhiguang
        13
    meiguozhiguang  
       2023-11-03 13:59:50 +08:00
    想起来 很早年间 .net 转 php ,是在一个非常紧张的项目里迅速转,非常难受,压力大心态不好,没有正确的学习方法,就是硬写, 真正有了感觉还是换了工作静下心,理解体会,知识能力迅速就上来了。
    8355
        14
    8355  
       2023-11-03 14:00:19 +08:00
    当工作年限到达 8 年以上,设计过一定规模数据量的业务解决方案,其实语言和语言之间的区别不会特别大,不要想着每次一上来就最佳实践,你先保证按照同一种最简单的模式可以实现功能,之后优化学习,现在通过 gpt 学习达到高级开发的水平还是很简单的,再通过学习别人的代码进行方案优化可以逐步接近最佳实践。
    Reficul
        15
    Reficul  
       2023-11-03 14:01:14 +08:00   ❤️ 3
    写出来可以,写的 native 难。每个语言有自己的风格偏好,你的母语决定了你的思维方式,参考《降临》。
    dongisking
        16
    dongisking  
       2023-11-03 14:01:40 +08:00   ❤️ 1
    公司内部转语言不难,无非是刚转时候 curd 慢一点。但是没有项目经验直接去面试,得被吊打
    coderluan
        17
    coderluan  
       2023-11-03 14:01:48 +08:00
    现在 IDE 这么智能,还有 GPT 帮你,学个语法真心不难,但是剩下的主要看两名语言的生态一样不一样。
    version
        18
    version  
       2023-11-03 14:02:02 +08:00
    换语音是很容易..难点是换语言里还能找到 相同工资的岗位么..工作经历都写花
    说白了.你可以懂.但是不能当饭吃..除非你是 技术部门架构师
    thinkm
        19
    thinkm  
       2023-11-03 14:04:14 +08:00
    是的
    AoEiuV020JP
        20
    AoEiuV020JP  
       2023-11-03 14:07:55 +08:00
    我感觉“换语言”和“换技术栈”是两码事,前者简单,后者困难,
    但问题是换语言经常就需要换技术栈,可总有人考虑换语言难度就只考虑语言本身,
    dreamingclj
        21
    dreamingclj  
       2023-11-03 14:13:15 +08:00
    我一个安卓开发,半个月时间转到 react native ,一个月后做完一个项目,又被转到 react,转到 react 只给三天时间学习,然后直接上手项目
    yousabuk
        22
    yousabuk  
       2023-11-03 14:18:11 +08:00 via iPhone   ❤️ 1
    要是学 C 而且学好了,个人觉得转其他语言比较快。
    就像学会了九阳神功学其他什么武功都快。

    目前常用 C, Java, LabVIEW, Vue ,混合开发,感觉也还写的不赖。

    C:主要写底层
    Java:主要写和数据处理的,TCP/IP ,数据库等
    LavVIEW:主要用来工控方面的
    Vue:就是 web 前端了(嵌入式设备或服务配置页面)
    yousabuk
        23
    yousabuk  
       2023-11-03 14:20:16 +08:00 via iPhone
    多语言混合开发,定位 OK 符合自身工作需求,还是比较轻松的。
    tangtang369
        24
    tangtang369  
       2023-11-03 14:39:11 +08:00
    工作中日常实用 c++ python Go
    了解一定规则后其实无所谓语言的,会一种则会 n 种
    yazinnnn0
        25
    yazinnnn0  
       2023-11-03 14:41:57 +08:00   ❤️ 1
    从 java 糊业务变成 go 糊业务有啥难的

    如果换赛道的话那当然难了
    NoNewWorld
        26
    NoNewWorld  
       2023-11-03 14:43:01 +08:00
    转语言不难,难的是转风格,我工作 java ,但是日常会写 c++等其他的,现在写其他也一股 Java 味
    dilu
        27
    dilu  
       2023-11-03 14:57:06 +08:00
    写业务代码不觉得有多难,我转 Go 一周左右简单业务 curd 一点问题都没有了。别的语言不太确定。
    henix
        28
    henix  
       2023-11-03 15:01:03 +08:00   ❤️ 1
    我觉得编程语言之间还是有很多共性的,如果你见得多了,多思考,我认为转语言不难。

    例如 Java, Python, js 都有迭代器( iterator )概念,Python 和 js 都有生成器( Generator )概念。Java 和 Python 都是面向对象,但 js 就不是,而是基于原型( Prototype-based )的,另一个基于原型的语言是 Lua 。而 Go 就更不面向对象,Go 的抽象方法是 interface ,是基于胖指针( fat pointer )的,另一个与之类似的是 Rust 的 trait 。

    有些语言是静态类型,还有些语言是动态类型。你会发现静态类型语言有一些相似的处理方法,比如 Go 中 json 转换是声明一个类型然后用 tag 标注字段名,而 Java 的 gson 也可以用注解来标注字段名。而动态语言的 json 转换就完全不同。

    推荐在你现在的基础之上再学习一门动态语言,例如 js 或 Python ,有了更多实际经验就能思考语言之间的共性和个性。
    tairan2006
        29
    tairan2006  
       2023-11-03 15:12:12 +08:00
    我学过的,大部分很容易,除了 Haskell 和 Rust
    dacapoday
        30
    dacapoday  
       2023-11-03 15:12:28 +08:00
    学精一门,一通百通,而且市面上的工程语言几乎都是 C 家族的,学好 C 语言,最好是 C/C++,那 Golang ,Java, 这些有如简化了的 C/C++ 手到擒来。Python 更是无师自通。js 如果掌握了原型链和历史包袱相关的怪癖,也不难。
    但如果是转非 C (比如 lisp 家族),clojure 和 prolog 这些比较难了。
    alfa
        31
    alfa  
       2023-11-03 15:15:34 +08:00
    有实际业务,挺容易转的,我 3 年前 iOS 转 Java ,没什么压力。就是现在再看自己写的第一个 Java 项目有点不忍直视。
    houshuu
        32
    houshuu  
       2023-11-03 15:16:18 +08:00   ❤️ 2
    平常工作中由于前后端和数据模型都有涉及到, C++, Go, Java, Kotlin, React, Python 这些都是日常使用. Rust, Lua, C#自己做副业会用. 应该算比较多语言的程序员.

    学生时代随波逐流各种学, 为了刷题学 C++, 觉得前端很酷炫学了 Vue, 想做 App 学了 Swift, 研究后来去了机器学习方向就用了 Python 和 R, 倒是工作后其实没怎么学新的语言了. 个人体会就是语言学的越多, 新语言就学的越快. 原因很简单, 大部分语言都是互相抄, 缝合的比例不大一样罢了.

    楼上有说九阳神功类的语言, 一通百通, 我这里重推 C++, Haskell, React.

    写的不赖其实很多人都可以, 但是某个语言精通其实还是很困难的. 因为我们大部分情况对于一个人精通某个语言的感觉往往代表的不是对敲代码的掌握, 而是对这个语言相关工具链和设计上的了解. 比如看报错快速定位, 大概扫一眼代码直接就能感觉到 Bug 在哪里. 或者哪些坑是非常常见的, 哪些写法是容易产生 bug 的. 有时候这个水平甚至还和这个语言生态中用的多的框架强关联, 比如 Java 和 Spring. 就和打游戏一样的, 可以玩一堆 fps 游戏, 都打的挺准, 但是守望先锋玩的好和 cs, pubg 打得好肯定有挺多游戏理解上的不同的.
    dearmymy
        33
    dearmymy  
       2023-11-03 15:23:06 +08:00
    @cdwyd 是的,我理解的转语言也是熟悉相关工具链,和语言特点。
    iyaozhen
        34
    iyaozhen  
       2023-11-03 15:36:42 +08:00
    语法很容易

    但很多最佳实践需要费点功夫。当然你要写啥都 java 味,也简单
    pkoukk
        35
    pkoukk  
       2023-11-03 15:39:36 +08:00
    语言虽多,但其实也就几个 “族”
    c,c++,go 写起来非常像
    java,c#,TypeScript ,写起来也很像
    python 就不说了,究极融合怪,你用的语言的特性,或多或少它都有
    Leonard
        36
    Leonard  
       2023-11-03 15:42:24 +08:00 via iPhone
    比新手入门容易,但肯定不是说换就换,语法换起来简单,特性、生态都要重新适应
    ChoateYao
        37
    ChoateYao  
       2023-11-03 15:45:58 +08:00
    1 个月能上手,1 个月改造成自己的编程习惯框架,最重要的是先写起来,这样才有解决问题场景,才能进步
    clue
        38
    clue  
       2023-11-03 15:47:28 +08:00
    有的语言间的差异非常大,比如 clojure 这种纯函数式的语言,我是不信能随便转过来的
    不过同类语言转起来还是挺快的

    但能写和写好差距可就大了,同样是 js ,有的人整天写屎山,有的人写出了 vscode 、typescript
    lmq2582609
        39
    lmq2582609  
       2023-11-03 15:48:21 +08:00
    可能每个人理解难和简单的程度不一样,如果能写出一些小 demo 就算掌握了一门语言,那这也太好掌握了,谁上谁都行啊。
    getzhujie123
        40
    getzhujie123  
       2023-11-03 15:50:12 +08:00
    入门都不难,要做到精通就有点难了
    jiayouzl
        41
    jiayouzl  
       2023-11-03 15:51:34 +08:00
    我 PHP,node,java,Python,go,C#需要什么就用什么,甚至易语言也是拿来即用.
    ihciah
        42
    ihciah  
       2023-11-03 15:54:42 +08:00
    不同语言还是有自己的思维模式的,相似模式的很容易切换。我写过 py/go/cpp/rust ,但就是写不来 js/java 。
    superkeke
        43
    superkeke  
       2023-11-03 16:09:54 +08:00
    C/C++ ,Objective-C ,Swift ,Javascript ,Java ,Kotlin ,Dart ,语言快,特性和生态要时间
    cambria
        44
    cambria  
       2023-11-03 16:09:59 +08:00
    掌握基本语法:容易
    理解语言特性:一般
    熟悉语言生态:困难
    精通语言内核:想屁吃

    还有个前提是有计算机基础知识和底层开发语言( C/C++一类的)开发经验
    coolair
        45
    coolair  
       2023-11-03 16:13:25 +08:00   ❤️ 2
    那些说容易的都是写的屎山,只是用不同的语言模仿熟悉的语言去实现业务而已。
    getzhujie123
        46
    getzhujie123  
       2023-11-03 16:15:21 +08:00
    不管是 PHP ,java 还是其他语言,只要能做到一门语言真正精通,再学其他语言都能触类旁通,自然能学的很快把
    liujavamail
        47
    liujavamail  
       2023-11-03 16:17:54 +08:00
    我看那些教学课程里,go 语言的视频教程, 凡是讲师直播手写协程的, 没有一个能很顺畅的就写对的, 调试有的都调试了一个小时才发现问题, 还是看起来很牛的讲师
    ShadowPower
        48
    ShadowPower  
       2023-11-03 16:36:24 +08:00
    我个人的经历:
    从完全没摸过任何苹果设备,到会做 iOS 开发(用 Objective-C 和 UIKit ,能边查文档边按要求实现功能),共花了 3 天。
    那时候是 iOS7 ~ iOS9 时代。

    第一天就差不多把 iOS 开发需要掌握的知识搞清楚了,里面涉及到的东西:

    MVC 模式:提前学会了……

    Objective-C:其实 3 天都在学这个,在此之前已经写过了 Java 、C#( Unity 的)、C++、Python 。
    语法其实不需要刻意记忆,看着现成的代码来写,遇到不会的再查询就好了。
    只有这些东西花了我一点点时间:
    @property 、代码块对象、ARC

    UIKit:我感觉它基本上是仿造 Java Swing 或者 Qt Widgets 来设计的,之前做别的项目的经验也能适用。所以我只记了一些对应关系,比如 QWidget 对应 UIView……

    之后就是找一些类似于 awesome-xxx 之类的项目看看有哪些现成的库可以用,比如 AFNetworking 、Masonry 。

    做项目的过程中慢慢掌握其他东西,现学现用。

    PS:没有看过 iOS 开发教程/图书
    yangzzz
        49
    yangzzz  
       2023-11-03 17:00:44 +08:00
    我认为只要基础语法上手了,多些一些项目就已经可以算是入门了。因为 GO 的语法都比较简单,所以很多人认为 GO 很简单吧。
    thetbw
        50
    thetbw  
       2023-11-03 17:05:29 +08:00   ❤️ 1
    主要是好多库,思路都变了,写代码没那么流畅了,还要找一些该用哪些库
    HFX3389
        51
    HFX3389  
       2023-11-03 17:12:09 +08:00
    @cdwyd #3 想看看 Java 味的 Python 和 PHP 的代码
    duluosheng
        52
    duluosheng  
       2023-11-03 17:49:08 +08:00
    多搞几个练手的项目,就差不多入门了。精通需要时间,入门没那么难。
    yh7gdiaYW
        53
    yh7gdiaYW  
       2023-11-03 17:51:27 +08:00
    工作几年后,如果一直持续学习的话,按项目需求换语言换数据库都不是个事儿,上手很快的
    darkengine
        54
    darkengine  
       2023-11-03 17:59:09 +08:00
    跟人类的语言一样,具体要看你“转”到什么程度,是可以到餐厅点餐的级别,还是可以跟人 battle 的级别。
    cdwyd
        55
    cdwyd  
       2023-11-03 18:11:48 +08:00 via Android
    @HFX3389 阿里细的 python sdk 旧版本很明显,新版本很久没看了
    kujio
        56
    kujio  
       2023-11-03 18:13:01 +08:00
    基础的东西都差不多,你会的语言越多,新学一门语言就越容易,很多基础的类/结构体,方法/函数,常用操作,常见设计你都不用看文档就能大概猜到怎么用.
    难点在于技术栈,不同的技术栈想要做到熟悉至少需要一两年的工作经验
    xuhuanzy
        57
    xuhuanzy  
       2023-11-03 19:03:57 +08:00 via Android
    基础的简单,但深入很难,浮于表面的小 demo 谁都能一天搓出。
    aloxaf
        58
    aloxaf  
       2023-11-03 19:28:56 +08:00
    能实现功能是一方面,能用 idiomatic 的方式实现是另一方面
    kakki
        59
    kakki  
       2023-11-03 21:06:03 +08:00
    cpp ,haskell 学的好换其他的不都是降维打击么。。。
    iorilu
        60
    iorilu  
       2023-11-03 22:11:55 +08:00
    @HFX3389 很简单, 你看一些套了几层得什么继承, 一大堆得 class, 什么 get_xxx, Service 之类得词到处飞
    肯定就是 java 风格
    volvo007
        61
    volvo007  
       2023-11-03 22:44:13 +08:00
    @liujavamail 看了好几个教程同感…… 感觉这些讲师对 go 的协程也没有达到融会贯通的程度,所以出错了排错要很久。另一个极端是,我遇到一位讲师从 g 家出来,一看就是 go 老手了,各种信手拈来,但是对于初学者有点过于随心所遇,“亿点点细节”我们跟不上啊😅
    mythabc
        62
    mythabc  
       2023-11-03 22:47:57 +08:00
    仅就业务开发而言,在熟练掌握一门语言后,其他的语言可以一边用一边问 ChatGPT ,比啃厚书/文档的效率高很多
    Ericcccccccc
        63
    Ericcccccccc  
       2023-11-04 01:02:26 +08:00
    你写业务代码, 基本上几天就学会了.

    业务代码都是这样的: 你从 A 处获取数据(无论是数据库, 缓存还是 RPC, 直接抄现成的写法就行), 加工一下, 一般就是 list, map, set 几个简单的结构用一用就搞定, 返回给 B
    icy37785
        64
    icy37785  
       2023-11-04 02:04:41 +08:00 via iPhone
    我在工作中前前后后写过十几种语言的代码,大多数开始写之前都没碰过,打开手册就开始写业务,写出来也都能跑,你问我转语言写一段能跑的代码交付难不难,那是不难的。
    但是你问很好的掌握一门新语言难不难,想融入一门新语言让自己看起来像本地人那还是需要很多时间的。
    Imindzzz
        65
    Imindzzz  
       2023-11-04 07:44:57 +08:00 via Android
    语言的语法只占软件工程的少部分。
    Java 后端转 Go 后端一天就行了,转 Android 起码一个月吧?
    chesha1
        66
    chesha1  
       2023-11-04 09:54:20 +08:00
    转语言,至少原来你能用语言 A 做到的事,也要能用语言 B 做到吧?
    比如你原来能用语言 A 在 leetcode 上顺畅刷题,转了之后也能用新语言刷,不会有数据结构不会写
    原来能用语言 A 找到工作,熟悉关于语言 A 的八股,转了之后,也能用语言 B 找到工作,熟悉关于语言 B 的八股
    不然算什么转语言?充其量算是在学会语言 A 基础上,学了一点语言 B
    keymao
        67
    keymao  
       2023-11-04 10:44:06 +08:00
    高级语言只是语法和特性不同罢了,本质上一些涉及到基本逻辑处理的地方都是类似的,只不过写法或叫法不一样。

    至于什么最佳实践之类的,都是深入了解到语言自己独特的一些功能和特性后重新组织和构建自己现有业务逻辑的一种说法罢了。 你用来构建软件,不算很难。 但是如果想要优化软件性能,你就得对这门语言有相当的了解才行。 浅的需要了解语言最新的特性和功能,深得需要了解对应的语言的虚拟机、解释器甚至是编译器等等。
    docxs
        68
    docxs  
       2023-11-04 11:06:39 +08:00 via iPhone
    说简单的,只是用语言写写 if else ,涉及到调优,这个得了解整个语言生态,这是有学习成本的,有哪些工具,如何分析,这个对新手不是那么容易的
    threebr
        69
    threebr  
       2023-11-04 11:31:29 +08:00
    又不是不能用,能实现需求就行了。什么时候各位程序员能意识到代码不是产品,代码运行的结果才是产品
    danhahaha
        70
    danhahaha  
       2023-11-04 11:31:51 +08:00
    一般人转语言不得先用一周查这种语言的各种优缺点,然后再用一周在论坛与人辩论,再用 2 天搭个环境,再摸鱼半天,半天打个 hello world ,感觉不过如此,再花 2 天与人论坛辩论,再过大概半年有个该语言的相关项目,一拍脑门,这语言我学过呀,然后一周连学带做项目,学会了,转语言成功
    Evovil
        71
    Evovil  
       2023-11-04 14:51:43 +08:00
    有了 chatgpt 后转语言难度直线下跌。

    不管是 c++还是 rust ,不懂就看看源码
    多写,多趟几个坑,就熟悉了。

    前提还是基本功打好。
    zhaohua
        72
    zhaohua  
       2023-11-04 15:54:17 +08:00
    我的历程是 c#->javascript(nodejs)->golang->java. 当然前后快 10 年了.
    nodejsexpress
        73
    nodejsexpress  
       2023-11-04 19:47:29 +08:00
    拿一段 C 的代码换成 python ,或者那一段 go 的代码换成 python ,nodejs 等等不难。

    难得是让你重新开始用一门新语言写一个新项目,而这个项目在原来语言上是没有的。
    ivvei
        74
    ivvei  
       2023-11-05 01:23:32 +08:00
    @nodejsexpress 这个也不难。网上搜搜代码就行。问 ChatGPT ,让它开个头也可以。
    bianhui
        75
    bianhui  
       362 天前
    我工作除了 java 主流后端语言全都用过(工作中)。其实只要你对一门高级语言理解的透彻(当然 c 的概念还是得理解的),千变不离其中。花一天看一下这个语言的语法,特性。剩下六天,找一个你最擅长语言写过的一个中小项目,直接用新学的语言上手去做。遇到不会的就去查。7 天足够到应用与入门程度了,至于精通,肯定会随着你的使用越来越深。根本不需要什么这个教程,那个教程的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3702 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 00:12 · PVG 08:12 · LAX 16:12 · JFK 19:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.