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

2022-05-04 00:10:03 +08:00
 voidmnwzp
目前一年 Java 开发经验,初中的时候入坑了 pascal 、python ,后来一直主学 c ,之前也一直瞧不上 Java ,认为是烂大街语言,会的人太多,什么杂七杂八的培训班机构都在教,但迫于就业压力,大四关在宿舍自学了一学期 Java ,从实习到现在都在做 Java 开发,但感觉还是变扭,看 Java 始终不太顺眼,不是我的“本命”语言,但如今再转嵌入式或者 c++也不现实,去年年底一些契机接触了 go (入坑的主要原因也是听说 ken Thompson 参与了 go 的设计)用起来感觉很对胃口,陆续读完了 go 圣经,平常摸鱼的时候也会看看 github 上的开源项目,平时会用 go 写写小工具来写协助开发(文本文件批处理、并发 http 请求之类的),主要现在 java 越来越卷,实在是不想背那些八股文
11802 次点击
所在节点    Go 编程语言
60 条回复
wangritian
2022-05-05 00:15:33 +08:00
主流语言写 web 没什么本质区别,当然 java 和 php 的生态更好一些,5 年经验以内的,我建议不要跳语言,好好把底层、网络、web 框架掌握了,最好熟悉一下 docker 和 k8s
Joker123456789
2022-05-05 09:43:38 +08:00
转语言的意义是什么? 你要么转行 换战场,要么 就想办法往上面爬, 换个语言不还一样是程序员? 有什么改变吗?
Joker123456789
2022-05-05 09:46:20 +08:00
@yiqiao 那 CPP 要有什么底? 汇编吗? 汇编要有什么底? 机器码? 机器码要有什么底? 要学什么语言就直接学,要什么底啊?
cco
2022-05-05 09:59:48 +08:00
现在是个语言就八股文来一套。转不转看你的应用场景。不过,Java 在找工作领域还是稳稳的龙头老大,同样都要背八股文,转不转都一样,还不都得科举考试?
Smilencer
2022-05-05 10:33:32 +08:00
为啥不能双修?
Mexion
2022-05-05 10:48:27 +08:00
看想要做什么,就写业务来说目前 go 是一门很烂的语言
Sixyuan
2022-05-05 10:51:54 +08:00
八股文不是语言的问题,是面试的问题。
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
2022-05-05 11:09:40 +08:00
java 的行为太隐式了,好多运行时行为,实习的时候学了一个暑假感觉写吐了,还是 go/rust 舒服一些
oluoluo
2022-05-05 11:38:20 +08:00
两个都要
lasuar
2022-05-05 11:38:26 +08:00
月经贴
mmdsun
2022-05-05 14:10:49 +08:00
不会。因为 go 都是 C/C++转的,你一个 java 转 go 干嘛 ?遇到 C++项目会么 ?
datafeng
2022-05-05 14:35:56 +08:00
写业务的话不要转过来。。
新项目正考虑转回 Java 或者.NET 呢。
xieren58
2022-05-05 15:04:14 +08:00
java 吃饭, 闲时玩 rust, 不好吗?
windyboy
2022-05-05 17:43:49 +08:00
现在是不是面试都恨不得你能写一门语言出来,实际工作就是做下数据可的 crud
seanthecat
2022-05-06 10:15:37 +08:00
刚从 java 转 go 两个月,没有错误 stacktrace ,出了线上异常,日志里面信息少的可怜简直想掀桌子。依赖管理也是简单粗暴,上游的库都不带版本号,通通用最新的版本。go 为了用起来简单但是要管理好反而复杂了。
voidmnwzp
2022-05-06 19:32:52 +08:00
@twistedmeadows 规模大一点的项目具体指多大呢 如果面试时我的 go 项目都是一些 github 上的项目,那问题大不大?
twistedmeadows
2022-05-06 23:53:17 +08:00
@voidmnwzp 倒也没有一定之规,不会有人给你讲「代码行数>多少」、「依赖多到 xxxx 」就算规模大的项目了。
项目经历全是 github 也可以啊,重要的是你有深度参与有价值的项目,要形成一些自己的实践和理解。

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

另一个例子,没用 go 写过守护进程的人是不会思考这种问题的:
https://v2ex.com/t/851071
但守护进程是多么常见的一种需求——对一个需要稳定在后台运行的程序,你多少都会接触到这样的思考。
有过这种思考的我就认为是写过复杂项目的。否则就只能说是会语法而已。
drackzy
2022-05-12 03:32:44 +08:00
Go 自身八股可能比 Java 少一些,其他中间件、数据库、mq 、微服务其他的八股都一样的。
不建议做 Java 再转 Go , 路走窄了,职位数量少很多。二线城市一下基本没有 Go 职位。
blankmiss
2022-05-23 10:14:30 +08:00
@roseduan 怎么去转的 重新学一门语言 + 上手实践 + 项目经历需要很多时间吧🤣

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/850704

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX