Re: [討論] 2018 各語言就業工作前景

看板Soft_Job作者 (無)時間6年前 (2017/12/24 21:34), 6年前編輯推噓46(526111)
留言169則, 45人參與, 6年前最新討論串3/6 (看更多)
沒想到下面推文意外戰起 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 的時候蠻困擾的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.77.40.73 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1514122489.A.85C.html

12/24 21:42, 6年前 , 1F
補充你指出的 thread 問題,我若要做 multi-thread,
12/24 21:42, 1F

12/24 21:43, 6年前 , 2F
我會傾向使用 Node JS 的 Async 寫法,完全不用擔心
12/24 21:43, 2F

12/24 21:44, 6年前 , 3F
Thread-safe 的問題
12/24 21:44, 3F

12/24 21:44, 6年前 , 4F
加上 ES2016 以後有 Async, Await 的終極方案
12/24 21:44, 4F
可能我表達不夠清楚讓你誤會我意思了 我的意思是 Node 目前本質上是在 application level 的 single thread, 這讓他在同時運用多個 CPU 做事情會比 Java 還要有挑戰。 這意味著如果你想要榨乾多 CPU 系統效能的話, Node 會比 Java 需要花更多心力。 題外話,這件事 Golang 做的比兩者都好 (但還是有些小陷阱),算是整合兩邊所長。 ※ 編輯: tofuflower (42.77.40.73), 12/24/2017 21:52:42

12/24 21:52, 6年前 , 5F
另外 Node JS 也可以用 coffeescript 做 transpiler
12/24 21:52, 5F

12/24 21:53, 6年前 , 6F
直接寫 python like 的排版語法來寫作
12/24 21:53, 6F

12/24 21:54, 6年前 , 7F
你自已都知道 PM2 了,再配合 async 寫法,
12/24 21:54, 7F

12/24 21:54, 6年前 , 8F
多 CPU 也能輕鬆運用
12/24 21:54, 8F

12/24 21:56, 6年前 , 9F
對我來講,這就起多個 node 行程,做 multi-workers
12/24 21:56, 9F

12/24 22:08, 6年前 , 10F
用 python 的 celery 來寫 async,遠遠不及 node js
12/24 22:08, 10F

12/24 22:08, 6年前 , 11F
的 async, await 直覺、易用
12/24 22:08, 11F
我想我表達得不夠清楚,application level 的 thread 有幾種狀況不好處理: 1. 假設今天有一個計算類型的任務 (例如一個大陣列的 quick sort實作),Java 可以 比較輕鬆的運用多 CPU,拆多個子任務用 thread 就可以了。 Node 要運多 CPU 做這件事相對會麻煩很多。 2. 誠然,Node 用 cluster 跑多個 process 可以吃多個 CPU。 假設今天 Node 起了 cluster ,下面有四個 process 分別處理 request, 如果今天運氣不好,分配給第一個 process 的 requst 比較吃資源,其他則否, 那過一段時間後你會發現只剩第一個 process 在一個 CPU 上跑, 其他 process 對此無能為力。 3. process 和 process 間沒有共享記憶體,因此有當你決定要用 pm2 起 cluster 跑 web 時,就一定要用外部的 storage (ex. redis) 存 session。 當然這些情況是極端了點,我只是想說明用 Java (或 Golang,C#) 可以不用考慮這 些情況,而用 Node 你得依據你的使用情境考慮是否要y處理這些情況。 ※ 編輯: tofuflower (42.77.40.73), 12/24/2017 22:24:12

12/24 22:09, 6年前 , 12F
python 跟 node js 剛好一個同步、一個非同步互相搭配
12/24 22:09, 12F

12/24 22:14, 6年前 , 13F
C++不需要GC好嗎?? C++11有smart pointer...
12/24 22:14, 13F
※ 編輯: tofuflower (42.77.40.73), 12/24/2017 22:25:35

12/24 22:37, 6年前 , 14F
雖然不寫Java 它在大數據和企業級應用的確佔有一塊
12/24 22:37, 14F

12/24 22:38, 6年前 , 15F
一直鄙視而不正視它為何被使用 那是狂熱信徒才做的事
12/24 22:38, 15F

12/24 22:43, 6年前 , 16F
對c++不熟就不要隨便亂講
12/24 22:43, 16F
※ 編輯: tofuflower (42.77.40.73), 12/24/2017 22:45:57 對不起,這點的確是我說錯,已修正原文。 ※ 編輯: tofuflower (42.77.40.73), 12/24/2017 22:50:16

12/24 22:49, 6年前 , 17F
smart ptr 比起 GC 有更多眉角,c++ 也有 mark and swe
12/24 22:49, 17F

12/24 22:49, 6年前 , 18F
ep 就是了,只是要另外弄。
12/24 22:49, 18F
※ 編輯: tofuflower (42.77.40.73), 12/24/2017 22:52:21

12/24 22:52, 6年前 , 19F
這邊夠詳細推
12/24 22:52, 19F

12/24 23:02, 6年前 , 20F
某樓怎摸會把async跟multi thread混為一談...
12/24 23:02, 20F

12/24 23:07, 6年前 , 21F
某樓不用指正教學,thread 跟 async 本質有差我知道
12/24 23:07, 21F

12/24 23:08, 6年前 , 22F
但能不用 multi-thread 寫的話,我會盡量不用
12/24 23:08, 22F

12/24 23:09, 6年前 , 23F
認同給推
12/24 23:09, 23F

12/24 23:13, 6年前 , 24F
對 async, multi-thread 區別有興趣的話,可以看這篇
12/24 23:13, 24F

12/24 23:13, 6年前 , 25F
12/24 23:13, 25F

12/24 23:13, 6年前 , 26F
但對我來講 thread-safe ,寫起來直覺,就很好用了
12/24 23:13, 26F

12/24 23:21, 6年前 , 27F
c++ 寫的好 就保持習慣 做的比 Java 的 GC 還爛 應該是很快
12/24 23:21, 27F

12/24 23:21, 6年前 , 28F
就不行了
12/24 23:21, 28F

12/24 23:22, 6年前 , 29F
請講自己寫很久的部份就好 不用亂猜其他語言
12/24 23:22, 29F
C++ 這點是我疏忽,請其他版友不要被我誤導

12/24 23:28, 6年前 , 30F
imreader是在供三小,“我若要寫multi-thread,會傾
12/24 23:28, 30F

12/24 23:28, 6年前 , 31F
向使用node的async寫法”,這句話邏輯在哪?? 被糾
12/24 23:28, 31F

12/24 23:28, 6年前 , 32F
正還7pupu
12/24 23:28, 32F
※ 編輯: tofuflower (42.77.40.73), 12/24/2017 23:32:24
還有 97 則推文
還有 8 段內文
12/25 10:44, 6年前 , 130F
我推薦大家使用rust 這才有guaranteed memory safety
12/25 10:44, 130F

12/25 10:46, 6年前 , 131F
大家好像覺得寫pointer的程式,是很輕鬆容易的事一樣
12/25 10:46, 131F

12/25 10:46, 6年前 , 132F
我可不認為,能不寫就不寫
12/25 10:46, 132F

12/25 10:47, 6年前 , 133F
但對我來講memory safe ,寫起來直覺,就很好用了
12/25 10:47, 133F

12/25 10:47, 6年前 , 134F
樓上在開我玩笑,但我認同這點。因為在 python, node js
12/25 10:47, 134F

12/25 10:47, 6年前 , 135F
不需 pointer ,就能做 pointer 能做到的事
12/25 10:47, 135F

12/25 10:48, 6年前 , 136F
動態資料結構都能用 python, node js 來製作
12/25 10:48, 136F

12/25 11:15, 6年前 , 137F
另外,我也來推廣一下 coffeescript
12/25 11:15, 137F

12/25 11:15, 6年前 , 138F
不知道有沒有 python 的愛好者,夢想有天也能在前端寫
12/25 11:15, 138F

12/25 11:16, 6年前 , 139F
python 的語法,coffeescript 就是解方
12/25 11:16, 139F

12/25 11:16, 6年前 , 140F
目前還能搭配 es2016 的 module 封裝,
12/25 11:16, 140F

12/25 11:17, 6年前 , 141F
還有 async, await 輕鬆解決 callback hell
12/25 11:17, 141F

12/25 11:19, 6年前 , 142F

12/25 11:19, 6年前 , 143F
class 跟 python 特有的縮排對齊都能用
12/25 11:19, 143F

12/25 11:36, 6年前 , 144F
coffee 不只能寫前端,還能用在 NODE JS
12/25 11:36, 144F

12/25 12:07, 6年前 , 145F
C++ 效能並不一定總是能樂勝 Java ?呵呵一堆幹話
12/25 12:07, 145F

12/25 12:44, 6年前 , 146F
12/25 12:44, 146F

12/25 12:55, 6年前 , 147F
推分享,有錯也沒關係,怎一堆人一定要抓錯酸一下,
12/25 12:55, 147F

12/25 12:55, 6年前 , 148F
有討論才有進步阿
12/25 12:55, 148F

12/25 12:56, 6年前 , 149F
Async跟multi thread完完全全兩回事,可以的話我也不
12/25 12:56, 149F

12/25 12:56, 6年前 , 150F
想碰multi thread阿XD
12/25 12:56, 150F

12/25 12:59, 6年前 , 151F
這篇內文到推文我到底看了啥...
12/25 12:59, 151F

12/25 13:44, 6年前 , 152F
幫補個java8+ multi-thread簡介 https://goo.gl/qucbaq
12/25 13:44, 152F

12/25 13:46, 6年前 , 153F
推文亂七八糟真的很無言
12/25 13:46, 153F

12/25 13:49, 6年前 , 154F
C#現在已可跨平台了 蠻想專精C#就好 貪多嚼不爛@@
12/25 13:49, 154F

12/25 13:50, 6年前 , 155F
人生又不是很長 何不專注把C#學精熟?!
12/25 13:50, 155F

12/25 13:53, 6年前 , 156F
俗話說:螣蛇無足而飛,梧鼠五技而窮!╮(﹀_﹀")╭
12/25 13:53, 156F

12/25 15:38, 6年前 , 157F
好文給推 謝謝分享
12/25 15:38, 157F

12/25 18:07, 6年前 , 158F
嗆人才能突顯自己念名校的尊爵不凡 XD
12/25 18:07, 158F

12/25 18:11, 6年前 , 159F
12/25 18:11, 159F

12/25 22:30, 6年前 , 160F
推原po理性討論
12/25 22:30, 160F

12/26 00:53, 6年前 , 161F
真的假的 我都寫c欸 沒想到free被大家嫌
12/26 00:53, 161F

12/26 01:06, 6年前 , 162F
只要jvm不死的話java就不會死,Hadoop,spark,jsp,甚
12/26 01:06, 162F

12/26 01:06, 6年前 , 163F
至偷改的android,都是base on java
12/26 01:06, 163F

12/26 11:59, 6年前 , 164F
瑕不掩瑜,不懂某些人是在崩潰啥...
12/26 11:59, 164F

12/26 15:01, 6年前 , 165F
我想說的是node本身就有Cluster模組 不需要使用pm2
12/26 15:01, 165F

12/26 15:01, 6年前 , 166F
也可以...
12/26 15:01, 166F

12/26 15:01, 6年前 , 167F
整理的很棒 感謝資訊分享
12/26 15:01, 167F

12/27 10:48, 6年前 , 168F
base on java 好個阿Q想法 XDDDDDDD
12/27 10:48, 168F

12/29 09:49, 6年前 , 169F
不用IDE開發就好了, 何時IDE也成了原罪, 超級有趣
12/29 09:49, 169F
文章代碼(AID): #1QFwpvXS (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1QFwpvXS (Soft_Job)