看板 Soft_Job 關於我們 聯絡資訊
討論程式語言的前景怎麼會變成比較程式語言的功能起來? 很多朋友都有一個誤區,那就是你的前景決定於你會什麼程式語言。 這並不完全是對的。 第一個誤區 --- > 你的前景決定於你用程式語言解決問題的能力 > 不是「你會不會某種程式語言」。 程式語言是工具,工具,工具。 重要的話說三次。 就跟你想在法國長住你就得學會法文,想在日本常住,那就得學會日文, 就算你想新加坡,菲律賓長住,雖然是他們官方語言是英文,但是也是有 當地的用法,你還是得學會。 你可以用中文,英文去當地旅行,但是當你在當地需要解決生活的問題的 時候,用更適合的語言,可以讓你取得更快,更好的優勢。 我很久以前就談過,作為程式開發人員,程式可以分成「體」「技」「用」 三層。 體是程式語言的各種概念,比如多執行緒,記憶體管理,設計模式, ,單元測試,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
senjor: 整理了很多職場經驗,用心推 12/27 00:30
icydream: 推 12/27 00:55
shps951015: 用心推! 12/27 01:00
hegemon: 這才是現實的工作狀況... 12/27 01:24
hegemon: 很多時候需要用到combo技才能發揮最大的戰力 12/27 01:25
hegemon: 某些語言就是有足夠多的套件支援,真的用到的時候不選這 12/27 01:26
hegemon: 種,反而硬拿其他語言去硬刻才真的傻了 12/27 01:26
darklose: 推這篇觀念 12/27 02:15
doomdied: 舉例錯誤,.net framework跟asp是不同的東西,當然不行 12/27 02:48
doomdied: jsp換個jdk版本可能就compile不起來了好嗎 12/27 02:53
wanlinlin: 推經驗分享 12/27 07:46
imreader: 推,我還是先去用 python 跟 node.js 好了 12/27 08:25
imreader: 懶人還是用可以偷懶的工具,比較實在,多點時間打電動 12/27 08:26
JohnRoyer: 推程式語言只是一種工具 12/27 11:35
senjor: 不同的程式語言之於CODER就如同不同的繪圖軟體之於繪師 12/27 12:04
senjor: 如果繪師之間戰什麼繪圖軟體才最好其實會感覺層次有點低。 12/27 12:05
Vendy: 所以我覺得大家避而遠之JAVA很奇怪,明明 spring boot 用 12/27 12:20
Vendy: 起來很方便阿~ 12/27 12:23
ripple0129: 繪圖師討論工具很正常吧,不知道為什麼要把討論講成是 12/27 12:27
ripple0129: 戰,就好比photo impact跟photoshop,討論哪款適用或 12/27 12:27
ripple0129: 開發某種用途的圖形的方便性。今天出來一款新的繪圖工 12/27 12:27
ripple0129: 具,能夠在某應用場景下比photoshop還好用,但並沒有 12/27 12:28
ripple0129: 說photoshop就廢掉。 12/27 12:28
senjor: 討論當然不錯,不過我說戰當然指的是拿來戰的那群人 XD 12/27 12:29
senjor: 例如說photoshop使用率下降了,用photoshop的塊陶喔~ 12/27 12:29
GlinX: 剛剛看才注意到這篇文章 推 寫得不錯 12/27 12:29
GlinX: 現在工作需求的趨勢都是多技能吃香了 前端後端不分 直接來 12/27 12:35
GlinX: 個全端 只是資訊人員很累就是 一直有新東西新概念 12/27 12:35
ripple0129: Springboot的方便是對比過去的Servlet與SpringMVC,再 12/27 12:36
ripple0129: 對比node或go會發現更方便 12/27 12:36
ripple0129: 不用暗喻是我了,我單純很理性分析個人觀感,畢竟語 12/27 12:40
ripple0129: 言要學習時間的投入,對資深人員是沒差往往都要碰多語 12/27 12:40
ripple0129: 言,但是對新手在選擇語言時會是很好的參考價值。而 12/27 12:40
ripple0129: 不提供有參考價值意見無意義的噓或捧個人覺得沒什麼 12/27 12:40
ripple0129: 幫助的。 12/27 12:40
Ommm5566: 看前幾篇的推文就知道誰在戰 因為XXX語言正在下降 12/27 12:46
Ommm5566: 所以大家不要用這種邏輯 12/27 12:46
Ommm5566: 或者是我不會OOO 所以不使用這個語言 12/27 12:46
Ommm5566: 因為自己不會只好貶低來提升自己不會的高尚 12/27 12:46
Ommm5566: 而不是說某語言在特殊問題有優勢這種討論方式 12/27 12:49
ripple0129: 我對號入座一下吧,我從來沒打過大家不要用這句話, 12/27 13:23
ripple0129: 不知道哪邊看到的。再來Java是我主力語言,只是對於 12/27 13:23
ripple0129: 學習成本以及開發速度的關係我老闆不愛用,所以只能 12/27 13:23
ripple0129: 捨棄Java。而Java的在台灣很大會選用的原因事實上有 12/27 13:23
ripple0129: 不少已經是因為人員取得方便以及各種解決方案也有許多 12/27 13:23
ripple0129: 的成功案例這方面的面向。我個人是對Java抱持悲觀但 12/27 13:23
ripple0129: 不代表我就捨棄了Java,事實上Java在現階段還是有不可 12/27 13:23
ripple0129: 取代性,太多的舊案包含我們公司也有,仍然還是要繼 12/27 13:23
ripple0129: 續使用Java。 12/27 13:23
hegemon: 我覺得台灣很多新創團隊犯的錯誤就是看到什麼潮就跟風用 12/27 13:48
hegemon: 什麼..卻沒看看開發環境,套件是否成熟... 12/27 13:48
vi000246: 哪個語言實用就學哪個 我也是覺得多多益善 12/27 13:54
vi000246: 像我就會分成工作用 寫小工具用 寫side project用 12/27 13:55
vi000246: side project又要看性質決定用哪個語言 12/27 13:55
kaitokid1214: 講超好的 小弟剛進公司寫一年多的 code 真心覺得T字 12/27 15:00
kaitokid1214: 型發展超重要 12/27 15:00
zenixls2: micro也可以用Akka吧,不用侷限在spring上 12/27 15:14
gmoz: 推 12/27 15:36
Sidney0503: 我不是說r大 而是某個人說不會thread所以不使用 12/27 15:54
Sidney0503: 我說不會用memory所以C很爛 還有人認同 12/27 15:55
Sidney0503: 戰java的理由是自己不會用 這種文章還真有"建設性" 12/27 15:56
Sidney0503: 搞得我都不知道哪些人是反串 12/27 16:14
druid0214: 整個系列看下來 不少分身www 12/27 16:25
Argos: 但我還是覺得讓JavaScript壯大是程式語言界最大的錯誤 12/27 17:18
Argos: 另一個錯誤是Flash 還好它快死了 哇哈哈哈哈哈哈 12/27 17:19
Argos: 沒有最好的只有最適合的 這句話大家都會講 但事實上真正的 12/27 17:20
Argos: 問題是在於「你怎麼知道這時候用這個是最適合的」? 12/27 17:20
Argos: 考量再多這也沒辦法量化 最後還是選用什麼技術還是取決你的 12/27 17:21
Argos: 感覺 尤其是當解決方案有好幾種都看起來很適合時 12/27 17:22
Argos: 就變成「我覺得XXX應該會比較好」 12/27 17:23
nelley: 推 12/27 18:32
y3k: 應該說 在你遇到問題時選擇你會的東西之中最適合的 12/27 18:51
ezaki: 推這篇,沒有高下之分,語言也是很難比較出來的東西 12/27 22:09
ezaki: 硬要比就只能比單一功能面的東西,聽到都有點無力感 12/27 22:09
onthesea: 好文推 12/27 23:04
alan3100: microserivce 有很多範本是akka 12/27 23:32
silverzeus: 優文給推~~ 12/29 11:22
v9290026: 推 12/29 23:36
atpx: 推薦! 12/30 01:37
vvind: 推 12/30 16:47
vencil: 推這篇 12/30 19:25
Naturetee: 推 12/31 21:24
allnun: 推! 01/01 10:09
Falldog: 推 優文 01/02 14:36
a42006310: 推 讚讚 01/14 23:49