V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
voidmnwzp
V2EX  ›  Go 编程语言

现在 Java 转 go 是不是个好时机?

  •  2
     
  •   voidmnwzp ·
    NullpointerW · 2022-05-04 00:10:03 +08:00 · 11689 次点击
    这是一个创建于 695 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前一年 Java 开发经验,初中的时候入坑了 pascal 、python ,后来一直主学 c ,之前也一直瞧不上 Java ,认为是烂大街语言,会的人太多,什么杂七杂八的培训班机构都在教,但迫于就业压力,大四关在宿舍自学了一学期 Java ,从实习到现在都在做 Java 开发,但感觉还是变扭,看 Java 始终不太顺眼,不是我的“本命”语言,但如今再转嵌入式或者 c++也不现实,去年年底一些契机接触了 go (入坑的主要原因也是听说 ken Thompson 参与了 go 的设计)用起来感觉很对胃口,陆续读完了 go 圣经,平常摸鱼的时候也会看看 github 上的开源项目,平时会用 go 写写小工具来写协助开发(文本文件批处理、并发 http 请求之类的),主要现在 java 越来越卷,实在是不想背那些八股文
    60 条回复    2022-05-23 10:14:30 +08:00
    biubiuF
        1
    biubiuF  
       2022-05-04 00:14:16 +08:00
    golang 一样八股文
    ufan0
        2
    ufan0  
       2022-05-04 00:15:53 +08:00
    经历差不多,写了三年 C 后转 Java 找工作的~

    转不转还是取决于你的个人发展意向,与语言无关,比如你想去字节之类的,那么 Go 的岗位多,你会用,而且顺手,那就转。

    面试半年来的经验看,现在稍微牛逼点的公司,Go 面试也是造火箭(挺卷的),并且如果有 Java 经验,面试会对比提问的~ Java 能回答道多深,Go 就会对比问到多深。
    echo1937
        3
    echo1937  
       2022-05-04 00:20:50 +08:00 via iPhone   ❤️ 1
    一样八股文,我开始写程序的时候,Java 会 ssm 就有工作,懂点 Spring 源码就直接 OK ,JS 更是会 jq 就收,现在你看看这两职位八股多不多。

    建议你面向领域编程,而不是面向语言。
    interim
        4
    interim  
       2022-05-04 00:22:24 +08:00
    我觉得首先要考虑的是你会不会一直在一线城市呆着,golang 岗位二三线太少了。
    八股文其实都差不多。
    Jooooooooo
        5
    Jooooooooo  
       2022-05-04 00:31:53 +08:00
    难道学 go 的人就不用学 tcp 了吗?
    Suddoo
        6
    Suddoo  
       2022-05-04 00:46:45 +08:00
    转 Go 就不要背八股文了?遇到傻逼面试官,还是还是会问变态八股文啊,这个锅甩给 Java 不太合适吧?

    烂大街,什么人都会? 你确定不是 Java 开发效率高,各种框架工具都非常成熟,bug 少,坑少,开发成本低,老板容易招人,产品上线速度快?毕竟开公司不是搞慈善,也不是拿经费搞科研,手下一帮人要吃饭的。按照这个逻辑,越小众的语言越好喽?你应该转 VB, delphi, matlab 之类的语言,没几个公司用......
    wsseo
        7
    wsseo  
       2022-05-04 01:02:49 +08:00   ❤️ 5
    建议转 RUST ,入门难,不会卷
    drackzy
        8
    drackzy  
       2022-05-04 02:06:05 +08:00
    已经做 Java 的不建议再转 Go 了,路走窄了。
    Golang GC 夺命连环 11 问,各种八股面经早就全网都是了。
    Go 也早就卷了,职位少很多,二线以下基本没有 Go 。
    lessMonologue
        9
    lessMonologue  
       2022-05-04 02:30:21 +08:00
    不建议,Go 做基础服务有优势但是做业务比不上 Java ,主要是没有 spring 等一系列框架这么完善的生态。
    楼上有人说需求少,其实想想很简单,原来已有的业务不需要 Go 写,小公司也不需要 Go 去做基础服务。
    iClass
        10
    iClass  
       2022-05-04 02:33:49 +08:00 via Android
    本来有 Java & Go 两条道 为什么只走一条 楼主是科学家思维吧
    SG4YK
        11
    SG4YK  
       2022-05-04 04:41:59 +08:00 via iPhone
    个人认为 Go 的八股文还是比 Java 容易很多的,语言本身比较精简。Java 八股文要背的内容实在是太多了。
    Gota
        12
    Gota  
       2022-05-04 04:52:49 +08:00
    OP 的经历和我很像,我也是初中 Pascal 学起,大学开始学 Java ,工作先在南京搞了 3 年 Java (Android + Server) 之后跳槽去上海又搞了一年 Java ,之后顺利说服老板转 Go ,现在除了一些非常老的服务都换成 Go 了。

    我的感觉是 Go 的代码理解起来心智负担要低一些,特别是看第三方代码的时候能节约不少时间。工具的升级成本相对于 Java 也要低一些。

    对于 OP 的问题,我觉得如果年纪还轻就放心去试,等年纪大了就承担不起这个试错成本了。能找到匹配自己思维模式的编程语言,工作起来确实会轻松不少。
    powerman
        13
    powerman  
       2022-05-04 07:21:07 +08:00   ❤️ 2
    @SG4YK 八股文这种东西跟语言没关系,关键看就业市场卷不卷,本来大家都是 CRUD ,你会 SQL 语法就行了,那点破数据量 根本不好意思谈索引优化 分库分表,但是只要有人开始卷了,就代表你要被迫加入这场八股文战争,这是用人市场决定的,不是你个人能决定的
    pursuer
        14
    pursuer  
       2022-05-04 09:16:03 +08:00
    我建议尽快转,不然以后用了 c# kotlin typescript 再写 go 就写不下去了(玩笑

    不过不开玩笑的说,也是建议选择自己喜欢的东西,有兴趣才有学习动力,实际搬过砖能更好体会各个语言优缺点吧(我感觉 Java 是发展比较慢的,Go 除了 goroutine 也没有什么亮点。社区还把编译速度作为一项指标,我是怀疑未来会不会在语言特性上摆烂的。)
    bthulu
        15
    bthulu  
       2022-05-04 09:28:15 +08:00   ❤️ 1
    @pursuer go 的语言特性就是不需要语言特性, 所以不用担心摆烂的, 因为没烂可摆
    roseduan
        16
    roseduan  
       2022-05-04 09:35:31 +08:00
    毕业一年多从 Java 转 Go ,从小厂跳到了大厂
    hello2090
        17
    hello2090  
       2022-05-04 09:37:02 +08:00 via iPhone
    @wsseo 那面试的时候岂不是和一帮牛人竞争,既然会 RUST 的都是高手
    pursuer
        18
    pursuer  
       2022-05-04 09:48:46 +08:00
    @bthulu 嵌入式,驱动这类非常需要生成代码非常可控的地方,还是需要低糖的语言的,不过这类场景应该都是用 C ,
    Go 现在的应用场景直接开摆不太合适吧...
    scp3041
        19
    scp3041  
       2022-05-04 09:52:38 +08:00
    go 是真简单啊,用起来心智负担很低,再学其他语言都有点不适应了,最近看 rust ,复杂得一匹
    xuanbg
        20
    xuanbg  
       2022-05-04 10:07:35 +08:00
    写代码就不存在什么转语言的事,用什么语言不是写?爱用什么写就用什么写,用什么语言好赚钱就用什么语言写。
    cocoabeans
        21
    cocoabeans  
       2022-05-04 10:13:22 +08:00
    永远面向工资编程,找一门工作日语言,找一门或几门周末语言即可。
    haah
        22
    haah  
       2022-05-04 10:19:06 +08:00
    现在是不是买房的好时机呢?
    zhgg0
        23
    zhgg0  
       2022-05-04 10:32:45 +08:00
    如果只是为了兴趣可以转。
    默认你是后台方向。如果说因为 java 越来越卷不想背八股文,那这个完全没必要,跟 go 没啥区别。java 方向也可以找 go 方向的岗位,大厂的 go 岗位一般不介意候选人本身的语言方向。并且这两者八股文的重合度挺高的,除了语言基础外,都是 mysql 、redis 、mq 、rpc 等那一套。我本人是 java 方向的,一句 go 都没写过,java 和 go 岗位都面过不少,两个方向的面试官问的东西都差不多。
    CaliInn
        24
    CaliInn  
       2022-05-04 12:10:21 +08:00
    @wsseo rust 就业机会多吗?
    ikas
        25
    ikas  
       2022-05-04 12:14:51 +08:00
    go 世界难道现在不是正在造 jvm 世界中的各种轮子?
    SorcererXW
        26
    SorcererXW  
       2022-05-04 12:24:00 +08:00   ❤️ 1
    Go 八股文翻来覆去也就那么几个方面,Goroutine 调度、GC 啥的,总结出来的八股文也不是非常成体系,面试官可能也不会很懂。不像 Java 光深入理解 JVM 这一本书就够面试官考的了。
    coolmenu
        27
    coolmenu  
       2022-05-04 13:18:18 +08:00
    想不卷就学点偏门的,比如 lisp 及其实现,Lisp in Small Pieces 。
    Cola98
        28
    Cola98  
       2022-05-04 13:22:42 +08:00
    感觉 op 对 Java 的怨念很深啊,我最开始的时候也不喜欢 Java ,后来上手后感觉还蛮爽的,首先"认为是烂大街语言,会的人太多,什么杂七杂八的培训班机构都在教",这不是表示入门门槛低吗?但是没有说上限也低啊,op 自己也说了迫于就业压力,自学了一学期 Java ,从描述里面看,只是自己用起来觉得很恶心。再说到八股,golang 的八股也只是现在相对 Java 比较少,也就是 GC ,并发,里面数据结构实现等等。那其他数据库 /操作系统 /网络等等不一样有?还不是一样要背?
    tramm
        29
    tramm  
       2022-05-04 14:45:13 +08:00   ❤️ 1
    我一开始也是看不上 Java.
    上学时看汇编,C++.
    emmm,然后工作不好找.
    后来学 Android, 然后进了现在公司转 Java. 感觉, 真香.
    不过最近感觉一些小服务增多了, 总体内存占用越来越高了. 开始学 Go, 把成本降降.
    zek
        30
    zek  
       2022-05-04 14:47:42 +08:00
    java 是最好找工作的,搞清楚你是为了什么去学一门语言
    janus77
        31
    janus77  
       2022-05-04 15:06:23 +08:00
    你才一年经验,谈语言的优点和缺点感觉有点资格不够,(当然我也不是说我资格就够了)先做三年再说吧。。。。转 go 也不是完全的抛弃 java 啊,同时学,反正技多不压身,看你工作经验短 应该是年轻吧,还有很多精力可以用来学习的
    yiqiao
        32
    yiqiao  
       2022-05-04 15:17:14 +08:00
    @wsseo rust 是要有 cpp 的底吧,这和劝退没差别吧,哈哈哈
    2NUT
        33
    2NUT  
       2022-05-04 15:22:32 +08:00
    已经开始了就继续

    再国内,业务场景来说,go 不比 java 差
    fliter
        34
    fliter  
       2022-05-04 15:30:17 +08:00
    我正考虑从 Go 转 Java 呢..
    vincent7245
        35
    vincent7245  
       2022-05-04 15:38:45 +08:00   ❤️ 2
    语言只是工具,关键还得看你自己的技术功底。就好比你如果是个小说家,你写小说用 word 用 md 还是用笔和纸都不重要,重要的是你的作品
    irisdev
        36
    irisdev  
       2022-05-04 15:48:52 +08:00   ❤️ 1
    @tramm 我觉得我做的最睿智的一件事,就是大一大二看不起 web 开发觉得烂大街,整天学网安、汇编,之后又学人工智能,浪费了两年时间
    zorui
        37
    zorui  
       2022-05-04 16:58:27 +08:00
    go 拿来些写业务代码 crud , 感觉还不如 Java ,spring 全家桶 写业务代码爽的一批,go 的异常返回劝退多次。。国内接一些第三发 sdk 的话基本也没有。。
    lanlanye
        38
    lanlanye  
       2022-05-04 17:59:20 +08:00
    我从来没用 Java 写过项目,但最近甚至想去研究一下 Spring 的源码……Java 好东西多着呢。
    当然,烂大街也是真的……
    Juszoe
        39
    Juszoe  
       2022-05-04 20:16:40 +08:00
    @irisdev #35 没事,你再读个研读个博,相当于赢在起跑线(doge
    zoharSoul
        40
    zoharSoul  
       2022-05-04 22:12:13 +08:00
    算是不错的时机
    wangritian
        41
    wangritian  
       2022-05-05 00:15:33 +08:00
    主流语言写 web 没什么本质区别,当然 java 和 php 的生态更好一些,5 年经验以内的,我建议不要跳语言,好好把底层、网络、web 框架掌握了,最好熟悉一下 docker 和 k8s
    Joker123456789
        42
    Joker123456789  
       2022-05-05 09:43:38 +08:00
    转语言的意义是什么? 你要么转行 换战场,要么 就想办法往上面爬, 换个语言不还一样是程序员? 有什么改变吗?
    Joker123456789
        43
    Joker123456789  
       2022-05-05 09:46:20 +08:00
    @yiqiao 那 CPP 要有什么底? 汇编吗? 汇编要有什么底? 机器码? 机器码要有什么底? 要学什么语言就直接学,要什么底啊?
    cco
        44
    cco  
       2022-05-05 09:59:48 +08:00
    现在是个语言就八股文来一套。转不转看你的应用场景。不过,Java 在找工作领域还是稳稳的龙头老大,同样都要背八股文,转不转都一样,还不都得科举考试?
    Smilencer
        45
    Smilencer  
       2022-05-05 10:33:32 +08:00
    为啥不能双修?
    Mexion
        46
    Mexion  
       2022-05-05 10:48:27 +08:00
    看想要做什么,就写业务来说目前 go 是一门很烂的语言
    Sixyuan
        47
    Sixyuan  
       2022-05-05 10:51:54 +08:00
    八股文不是语言的问题,是面试的问题。
    twistedmeadows
        48
    twistedmeadows  
       2022-05-05 10:58:33 +08:00
    我感觉 OP 是喜欢 go 这门语言的,喜欢很重要,从事自己喜欢的工作能带来更多价值,楼上很多建议没有考虑到这方面。

    我建议 go 可以业余继续玩着,能多学点就多学点。工作上有机会就说服 leader 接受你用 go 写某些小组件。
    要正式转向 go ,我觉得必须要有开发过规模大一点的 go 项目的经验。从我面试过的 go 应聘者来看,如果只是业余写玩具小项目,太容易被问穿了。

    另外在跳槽的时候可以有倾向性一点。即使不能找到合适的 go 的岗,也要考虑新公司的技术架构,例如他们又有 go 又有 java ,那你就很容易在团队内说,这个我想用 go 写……但如果这个团队里根本没有 go 的岗,你提出建议的时候领导就会考虑(那我们以后是不是还得额外招 go 工程师来维护这些代码?我们有没有这个资源去招 go ?)
    像我在团队内是第一个开始用 go 写的,原因就是,我们产品使用微服务架构,中间都是 gRPC 调用,不关心某个服务的具体语言。所以我很容易跟 leader 讲,某个组件适合用 go 重写,给我一个月我把它写得更好。

    所以我觉得你要是真的喜欢 go ,要考虑的是如何找到一个路径去向它靠拢。不需要像壮士断腕一样切断自己之前的经验和经历,重点还是你怎么提升自己 go 的能力,和怎们把它应用到工作中。
    ihciah
        49
    ihciah  
       2022-05-05 11:09:40 +08:00
    java 的行为太隐式了,好多运行时行为,实习的时候学了一个暑假感觉写吐了,还是 go/rust 舒服一些
    oluoluo
        50
    oluoluo  
       2022-05-05 11:38:20 +08:00
    两个都要
    lasuar
        51
    lasuar  
       2022-05-05 11:38:26 +08:00
    月经贴
    mmdsun
        52
    mmdsun  
       2022-05-05 14:10:49 +08:00
    不会。因为 go 都是 C/C++转的,你一个 java 转 go 干嘛 ?遇到 C++项目会么 ?
    datafeng
        53
    datafeng  
       2022-05-05 14:35:56 +08:00
    写业务的话不要转过来。。
    新项目正考虑转回 Java 或者.NET 呢。
    xieren58
        54
    xieren58  
       2022-05-05 15:04:14 +08:00
    java 吃饭, 闲时玩 rust, 不好吗?
    windyboy
        55
    windyboy  
       2022-05-05 17:43:49 +08:00
    现在是不是面试都恨不得你能写一门语言出来,实际工作就是做下数据可的 crud
    seanthecat
        56
    seanthecat  
       2022-05-06 10:15:37 +08:00
    刚从 java 转 go 两个月,没有错误 stacktrace ,出了线上异常,日志里面信息少的可怜简直想掀桌子。依赖管理也是简单粗暴,上游的库都不带版本号,通通用最新的版本。go 为了用起来简单但是要管理好反而复杂了。
    voidmnwzp
        57
    voidmnwzp  
    OP
       2022-05-06 19:32:52 +08:00 via iPhone
    @twistedmeadows 规模大一点的项目具体指多大呢 如果面试时我的 go 项目都是一些 github 上的项目,那问题大不大?
    twistedmeadows
        58
    twistedmeadows  
       2022-05-06 23:53:17 +08:00 via iPhone
    @voidmnwzp 倒也没有一定之规,不会有人给你讲「代码行数>多少」、「依赖多到 xxxx 」就算规模大的项目了。
    项目经历全是 github 也可以啊,重要的是你有深度参与有价值的项目,要形成一些自己的实践和理解。

    举例来说,我面试会问 goroutine 开多了怎么确保不会出现竞争条件?
    很多应聘者就说「既然在写多线程并发的程序,我当然会在数据使用上非常小心,避免写出这样的程序」
    这就很废话,属于张口就来,不像是写过复杂项目的。
    我个人认为更好的回答是:go 工具链中自带了竞争检测器,我只需要在 go run 或 go test 时加参数 -race ,编译器会插桩代码,所有代码在访问内存时,会记录访问时间和方法。同时运行时库会观察对共享变量的未同步访问。当这种竞争行为被检测到,就会输出一个警告信息。只要我的测试覆盖足够充分,就能在开发阶段消除掉竞争条件。

    另一个例子,没用 go 写过守护进程的人是不会思考这种问题的:
    https://v2ex.com/t/851071
    但守护进程是多么常见的一种需求——对一个需要稳定在后台运行的程序,你多少都会接触到这样的思考。
    有过这种思考的我就认为是写过复杂项目的。否则就只能说是会语法而已。
    drackzy
        59
    drackzy  
       2022-05-12 03:32:44 +08:00
    Go 自身八股可能比 Java 少一些,其他中间件、数据库、mq 、微服务其他的八股都一样的。
    不建议做 Java 再转 Go , 路走窄了,职位数量少很多。二线城市一下基本没有 Go 职位。
    blankmiss
        60
    blankmiss  
       2022-05-23 10:14:30 +08:00
    @roseduan 怎么去转的 重新学一门语言 + 上手实践 + 项目经历需要很多时间吧🤣
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3393 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 10:41 · PVG 18:41 · LAX 03:41 · JFK 06:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.