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

更换主力编程语言的代价都有哪些?

  •  
  •   winiex · 2014-10-23 14:18:22 +08:00 · 7425 次点击
    这是一个创建于 3692 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近看到一些关于编程语言的讨论,其中有一个是关于程序员转换主力编程语言的代价的。

    有从职业发展上看待这个问题的:高级工程师转换语言后,相当于重新开始采坑的历程,从初级工程师做起,薪水也有可能打折。

    有从研发工作本身看待这个问题的:研发工程师的工作工具远远不止语言本身,还应包含所处的开发生态圈、平台、领域知识等。换语言但是不换领域的话,要学的东西不算太多。

    有从纯技术角度看待这个问题的:深入掌握一门语言(不只是从技术底层细节,还包括语言社区的一系列最佳实践)可以让技术从业者写出高效、好维护的代码。程序员换主力语言这件事情就和汽车换引擎一样。

    就我个人的经验来看,我去年六月份开始从 Android 平台的 Java 转换到后端服务的 Python 语言,中间最大的感受,一是跨范式后早期语言思维的接受有些困难,二是后端方面的领域知识和 Python 社区最佳实践也得花比较多的实践去学习,三是要去踩坑。

    有相同经历的童鞋们的感受是怎样的?
    39 条回复    2017-09-26 12:26:12 +08:00
    winiex
        1
    winiex  
    OP
       2014-10-23 14:21:01 +08:00
    如果有 HUST 的师兄姐师弟妹,欢迎去我科技术宅小组一起来讨论啊。http://www.douban.com/group/topic/64405880/
    nybux
        2
    nybux  
       2014-10-23 14:23:33 +08:00
    我觉得只要基础知识扎实,换语言坑很少
    cxe2v
        3
    cxe2v  
       2014-10-23 14:24:45 +08:00
    看你从什么语言换到什么语言,比如从C#换到JAVA毫无压力。但是换到C就很痛苦了
    winiex
        4
    winiex  
    OP
       2014-10-23 14:31:49 +08:00
    @nybux

    嗯,赞同你的观点。基础本身对于技术人员来说是必不可少的。
    不过我觉得,问题在于涉及到换语言的这个问题的话,比较急需的一些基础知识大学教的挺少的。特别是和语言范式相关的一些知识。我还是看了《程序设计语言》[1]这本书才知道有动态语言这个东西的。

    [1]
    winiex
        5
    winiex  
    OP
       2014-10-23 14:32:04 +08:00
    winiex
        6
    winiex  
    OP
       2014-10-23 14:33:57 +08:00
    @cxe2v

    我从 Java 切换到 Python 的时候,当时就对什么是属性,什么是 Lookup,什么是“动态”这些东西非常理解不能......。

    我记得有个说法,就是程序员至少得各个范式的语言都学习一种,等到工作中切换语言的时候,受到的负面冲击就会小一些。
    ren2881971
        7
    ren2881971  
       2014-10-23 15:04:30 +08:00
    c + java +(python/ruby)都熟悉的话 就咋转都不怕了。
    halfelf
        8
    halfelf  
       2014-10-23 15:18:16 +08:00   ❤️ 1
    毫无代价,目前可以直接写Ruby/Python/Clojure/Java
    复习一两天可以直接写C/Cpp/Erlang/PHP
    复习三四天可以直接写Scala/Objc/Rust/Perl/Scheme
    其他任意可以在一周内上手。
    用的越多,用新的边际成本越小
    anjianshi
        9
    anjianshi  
       2014-10-23 15:22:04 +08:00
    感觉换语言没有汽车换引擎那么严重吧,应该是相当于修摩托车的改行修电动车,呵呵
    Mirana
        10
    Mirana  
       2014-10-23 15:26:06 +08:00
    @halfelf 用的越多,切换成本越小+1
    winiex
        11
    winiex  
    OP
       2014-10-23 15:30:35 +08:00
    @ren2881971

    哟哟切克闹,各种语言来一套。
    winiex
        12
    winiex  
    OP
       2014-10-23 15:32:20 +08:00
    @halfelf

    碉堡了......前辈你这是多少年的经验啊?
    winiex
        13
    winiex  
    OP
       2014-10-23 15:32:43 +08:00
    @anjianshi

    搬砖的改行搬西瓜。
    freeze
        14
    freeze  
       2014-10-23 15:41:42 +08:00
    @halfelf

    前辈入门语言是什么?
    ioth
        15
    ioth  
       2014-10-23 15:45:46 +08:00
    @winiex 3个月零五三就够了。
    软件全身心学两年后,世界上已经没有新东西了。
    halfelf
        16
    halfelf  
       2014-10-23 15:48:08 +08:00
    @freeze 科班出身,基础课是C,要说更早就是初中basic。。。
    halfelf
        17
    halfelf  
       2014-10-23 15:50:28 +08:00
    @winiex 惭愧,耽误过两年青春,经验不多,觉得学新的有意思就看看,看多了看新的东西会自动将概念映射到已学的东西上,幸运的是现在能决定技术选型所以就越用越多。
    special
        18
    special  
       2014-10-23 16:02:39 +08:00
    我个人感觉最难转的是 Haskell 等函数式编程语言,其他的,你熟悉了某个领域后,一般都很容易转,例如熟悉 Ruby on Rails 并且有 Javascripts 基础的,看下 NodeJS 的基础教程后,都可以马上上手写了。

    跨领域转的话,例如楼主从 APP 开发转向后端开发,难点不是在语言吧,而是前后端思维的差别。
    semicircle21
        19
    semicircle21  
       2014-10-23 16:04:12 +08:00
    如果你试图教半路出家的学软件开发, 你就会觉得, 其实换个编程语言不算什么事..
    mahone3297
        20
    mahone3297  
       2014-10-23 16:17:52 +08:00
    大家都说好像成本很小。。。
    我个人还是比较同意lz的意见,成本还是比较大的,各种坑需要好好踩一遍。。。
    winiex
        21
    winiex  
    OP
       2014-10-23 16:24:06 +08:00
    @special

    难道不是 Lisp 以及各种方言咩?

    思维转换确实很大。跨领域其实比跨语言难多了。好多人说的跨语言难,其实是跨领域难。
    winiex
        22
    winiex  
    OP
       2014-10-23 16:25:26 +08:00
    @halfelf 前辈是在创业公司负责技术吗?技术选型应该是一个需要多方面尝试的过程啊。一般架构师都懂的领域非常多的说。
    Mutoo
        23
    Mutoo  
       2014-10-23 16:31:28 +08:00
    七周七语言...嗯,这是一本书名。
    YORYOR
        24
    YORYOR  
       2014-10-23 17:07:09 +08:00
    换语言没什么难度 关键是各个语言的框架。都是坑
    winiex
        25
    winiex  
    OP
       2014-10-23 17:12:52 +08:00
    @Mutoo

    这个系列还有个七周七数据库来着。
    mingzhi
        26
    mingzhi  
       2014-10-23 17:21:44 +08:00
    学过的语言的越多,发现相识之处越多,切换成本越小.
    ibudao
        27
    ibudao  
       2014-10-23 17:43:29 +08:00
    认真学习一下编译原理相关的知识,换语言分分钟。。
    winiex
        28
    winiex  
    OP
       2014-10-23 17:46:14 +08:00
    @ibudao

    表示看过龙书,也尝试写过小型的编译器前端,换语言差别大了还是有些吃力啊。

    编译原理是语言实现的相关知识,也很重要。但是个人感觉换语言还是对于语言核心的范式有接触过的话会更容易。
    caoyue
        29
    caoyue  
       2014-10-23 17:50:29 +08:00
    从自己 C# 切换到 Erlang 的过程来说,感觉还行……
    思维转换可能没那么快,但是多看多写多用,上手也不是太大的问题。
    只能说达到使用的程度来说,不算太难。
    不同语言互相印证的时候,还能有些意想不到的收获。

    具体取决于工作内容吧,有的工作只需要会用,有的工作还需要创造性或者解决复杂问题,后者不是短时间能达到的。
    Comdex
        30
    Comdex  
       2014-10-23 18:50:21 +08:00
    java切换到golang感觉还行
    lygmqkl
        31
    lygmqkl  
       2014-10-23 19:24:17 +08:00
    思想的部分 会得到升华,毕竟各家都有特色,但是初期日子不会太好过,快速精通一门语言的高级部分是不现实的。。。

    会增加学习成本,在初期会犯低级错误,比如用一些很“低级”的思想来处理问题。
    SBv2ex
        32
    SBv2ex  
       2014-10-23 20:06:21 +08:00
    GeekGao
        33
    GeekGao  
       2014-10-23 20:09:23 +08:00
    @halfelf 不能同意再多
    zhouzm
        34
    zhouzm  
       2014-10-23 20:10:57 +08:00
    快速精通一门语言的高级部分是不现实的+1

    了解一门语言是一回事儿,掌握一门语言又是另一回事儿了,应聘材料上写的精通多门语言(技能),有几个能真正做到的,
    iam36
        35
    iam36  
       2014-10-23 22:18:14 +08:00 via Android
    @halfelf 结论尚可支持。

    从你掌握的语言数量来说,你对掌握以及精通的定义太低了。

    举个例子,我有用visual foxpro写网络爬虫,充其量自觉非常熟练,不敢称精通。
    C,我写过银行用的商业代码,是代表公司的商业行为,而我对自己写c的认知是使用。干自己的活,绝不会首选想到用它…
    onemoo
        36
    onemoo  
       2014-10-23 22:37:23 +08:00
    会C、C++,正在学python,因为对网站感兴趣,还打算学学与前端相关的语言。我觉得一段时间内不用换了...

    其实主要取决于你对计算机系统和各种语言范式的了解程度。对此领悟颇深,同时又熟悉较底层的语言的话,对各种语言都会适应得很快。
    rainysia
        37
    rainysia  
       2014-10-24 10:50:16 +08:00
    在公司经常3个月java,3个月php,3个月python,5个月c#.来回切
    wickila
        38
    wickila  
       2014-10-24 10:54:52 +08:00
    在公司内部转换语言,代价就不大.一个是公司有人带,踩坑相对容.,另外一方面薪资水平也不会下降.所以需要切换语言的时候,尽量选择在公司内部切换,而不要跳槽切换.
    xujiazhe
        39
    xujiazhe  
       2017-09-26 12:26:12 +08:00
    https://www.quora.com/How-do-some-developers-learn-a-new-programming-language-in-one-night
    这个帖子有几点挺认同.
    1, 学习一门新语言并不难, api, 库, 工具, 语言开发生态(如蓬勃发展的前端), 才是大头.
    2, 怎么算掌握呢, 熟悉语言的运行时, 和 特点(python 的 GIL, JS 的函数式, Java 的 GC 坑, 写出很符合 C++语义的代码).
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   921 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:28 · PVG 04:28 · LAX 12:28 · JFK 15:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.