Re: [討論] 2018 各語言就業工作前景
討論程式語言的前景怎麼會變成比較程式語言的功能起來?
很多朋友都有一個誤區,那就是你的前景決定於你會什麼程式語言。
這並不完全是對的。
第一個誤區
---
> 你的前景決定於你用程式語言解決問題的能力
> 不是「你會不會某種程式語言」。
程式語言是工具,工具,工具。
重要的話說三次。
就跟你想在法國長住你就得學會法文,想在日本常住,那就得學會日文,
就算你想新加坡,菲律賓長住,雖然是他們官方語言是英文,但是也是有
當地的用法,你還是得學會。
你可以用中文,英文去當地旅行,但是當你在當地需要解決生活的問題的
時候,用更適合的語言,可以讓你取得更快,更好的優勢。
我很久以前就談過,作為程式開發人員,程式可以分成「體」「技」「用」
三層。
體是程式語言的各種概念,比如多執行緒,記憶體管理,設計模式,
,單元測試,Mocking,TCP/IP,Protocol,類神經網路概念,決策樹理論,
動態規劃,隨機森林....這些橫跨程式語言的觀念。
技是程式語言,以及程式語言的生態系。
用是你能用程式語言解決的各種問題,比如,撰寫跨平台遊戲,寫App,預測
明天股市漲跌,比對病毒模式。
體,有的學校會教。技,網路上都能自學,花錢上課也都可以。「用」才是難
關。
用才是價值,寫程式不能為組織賺錢,你寫的程式解決了組織的問題,解決了
客戶的問題,才是你的價值。
第二個誤區
---
缺乏對程式語言多面向的了解
很多人對於程式語言缺乏多個面向的了解,只從技術的觀點看程式語言本身
,卻沒有想過,程式語言的存在包括多個面向,所以才會有這麼多程式語言存在。
舉例來說,前面有人說Java程式每次都馬要重新編譯1, 2分鐘才能執行,我是建議
他去Google一下Hotswapagent跟JRebel是什麼東西。
當你想要去貶低一個不是你熟悉,或是不是你主要的程式語言的時候,往往只會看到
一個程式語言某方面了劣勢,而忽略的在某方面的優勢。
你覺得中文用起來很簡單,很熟悉,但是從西方人的角度看,中文是這個地球上最難
學習的語言,他沒有曲折,沒有時態變化,還有可怕的量詞。但是你不會有這個感受。
程式語言也是一樣的。
延續第一個誤區,你要解決問題,不得不受到Triple Constraint的限制:Schedule,
Cost, Quality。
「Java程式語言的效率不可能與C比較」這個命題基本上是胡扯。
對某些人而言,C儘管在好的架構下,可以達到比較好的記憶體管理,但同樣的
也更容易產生memory leak,你只考慮了你自己,卻沒有考慮到,在組織當中,
跟你一樣有水準的工程師不一定那麼多,Java執行效率較慢,但他更安全。
也許你的Performance不是第一考量,也許你需要有更好的企業架構。
Java不是單打獨鬥,Java有整個JVM的生態系在支援它,而且是非常成熟的生態系。
Spring Framework幾乎集成了所有企業級的功能,打到官方EJB自爆,其他語言許多
概念,都是衍伸自Java,例如xUnit,logging,DI。
Mybatis, Hibernate都是出道超過10幾年的框架,到現在還是可以運作得很好,有
成千上萬的成功企業使用Java。
也有人說Java不適合微服務吧,那他也可以去Google一下Spring Boot。
Java也有很好的向下相容性,10幾年前的Code,你用現在的JDK9去編譯,大多數狀況下
它都能很好的運作,所以對於開發出來以後會用上10來年的系統,Java會是一個比較
容易的選擇。
你能用.Net Framework去編譯VB6的程式嗎?或是ASP?Python 2 migrate 到Python 3
,從2008年推出到現在快10年了,他還在Migration。
我並不是說Java很好,而是往往很多人想說,「天啊,你們公司還在用Java,真老」
,或是Java缺乏某某功能,比如GC還不能自動控制之類的,那都是用自己偏狹的一方
觀點去看一個程式語言,而沒有考慮它使用的場合,限制,要解決的問題,也忽略了
整個生態系的完整程度。
我們公司還在用COBOL咧,前端還不是可以吐json接AngularJS跟Vue?
第三個誤區
---
只能會一個程式語言
我不是獨尊Java,Java也能做深度學習,有ND4J,Deeplearning4J,甚至直接跟
Spark或Hadoop結合,但Python深度學習這方面起步早,有Tensorflow還有Scikit-learn
這些機器學習套件,他在這方面的生態系比較成熟一些,資料也比較多,我要
搞深度學習,首選還是Python,事實上我們公司主要用Java,COBOL,但Python也有拿
來做機器學習一些data使用。
但不代表你用了Tensorflow,你就一定要用Django做資料視覺化的展示,或是寫ERP程式
,你一樣可以利用Java跟Spring打造你的企業應用,用Node.js的socket.io做即時資料
交換,用Meteor寫App,如果要拿去賣,賣像要更好就再用Swift跟Andorid打造App,
只有內部使用可以考慮Xamrin。公司跟微軟合作良好就去用.Net Framework,同時要
管理server side deploy跟docker image management就再用shellscript跟Ansible。
沒有人可以限制你,只有你要自己限制自己,你會得東西越多,你越能在Triple
Constraint中找到完美的平衡,選擇最適合的解決方案跟生態系。
武術分為很多流派,拳擊,桑博,詠春,散打,空手道,但在不同規則下,不同的武術
有不同的優勢,沒有最強的武術,只有最適合的功夫,最後站在擂台上的,才是勝利者。
另外一個重點是「體」,夠有錢,甄子丹也打不過馬師傅。
當然你要專精一個程式語言是可以的,但是活用,可以為你取得更多的機會。
最後
---
你要解決什麼問題,決定了你要使用什麼樣的工具,但只要你體質夠強壯,任何工具
都能為你所用。
我們從2015年起用Spring打造了一個同仁不知道那是Spring的Spring框架(因為
已經變成convention over configuration了,我們還借鏡了一些其他語言才有的觀念)
,還有一個專門的部署平台,提供多達80個人共同開發,目前支援超過1400個
Controller, 1000個service以及超過120個Restful Service的ERP以及各類周邊系統。
當然我們也有開始試著用一些R, Python, 跟Node,做一些非ERP有關的東西。
Logging/monitor system也從無到有建立了Graylog/Elastic Search叢集,用Sonarqube
做static scan,現在整個Gradle已經快變成天書,但是所有開發同仁可以完全
沒有Spring, 沒有Gradle的知識。
我們還在把三四十年來的COBOL程式改成Java,我們希望程式語言還可以再戰20年,
而且不要變化太快,但也不要跟C一樣缺乏開發效率,Java看來是比較合理的選擇。
人力盤點的結果,再加上對於各種成本考量,Java可能是最好的選擇,儘管我們
還是沒買JRebel導致SQLMap改了之後還是要rebuild,hotswapagent有點兩光。
但這不就是推動Unit test以及mocking的一項不錯的動機嗎?
不同產業,不同環境,要解決的問題不同,你的老闆是誰,決定了你該會什麼
,要用什麼。
決定你的目標,再看你的體質,選擇最適合的工具。我想這才是大家選擇程式語言
前景的目的吧,不要再比較誰好誰壞了,請先把你的命題想好,要解決的問題說清楚
,才有討論的價值。
不然跟麥格魯戈跟五月天打拳擊沒有兩樣。
--
所有我的作品,請到.....
~四十八個德瑞克~http://blog.derekhsu.net
馬皇本紀:http://blog.derekhsu.net/2009/08/821
上官先生傳:http://blog.derekhsu.net/2009/08/825
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.105.222.185
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1514303283.A.E26.html
※ 編輯: derekhsu (112.105.222.185), 12/26/2017 23:49:48
※ 編輯: derekhsu (112.105.222.185), 12/26/2017 23:55:58
推
12/27 00:30,
6年前
, 1F
12/27 00:30, 1F
推
12/27 00:55,
6年前
, 2F
12/27 00:55, 2F
推
12/27 01:00,
6年前
, 3F
12/27 01:00, 3F
推
12/27 01:24,
6年前
, 4F
12/27 01:24, 4F
→
12/27 01:25,
6年前
, 5F
12/27 01:25, 5F
→
12/27 01:26,
6年前
, 6F
12/27 01:26, 6F
→
12/27 01:26,
6年前
, 7F
12/27 01:26, 7F
推
12/27 02:15,
6年前
, 8F
12/27 02:15, 8F
→
12/27 02:48,
6年前
, 9F
12/27 02:48, 9F
→
12/27 02:53,
6年前
, 10F
12/27 02:53, 10F
推
12/27 07:46,
6年前
, 11F
12/27 07:46, 11F
推
12/27 08:25,
6年前
, 12F
12/27 08:25, 12F
→
12/27 08:26,
6年前
, 13F
12/27 08:26, 13F
推
12/27 11:35,
6年前
, 14F
12/27 11:35, 14F
推
12/27 12:04,
6年前
, 15F
12/27 12:04, 15F
→
12/27 12:05,
6年前
, 16F
12/27 12:05, 16F
推
12/27 12:20,
6年前
, 17F
12/27 12:20, 17F
推
12/27 12:23,
6年前
, 18F
12/27 12:23, 18F
推
12/27 12:27,
6年前
, 19F
12/27 12:27, 19F
→
12/27 12:27,
6年前
, 20F
12/27 12:27, 20F
→
12/27 12:27,
6年前
, 21F
12/27 12:27, 21F
→
12/27 12:28,
6年前
, 22F
12/27 12:28, 22F
→
12/27 12:28,
6年前
, 23F
12/27 12:28, 23F
推
12/27 12:29,
6年前
, 24F
12/27 12:29, 24F
→
12/27 12:29,
6年前
, 25F
12/27 12:29, 25F
推
12/27 12:29,
6年前
, 26F
12/27 12:29, 26F
→
12/27 12:35,
6年前
, 27F
12/27 12:35, 27F
→
12/27 12:35,
6年前
, 28F
12/27 12:35, 28F
推
12/27 12:36,
6年前
, 29F
12/27 12:36, 29F
→
12/27 12:36,
6年前
, 30F
12/27 12:36, 30F
推
12/27 12:40,
6年前
, 31F
12/27 12:40, 31F
→
12/27 12:40,
6年前
, 32F
12/27 12:40, 32F
→
12/27 12:40,
6年前
, 33F
12/27 12:40, 33F
→
12/27 12:40,
6年前
, 34F
12/27 12:40, 34F
→
12/27 12:40,
6年前
, 35F
12/27 12:40, 35F
推
12/27 12:46,
6年前
, 36F
12/27 12:46, 36F
→
12/27 12:46,
6年前
, 37F
12/27 12:46, 37F
→
12/27 12:46,
6年前
, 38F
12/27 12:46, 38F
→
12/27 12:46,
6年前
, 39F
12/27 12:46, 39F
推
12/27 12:49,
6年前
, 40F
12/27 12:49, 40F
推
12/27 13:23,
6年前
, 41F
12/27 13:23, 41F
→
12/27 13:23,
6年前
, 42F
12/27 13:23, 42F
→
12/27 13:23,
6年前
, 43F
12/27 13:23, 43F
→
12/27 13:23,
6年前
, 44F
12/27 13:23, 44F
→
12/27 13:23,
6年前
, 45F
12/27 13:23, 45F
→
12/27 13:23,
6年前
, 46F
12/27 13:23, 46F
→
12/27 13:23,
6年前
, 47F
12/27 13:23, 47F
→
12/27 13:23,
6年前
, 48F
12/27 13:23, 48F
→
12/27 13:23,
6年前
, 49F
12/27 13:23, 49F
推
12/27 13:48,
6年前
, 50F
12/27 13:48, 50F
→
12/27 13:48,
6年前
, 51F
12/27 13:48, 51F
推
12/27 13:54,
6年前
, 52F
12/27 13:54, 52F
→
12/27 13:55,
6年前
, 53F
12/27 13:55, 53F
→
12/27 13:55,
6年前
, 54F
12/27 13:55, 54F
推
12/27 15:00,
6年前
, 55F
12/27 15:00, 55F
→
12/27 15:00,
6年前
, 56F
12/27 15:00, 56F
→
12/27 15:14,
6年前
, 57F
12/27 15:14, 57F
推
12/27 15:36,
6年前
, 58F
12/27 15:36, 58F
推
12/27 15:54,
6年前
, 59F
12/27 15:54, 59F
→
12/27 15:55,
6年前
, 60F
12/27 15:55, 60F
→
12/27 15:56,
6年前
, 61F
12/27 15:56, 61F
推
12/27 16:14,
6年前
, 62F
12/27 16:14, 62F
推
12/27 16:25,
6年前
, 63F
12/27 16:25, 63F
→
12/27 17:18,
6年前
, 64F
12/27 17:18, 64F
→
12/27 17:19,
6年前
, 65F
12/27 17:19, 65F
→
12/27 17:20,
6年前
, 66F
12/27 17:20, 66F
→
12/27 17:20,
6年前
, 67F
12/27 17:20, 67F
→
12/27 17:21,
6年前
, 68F
12/27 17:21, 68F
→
12/27 17:22,
6年前
, 69F
12/27 17:22, 69F
→
12/27 17:23,
6年前
, 70F
12/27 17:23, 70F
→
12/27 18:32,
6年前
, 71F
12/27 18:32, 71F
→
12/27 18:51,
6年前
, 72F
12/27 18:51, 72F
→
12/27 22:09,
6年前
, 73F
12/27 22:09, 73F
→
12/27 22:09,
6年前
, 74F
12/27 22:09, 74F
推
12/27 23:04,
6年前
, 75F
12/27 23:04, 75F
→
12/27 23:32,
6年前
, 76F
12/27 23:32, 76F
推
12/29 11:22,
6年前
, 77F
12/29 11:22, 77F
推
12/29 23:36,
6年前
, 78F
12/29 23:36, 78F
推
12/30 01:37,
6年前
, 79F
12/30 01:37, 79F
推
12/30 16:47,
6年前
, 80F
12/30 16:47, 80F
推
12/30 19:25,
6年前
, 81F
12/30 19:25, 81F
推
12/31 21:24,
6年前
, 82F
12/31 21:24, 82F
推
01/01 10:09,
7年前
, 83F
01/01 10:09, 83F
推
01/02 14:36,
7年前
, 84F
01/02 14:36, 84F
推
01/14 23:49,
7年前
, 85F
01/14 23:49, 85F
討論串 (同標題文章)
完整討論串 (本文為第 6 之 6 篇):