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