Re: [討論] 2018 各語言就業工作前景
沒想到下面推文意外戰起 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
12/24 21:42, 1F
→
12/24 21:43,
6年前
, 2F
12/24 21:43, 2F
→
12/24 21:44,
6年前
, 3F
12/24 21:44, 3F
→
12/24 21:44,
6年前
, 4F
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
12/24 21:52, 5F
→
12/24 21:53,
6年前
, 6F
12/24 21:53, 6F
→
12/24 21:54,
6年前
, 7F
12/24 21:54, 7F
→
12/24 21:54,
6年前
, 8F
12/24 21:54, 8F
→
12/24 21:56,
6年前
, 9F
12/24 21:56, 9F
推
12/24 22:08,
6年前
, 10F
12/24 22:08, 10F
→
12/24 22:08,
6年前
, 11F
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
12/24 22:09, 12F
推
12/24 22:14,
6年前
, 13F
12/24 22:14, 13F
※ 編輯: tofuflower (42.77.40.73), 12/24/2017 22:25:35
→
12/24 22:37,
6年前
, 14F
12/24 22:37, 14F
→
12/24 22:38,
6年前
, 15F
12/24 22:38, 15F
噓
12/24 22:43,
6年前
, 16F
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
12/24 22:49, 17F
→
12/24 22:49,
6年前
, 18F
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
12/24 23:02, 20F
推
12/24 23:07,
6年前
, 21F
12/24 23:07, 21F
→
12/24 23:08,
6年前
, 22F
12/24 23:08, 22F
推
12/24 23:09,
6年前
, 23F
12/24 23:09, 23F
推
12/24 23:13,
6年前
, 24F
12/24 23:13, 24F
→
12/24 23:13,
6年前
, 25F
12/24 23:13, 25F
→
12/24 23:13,
6年前
, 26F
12/24 23:13, 26F
推
12/24 23:21,
6年前
, 27F
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
12/24 23:28, 30F
→
12/24 23:28,
6年前
, 31F
12/24 23:28, 31F
→
12/24 23:28,
6年前
, 32F
12/24 23:28, 32F
※ 編輯: tofuflower (42.77.40.73), 12/24/2017 23:32:24
還有 97 則推文
還有 8 段內文
推
12/25 10:44,
6年前
, 130F
12/25 10:44, 130F
→
12/25 10:46,
6年前
, 131F
12/25 10:46, 131F
→
12/25 10:46,
6年前
, 132F
12/25 10:46, 132F
→
12/25 10:47,
6年前
, 133F
12/25 10:47, 133F
推
12/25 10:47,
6年前
, 134F
12/25 10:47, 134F
→
12/25 10:47,
6年前
, 135F
12/25 10:47, 135F
→
12/25 10:48,
6年前
, 136F
12/25 10:48, 136F
推
12/25 11:15,
6年前
, 137F
12/25 11:15, 137F
→
12/25 11:15,
6年前
, 138F
12/25 11:15, 138F
→
12/25 11:16,
6年前
, 139F
12/25 11:16, 139F
→
12/25 11:16,
6年前
, 140F
12/25 11:16, 140F
→
12/25 11:17,
6年前
, 141F
12/25 11:17, 141F
推
12/25 11:19,
6年前
, 142F
12/25 11:19, 142F
→
12/25 11:19,
6年前
, 143F
12/25 11:19, 143F
推
12/25 11:36,
6年前
, 144F
12/25 11:36, 144F
噓
12/25 12:07,
6年前
, 145F
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
12/25 12:56, 149F
→
12/25 12:56,
6年前
, 150F
12/25 12:56, 150F
→
12/25 12:59,
6年前
, 151F
12/25 12:59, 151F
→
12/25 13:44,
6年前
, 152F
12/25 13:44, 152F
→
12/25 13:46,
6年前
, 153F
12/25 13:46, 153F
推
12/25 13:49,
6年前
, 154F
12/25 13:49, 154F
→
12/25 13:50,
6年前
, 155F
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
12/25 18:07, 158F
推
12/25 18:11,
6年前
, 159F
12/25 18:11, 159F
推
12/25 22:30,
6年前
, 160F
12/25 22:30, 160F
推
12/26 00:53,
6年前
, 161F
12/26 00:53, 161F
噓
12/26 01:06,
6年前
, 162F
12/26 01:06, 162F
→
12/26 01:06,
6年前
, 163F
12/26 01:06, 163F
推
12/26 11:59,
6年前
, 164F
12/26 11:59, 164F
推
12/26 15:01,
6年前
, 165F
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
12/27 10:48, 168F
→
12/29 09:49,
6年前
, 169F
12/29 09:49, 169F
討論串 (同標題文章)