Re: [讨论] 2018 各语言就业工作前景

楼主: tofuflower (无)   2017-12-24 21:34:47
没想到下面推文意外战起 Java 了。
结论写在前面,我认为 Java 是一个泛用性很高的语言,各领域都有成熟的生态系支援。
一个新语言的兴起往往是因为他解决了旧语言在某些方面的不足,但不代表旧语言原来
擅长的情境可以很好的被新语言解决。
我想工程师若能比较理性的看待每个语言擅长的情境,能少走一些弯路。
下面是我自己对 Java 粗浅认识的讨论,若有错误的地方也欢迎大家讨论。
1. JAVA 一开 Eclipse 开发就占用大量 Client 资源
自从我换用 intellij 以后就感觉比较没那么吃资源了,推荐你试试,另外 Java9
力推的模组化或许可以让 Java 使用上比以往轻量一点,还需要观察。
2. node.js, python 都能在树莓派、MAC、WIN 跑了 优势在那 ?
如果是但纯和这两个语言比的话,优势在多执行绪的效能。
Python 在单一执行绪的效能的确是很优越,但只要主流 CPython 没有解决 GIL 的问题
,Python 永远不能很好发挥多 CPU 得效能。当然你可以用 multiprocessing,但用
process 资源就是比 thread 重。因此在 concurrency 的情境下,Python 相较 Java
是比较有劣势的。当然不是无解,只是花心力去研究 Python 底层做性能调校,和直接
用已经可很好支援多 CPU 的语言,就需要工程师自己评估了。题外话,JPython 似乎
没有 GIL 问题,但相对比较冷门就是了。
至于 Node,众所皆知 Node 在 Application level 是 single thread。尽管可以用
pm2 这样的工具起 cluster,但 process 的问题依旧存在。最简单的例子,当今天某个
Node 的 process loading 过重时,其他 Node 的 process 只能在旁边发呆。
Java 的 multi thread 相较这两者比较能发挥多 CPU 的系统效能。
3. 现在 node.js, python 社群还在主动发展中
社群主导这件事好坏很难讲,像 Node 每过几年都要分裂一次,还有去年三月的 npm 的
left pad 事件,总是让我在使用 Node 时感觉抖抖的 (囧....
4. 改个小 BUG ,等个两分钟编译完,发现不对,再改一下
经 sky790312 版友补充,可以用支援即时 check style 的 js IDE。
编译要两分钟我更倾向是专案的问题而不是 Java。
我假设你这边说的是相较 Python 和 Node 这种修改不需要编译,修改程式比较快。
的确,编译的确会花一些时间,但不编译真的会比较好吗?
我实际上看过一些 Python 和 Node 案例:很快改完小 bug,改完上传跑 CI 才发现语
法错误,不小心多个 ";" 或缩排错误之类的。这还是团队有做 CI,一些连基本 CI 都
没做的公司我还真不知道要怎么避免这问题,要知道只要是人就一定会犯错,很多时候
都是自以为改的只是小地方就忘了先在本地跑测试或 check style 之类的。
另外如果等待编译是你的痛点的话,建议可以试看看 Golang,编译超快。
5. 可台湾环境比较保守一些,大部分还停留在上个世纪。
板上还有阿里研究院征 Java 工程师的文章,我想阿里应该不是保守的公司。
6. 若追求效能,就该用 c++。
修正:经 Sirctal, chiaming0914, elements 指正,GC 这点是我错误论述。
下面用双引号匡起来的内容就是被指正有问题的部分,请不要尽信。
保留争议原文让后续读者知道这里原先的争论点是什么。
"但用 C++ 就要自己处理 GC 问题。而我认为自己刻的 GC 能比 JVM GC 优秀的工程师应
该是少数中的少数,因此把 GC 问题也列入考量再加上 JIT 技术的话, C++ 效能并不
一定总是能乐胜 Java,当然主要还是要看使用情境。"
额外补充一点忘了回
7. 至于原始码封装的优点,现在也可以用 docker 来处理了
用 docker 封装 runtime 环境时,通常选用较小的 image (例如 alpine), 但你不总
是会用这些环境开发。我之前在 alpine 安装某些 Python 连 my-sql 相关套件的时候
遇到不少问题(年代久远,已经忘记是那个替三方套件了),最后是解法是开发环境和
production 安装不一致的第三方套件,这件事让我在做 CI/CD 的时候蛮困扰的。
作者: imreader (imreader)   2017-12-24 21:42:00
补充你指出的 thread 问题,我若要做 multi-thread,我会倾向使用 Node JS 的 Async 写法,完全不用担心Thread-safe 的问题加上 ES2016 以后有 Async, Await 的终极方案另外 Node JS 也可以用 coffeescript 做 transpiler直接写 python like 的排版语法来写作你自已都知道 PM2 了,再配合 async 写法,多 CPU 也能轻松运用对我来讲,这就起多个 node 行程,做 multi-workers用 python 的 celery 来写 async,远远不及 node js的 async, await 直觉、易用python 跟 node js 刚好一个同步、一个异步互相搭配
作者: Sirctal (母猪母猪 夜里哭哭)   2017-12-24 22:14:00
C++不需要GC好吗?? C++11有smart pointer...
作者: x000032001 (版废了该走了)   2017-12-24 22:37:00
虽然不写Java 它在大数据和企业级应用的确占有一块一直鄙视而不正视它为何被使用 那是狂热信徒才做的事
作者: chiaming0914 (chiaming)   2017-12-24 22:43:00
对c++不熟就不要随便乱讲
作者: elements (Helianthus annuns)   2017-12-24 22:49:00
smart ptr 比起 GC 有更多眉角,c++ 也有 mark and sweep 就是了,只是要另外弄。
作者: backprog (back-propagation)   2017-12-24 22:52:00
这边够详细推
作者: remmurds (Stronghold)   2017-12-24 23:02:00
某楼怎摸会把async跟multi thread混为一谈...
作者: imreader (imreader)   2017-12-24 23:07:00
某楼不用指正教学,thread 跟 async 本质有差我知道但能不用 multi-thread 写的话,我会尽量不用
作者: nbajam (littleJ)   2017-12-24 23:09:00
认同给推
作者: imreader (imreader)   2017-12-24 23:13:00
对 async, multi-thread 区别有兴趣的话,可以看这篇https://goo.gl/FZ4ZFX但对我来讲 thread-safe ,写起来直觉,就很好用了
作者: CGS0 (Mike Chen)   2017-12-24 23:21:00
c++ 写的好 就保持习惯 做的比 Java 的 GC 还烂 应该是很快就不行了请讲自己写很久的部份就好 不用乱猜其他语言
作者: TeddyCaptain (~_~)   2017-12-24 23:28:00
imreader是在供三小,“我若要写multi-thread,会倾向使用node的async写法”,这句话逻辑在哪?? 被纠正还7pupu讲错被纠正像原po那样不是很好ㄇ,硬掰当没人懂node腻
作者: imreader (imreader)   2017-12-24 23:32:00
上面我给的文章先看完,最后有 async callback 的说明这里都要咬文嚼字,用字精准,也太累了我明确的说,multi-thread 大部份就是要做异步的作业像侦测 UI 按键时,还能读取档案I/O档案读取完,直接呼叫 callback function这种工作,若在 python 就要开 thread 来写但 node js 就直接 async callback 的写法好了,来玩电动了,剩下的我就不回了 XD
作者: TeddyCaptain (~_~)   2017-12-24 23:49:00
还在凹捏,node在处理io以外的工作没办法做到实质上的multithreading本来就是天生的痛点,这个原po已经讲的很清楚了,你还在那边用async解,看到豆页都痛ㄌ说
作者: s25g5d4 (function(){})()   2017-12-24 23:56:00
imreader 搞清楚 CPU-bound 跟 IO-bound 差别好吗
作者: kwpn (ITSST)   2017-12-24 23:57:00
C++根本就不需要GC 你根本不懂GC是啥吧?
作者: elements (Helianthus annuns)   2017-12-24 23:58:00
现在的 io 大多不用 block,而是用 epoll 交给作业系统去等,只要少少几条专有的执行绪跑事件循环就可以了。但多执行绪一个很重要的用途是利用多核心,这点如果你自己的code没办法泡在其他 thread 就没办法
作者: imreader (imreader)   2017-12-25 00:07:00
就算是 IO-bound 在 python,是不是要用 thread 来写
作者: TeddyCaptain (~_~)   2017-12-25 00:08:00
奇怪捏,原po有像imreader一样在那边硬凹ㄇ?第一个帮忙纠错的很好,大家有交流才有进步嘛,啊他不是
作者: imreader (imreader)   2017-12-25 00:08:00
光确认 thread-safe,就不是很直觉的事了
作者: elements (Helianthus annuns)   2017-12-25 00:09:00
老实说c++我一直不觉得你讲错什么,内存管理的确是一个很大的痛点,特别是你在专案大又多执行绪的时候,所有权的问题有时候很难厘清。但那就是你要把控制内存释放时机的权力拿回手上的代价。
作者: imreader (imreader)   2017-12-25 00:09:00
CPU bound 我前面不是有写过,就改用 multi-workers大家好像觉得写 thread 的程式,是很轻松容易的事一样我可不认为,能不写就不写
作者: laputaflutin (很恐怖,不要问)   2017-12-25 00:11:00
异步跟执行绪的问题本质完全不一样啊,更别说python也有 async 语法了……这根本不是什么咬文嚼字,而是理解有误
作者: TeddyCaptain (~_~)   2017-12-25 00:26:00
我也是觉得写db操作好麻烦,应该都in-memory就好,能不写就不写
作者: ku399999   2017-12-25 00:29:00
XD
作者: sky790312 (sky790312)   2017-12-25 00:38:00
现在JS ide都能装coding style不会到CICD才发现;错误@@
作者: alan3100 (BOSS)   2017-12-25 00:57:00
我觉得你要认真回他是件很辛苦的事 不会有交集
作者: s25g5d4 (function(){})()   2017-12-25 01:09:00
讲几个补充好了,本公司用 TypeScript 开发,虽然是compile time check 而已,但已经比纯 JS 好太多了少个 ; 甚至 type 不对的问题都有解,只是很麻烦是真的有些人认为这样就丧失 JS 灵活的特性了,但我觉得还好,
作者: TitanEric (泰坦)   2017-12-25 01:16:00
推这篇 学到好多
作者: chatnoir (对不起)   2017-12-25 01:29:00
这篇..其实不错!
作者: bcew (bcew)   2017-12-25 01:38:00
python也有pylint可以coding时发现语法问题喔
作者: steve1012 (steve)   2017-12-25 01:54:00
我感觉修正完还是有点问题啊 建议你把 c++ gc整段移掉吧 并不是那样
作者: Shauter ( )   2017-12-25 01:55:00
Java好棒喔 就交给各位写了
作者: obamina48   2017-12-25 02:06:00
imreader 真的懂 JS 吗…
作者: sorryla (Mr.东)   2017-12-25 03:53:00
C++引入smart pointer后,内存管理早就没那么难了。物件所有权很难厘清,丢给GC就万事解决了吗?你怎么知道GC会不会真的帮你解决?物件关系没处理好GC一样帮不了你。自己不搞懂只想让GC擦屁股并不是好的作法。
作者: kwpn (ITSST)   2017-12-25 08:25:00
只学半套的才会说C++内存很难管理
作者: johnny94 (32767)   2017-12-25 08:57:00
这篇很好啊,讲错点出来就好了,一堆人往死里呛是怎样?
作者: Sirctal (母猪母猪 夜里哭哭)   2017-12-25 09:01:00
推楼上 我也觉得大家太嗜血了 有错点一下就好只是讨论而已有必要这样?? 自古以来文人总是相轻...
作者: steve1012 (steve)   2017-12-25 09:06:00
还好啦 我觉得错的拿掉就好 就不会继续回啦
作者: alan3100 (BOSS)   2017-12-25 09:10:00
这篇不是特别回应某个躲在推文讲大话的人吗? 战火没交集
作者: testPtt (测试)   2017-12-25 09:27:00
C++因为没批次释放的需要 所以不需要GC
作者: Sidney0503 (Sidney0503)   2017-12-25 09:58:00
C++从头到尾就是错的 你改了几次都是错的
作者: Ommm5566 (56天團)   2017-12-25 10:12:00
哈哈哈 做不到就说尽量不用 然后继续鼓吹该语言无敌"不怕神一般的敌人 就怕猪一般的队友"这句话真是经典语法问题都有lint提示了 coding sytle不是问题python明明就有各种level的multi-thread可以由使用者选择要不要fork
作者: loxyz (loxyz)   2017-12-25 10:26:00
愿意分享看法推
作者: imreader (imreader)   2017-12-25 10:27:00
我想起来了,之前不用 python thread 的原因是因为 thread 里用到的 module 也必须是 thread safe然后就找到 gevent 这种 coroutine 的东西用起来浑身不自在。然后 node js 开始用了以后发觉不用理会 thread-safe ,还能做 non-blocking 的异步作业。若是要用多 CPU,也能用 PM2 的 cluster
作者: Sidney0503 (Sidney0503)   2017-12-25 10:30:00
因为我不会malloc和free 所以我都使用不须delete的语
作者: imreader (imreader)   2017-12-25 10:30:00
若 thread 用到的 module 也要 thread-safe 这样就
作者: imreader (imreader)   2017-12-25 10:31:00
尤其是第三方的,很多都没有 thread safe基本上我本身是 python, node js 混用的
作者: Sidney0503 (Sidney0503)   2017-12-25 10:32:00
c语言看TIOBE可以看到正在下降
作者: imreader (imreader)   2017-12-25 10:32:00
node js 我也是开 coffeescript 写 python 的类似语法XD
作者: fishlinghu (令狐瑜)   2017-12-25 10:33:00
怎么有人不会用怪语言烂啊XDDDD
作者: Sidney0503 (Sidney0503)   2017-12-25 10:33:00
没有mem-safty的语言用起来浑身不自在
作者: Sidney0503 (Sidney0503)   2017-12-25 10:34:00
对我而言要memory safty超不直觉
作者: imreader (imreader)   2017-12-25 10:38:00
https://goo.gl/FLD2Xa 感谢网友提到 epoll 的关键字
作者: rayway30419 (RayWay)   2017-12-25 10:38:00
自己注意thread safe不是很合理吗wwwww
作者: imreader (imreader)   2017-12-25 10:39:00
目前 node.js 会依 OS 自行选用 epoll、poll、dev/pollselect 和kqueue@rayway30419,主要是引用的第三方别人写的 module也要 thread-safe
作者: Sidney0503 (Sidney0503)   2017-12-25 10:44:00
我推荐大家使用rust 这才有guaranteed memory safety大家好像觉得写pointer的程式,是很轻松容易的事一样我可不认为,能不写就不写但对我来讲memory safe ,写起来直觉,就很好用了
作者: imreader (imreader)   2017-12-25 10:47:00
楼上在开我玩笑,但我认同这点。因为在 python, node js不需 pointer ,就能做 pointer 能做到的事动态资料结构都能用 python, node js 来制作
作者: pttuser (pttuser)   2017-12-25 12:07:00
C++ 效能并不一定总是能乐胜 Java ?呵呵一堆干话
作者: vvind (wind)   2017-12-25 12:44:00
作者: sssh9300662 (烦恼)   2017-12-25 12:55:00
推分享,有错也没关系,怎一堆人一定要抓错酸一下,有讨论才有进步阿Async跟multi thread完完全全两回事,可以的话我也不想碰multi thread阿XD
作者: zenixls2 (zenix)   2017-12-25 12:59:00
这篇内文到推文我到底看了啥...
作者: alan3100 (BOSS)   2017-12-25 13:44:00
帮补个java8+ multi-thread简介 https://goo.gl/qucbaq推文乱七八糟真的很无言
作者: dragoncfe168 (梅长苏)   2017-12-25 13:49:00
C#现在已可跨平台了 蛮想专精C#就好 贪多嚼不烂@@人生又不是很长 何不专注把C#学精熟?!俗话说:螣蛇无足而飞,梧鼠五技而穷!╮(﹀_﹀")╭
作者: wildli0422 (wild)   2017-12-25 15:38:00
好文给推 谢谢分享
作者: Bencrie   2017-12-25 18:07:00
呛人才能突显自己念名校的尊爵不凡 XD
作者: gmoz ( This can't do that. )   2017-12-25 18:11:00
作者: yupog2003 (屁股)   2017-12-25 22:30:00
推原po理性讨论
作者: Darkautism (达卡特森)   2017-12-26 00:53:00
真的假的 我都写c欸 没想到free被大家嫌
作者: jpopaholic (日音スキ)   2017-12-26 01:06:00
只要jvm不死的话java就不会死,Hadoop,spark,jsp,甚至偷改的android,都是base on java
作者: clairehuei (不是clairehuei 是桂)   2017-12-26 11:59:00
瑕不掩瑜,不懂某些人是在崩溃啥...
作者: DolphinLinn (怕水海豚)   2017-12-26 15:01:00
我想说的是node本身就有Cluster模组 不需要使用pm2也可以...
作者: aszx4510 (wind)   2017-12-26 15:01:00
整理的很棒 感谢资讯分享
作者: Shauter ( )   2017-12-27 10:48:00
base on java 好个阿Q想法 XDDDDDDD
作者: realmeat (真肉)   2017-12-29 09:49:00
不用IDE开发就好了, 何时IDE也成了原罪, 超级有趣

Links booklink

Contact Us: admin [ a t ] ucptt.com