顯示廣告
隱藏 ✕
※ 本文為 layzer 轉寄自 ptt.cc 更新時間: 2014-04-17 07:23:43
看板 Gossiping
作者 cgi0911 (勝者的迷思)
標題 Re: [問卦] JAVA跟Python那個好
時間 Thu Apr 17 04:06:14 2014


※ 引述《herbertyang (herbert)》之銘言:
: 現在大家都說Python 很好
: 但是Java現在也很紅
: 所以到底要學那一個比較好
: 業界比較常用的是哪一種
: 問深入點好了
: 免得有人說八卦已死
: Java是物件導向式語言
: Python是直譯式語言
: 所以兩者是不同的
: 不過java也可以處理python能做的事情
: 所以單學java就可以了吧

我本身不是CS出身,所知甚淺,
不過在這裡謹對我自己認知的Python與編譯器語言做點解釋

就我自己在美國這邊看到的程式開發者職缺來講
絕大多數的時候,他們都會要求「一種直譯式語言,和一種編譯式語言」
或是換種方式說,是「一種腳本語言,和一種物件導向語言」
當然最常見的組合是Perl/Python + JAVA/C++

對我來說,Python和C++ 的關係,
有點像是Python作為後者的「膠水語言」存在。
何謂膠水語言呢?你可以想像,開發過程是個小孩子拿樂高堆城堡的過程,
程式的核心區塊,就像樂高的基本部件,用來用去就是那幾種,一開始就決定好了;
但是你會搭出個怎樣的城堡,端看你怎麼把這些東西「兜」起來用,
這卻是隨著開發需要隨時在改變的

只用靜態編譯式語言來做「搭城堡」的工作,
那開發者就會陷入編譯→需求改變→重新再編譯的無限地獄當中
當然你可以透過部份編譯的方式去縮短這個流程,
但是這個無限地獄還是令人非常地沮喪

而只用直譯腳本語言(或更華麗地說,是『高階動態語言』)來開發的話,
因為這些腳本語言本來就是為了應付一些千變萬化的需求,
例如說,必須應付資料型態隨著程式執行而改變的情形
所以在底層實作上一定得讓步,運算速度與記憶體需求肯定不如編譯式語言來得好
而且其中的落差可能不小。但如果人云亦云地說「Python就是比JAVA/C++慢」,
這顯然也不盡真實。關鍵還是在於,你的底層是用什麼東西。
例如說我常用的Numpy ,它的矩陣、陣列運算都是tune得很好的,
跑起來並不比一些成熟的工具像Matlab要來得慢。

幸者,像Python這樣的語言,它的底層是用ANSI-C實現的,
而且也有很方便可以把JAVA、C/C++ 融合進Python,
或者是編譯成Python程式庫的應用,例如Jython、Cython,或是SWIG等

所以,最如虎添翼的作法就是,你需要的底層功能用編譯式語言實作,
這樣你對運算時間與記憶體需求,會有著更緊密的掌握,

而上層的「雜事」,像一些高端的資料結構(List、Dictionary、Array、Tuple …等)
就交給Python去管理。

這裡就會有一個「二八原則」,就是你八成的開發時間,
可能是花在實作那個底層,但當你的底層定下來了以後,
上層的工作只會花掉你兩成的時間

而且開發需求改變的時候,你也可以很快地應付過來。

所以我其實不太認同Python和JAVA「二選一」的學習模式,
對我來說,這兩種東西其實互為表裡,關鍵在於怎麼相輔相成、運用自如而已。

--
                       ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄              
                           DEUTSCHLAND                 ★◢
                                by cgi0911                      
                         The Order of Black and White         ◢█
                           The Glory of Three Stars           ◢█
                       ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄     ◢█

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 69.200.245.125
※ 文章網址: http://www.ptt.cc/bbs/Gossiping/M.1397678781.A.1FB.html
obov:恩恩   我覺得你說得很對  嗯嗯嗯  i see   i see1F 04/17 04:14
bitcch:這篇說得好2F 04/17 04:14
elido:恩登今天推文都怪怪的~都沒加油幫補3F 04/17 04:17
tonyselina:恩燈是在考秋琴齁? 死魔法師4F 04/17 04:18
cleanwind:這篇寫得好,不過最後一段我認為對於初學者仍應先專心學5F 04/17 04:23
x2006:應該要 Ruby, .Net C# ....等語言 來個大比較 XD6F 04/17 04:24
cleanwind:一種語言,之後再多方發展。7F 04/17 04:24
cgi0911:我的經驗是無論如何要有一種物件導向語言。而且其實Python8F 04/17 04:29
cgi0911:要學到「可以派上用場」的程度,其實不難,幾個月就夠。
giorno78:受教了10F 04/17 04:32
cleanwind:這也是我會先推 P 而非 J 的原因,好學好寫未必容易建立11F 04/17 04:34
cleanwind:觀念 :p
rick65134:囧 居然和matlab比速度... 張智星曾在課堂上說過matlab13F 04/17 04:54
rick65134:速度只有C\C++的10分之1到20分之1
cleanwind:看文章的意思,好像是 Numpy 比 Matlab 應該還好吧 @_@"15F 04/17 04:57
cleanwind:前者是以 Python 為底,後者是以 C/C++ 為底
tiefblau:matlab算慢 編譯式!=物件導向 不過這篇真的寫得相當好17F 04/17 07:04

--
※ 看板: layzer 文章推薦值: 1 目前人氣: 0 累積人氣: 15195 
※ 文章分類: 程式設計
分享網址: 複製 已複製
( ̄︶ ̄)b Leon 說讚!
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇