作者uranusjr (←這人是超級笨蛋)
看板Soft_Job
標題Re: [請益] 是在py啥?
時間Mon Sep 30 11:35:26 2013
身為一位 Python/Django programmer[1], 以下純就語言與框架特性說明
※ 引述《rosemary0401 (rosemary)》之銘言:
: 以前在寫windows desktop application時,大多跟著MS的腳步在走,
: 一開始用C\C++ 和 MFC framework,
: MS推.NET之後,就改用C# 和 WPF framework。
: 這時會用的語言很少,不過就C\C++\C# (有OO的觀念,C#不難學)
: 後來換工作改做Web application,要學的語言突然暴增,
: HTML、CSS、JavaScript、PHP、ASP.NET、C\C++、C#、SQL...
: 開始思考為什麼會要用這麼多語言,
因為 web app 天性如此
就算是 native application 現在也可能要用到至少三種語言
Backend logic 一種 (例如 C#), UI layout 一種 (例如微軟弄的 XAML)
然後資料庫儲存再一種 (通常就 SQL, 或者 LINQ 其實和其他的 C# 也很不一樣)
一方面就和前面有人講過的, 用到很多語言本來就是正常的
只是你之前一來被微軟 solution 保護, 一來沒用到, 所以忽略了
被微軟 solution 保護當然不是不好
不過其實這也是技術債的一種, 欠了總是要還的, 只是時候未到
像 C_Sharp 板就充斥著一堆其實不是 C# 而是 CSS 或 JavaScript 的問題
很顯然就是因為發問人不清楚自己問題本質造成的現象
對於簡單的事情, 當然你搞不清楚技術背後的本質其實也可以過去
但是當你要做更進階的事情時就要開始還債
甚至如果你遇到抽象滲漏造成的雷[2], 需要 solution 沒有涵蓋到的解法時
你前面累積的背景知識貧乏就會讓你無法前進, 幾乎等於要砍掉重練
當然不是每個人都會走到這一步
一輩子當碼農的話其實光靠 solution 通常也夠了
而且即使你用 solution 也完全可以自我充實, 避免欠下技術債
說到頭還是個人的問題, 不在於語言/框架本身
不過 (個人認為) 自由社群的解法通常會讓人容易意識到這些技術債的存在
: 以目前工作所需來說,
: 後端用ASP.NET\C#\C++\SQL,
: 用.NET framework來寫web application很方便,
: 比較需要效能的task用C++來寫成module,給C#來呼叫,
: (C++因為直接編譯成native code所以比較快)
: 需要access資料庫就用SQL (寫預儲程序或直些寫在code裡)
: 但我一直不太懂的是,聽說有些人後端是有用python在寫的,
: 不懂用python寫的好處在哪?
雖然你這篇的標題是為何用 Python
不過內文事實上比較像是「為什麼要用 (效能較差的) 直譯式語言」
但是這邊的論點事實上就完全自我解釋了為什麼很多人愛用 Python (或 Ruby 等)
事實上 Python 也完全支援用 C 撰寫 modules, 也有第三方套件支援 C++ binding
Ruby 我不熟, 不過比較低階的 Python 套件很多其實都是 C-based
最著名的例子就是 PIL (Python Imaging Library) 與 lxml (第三方 XML 處理器)
既有的 C library 也可以藉由 wrapper 很輕易地與 native Python 結合
例如 MySQL for Python 就是 wrapper (_mysql) 與 adapter (MySQLdb) 組成
而且 Python C API 本身也受益於 Python 的語言特性
這使得 Python modules 非常容易撰寫
這點我相信其他陣營的狀況也差不多
所以 Python 有 PIP, Ruby 有 Gems, Perl 有 CPAN
.NET 嘛...我實在沒有很了解, 不過 NuGet 的套件庫規模感覺就是弱一截
或許是要付錢才能有別人做好的工具能用吧
: C#和python比起來沒有比較難學,python寫出來的效能又比不上C++。
: 如果後端不是用MS的ASP.NET,而是用PHP的話,
: PHP + Python真的有比PHP + C\C++還要好用嗎?
沒有人 PHP + Python 的 (好吧可能有, 不過那應該是因為有很特殊的原因)
PHP 陣營會用 PHP framework, Python 會用 Python framework, Ruby 會用 (以下略)
重點是你這比較根本就不合邏輯
如果你用 C# 然後有人要你用 Python 寫 lib 串起來用
那通常也是對方腦包亂搞, 因為這樣的好處實在很小
如果你要在 web backend 用 Python (或 PHP 或 Ruby)
基本上要取代的會是 C#, 不是 C/C++
: 不知道有人評估過,用python寫後端的好處在哪裡?
別人也會問你用 C# 寫後端的好處在哪裡
它們其實是在同一個天平上的, 而 C/C++ 不是
: 值得一提的是,之前有人說寫testing需要會script language比較好,所以可以學
: python,
: 但是script language那麼多,為啥要挑python?理由是甚麼呢?
因為會的人比較多
真的啊, Python 牌子老信用好
如果沒有其他因素, 應該不會有人覺得初學者應該學 Perl 而非 Python
至於 Ruby 終究還是比較新, 當然是值得學的好語言, 不過 Python 牌子老也是事實
這兩個之間的選擇真的就是意識形態的問題了, 不討論 (不然要戰了XD)
: 之前聽說有某軟體公司的windows desktop application的UI是用python寫,原因不明
: 幾年前都不太聽過python,現在寫python的人好像有變多的趨勢,為什麼呢?
我覺得有兩個因素
一方面以前 Python 社群真的比較低調
其實使用者一直都有, 只是近年辦了 PyCON TW 之後對其他人的知名度才打開
至於是不是因為 Ruby 與 Rails 崛起而感受到危機意識這我就不知道了XD
另一方面是微軟對台灣的統治在近年有逐漸消退的趨勢
以前講 GUI programming 就是 Win32, MFC 到後期 .NET 不解釋
Web application 就是 ASP 然後 ASP.NET 最多用 JSP 就是很潮了
一直到近年微軟一天到晚自爆其他平台才開始就趁虛而入的空間
不然其實自由社群的解決方案在歐美一直都很蓬勃發展, 只是你不知道而已
[1] 我會其他的語言, 現在正職主要也不是用 Python
雖然不寫 ASP.NET 不過 C# 也略懂
但是就 web application 而言我是 Python programmer
[2]
http://en.wikipedia.org/wiki/Leaky_abstraction
--
"問おう、貴方が私のマスターか?"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.94.57
※ 編輯: uranusjr 來自: 140.112.94.57 (09/30 11:53)
推 CRPKT:leaky abstraction 引得好, 但恐怕任何 framework 都如此啊 09/30 12:23
推 ck574b027:總算有人點出原文只是想來戰語言而已XD 09/30 12:26
推 qrtt1:我倒覺得最初的提問者只是沒有深思,隨口問問的感覺。 09/30 13:05
→ qrtt1:不過以這工作的經驗來說,俺無法否認多數的情況下直譯式 09/30 13:08
→ qrtt1:跑得不如事先編譯好的。但現在各 scripting language 已有 09/30 13:08
→ qrtt1:vm 的機制,它是有機會跑得比編譯式快的。 09/30 13:09
→ qrtt1:遺憾的是上述的差異不是最終效能影響的因素,而是人們怎麼 09/30 13:09
→ qrtt1:生產出程式或軟體。中間有多少抄捷徑亂寫的技術債? 09/30 13:10
→ qrtt1:這些債務才是拖跨最終效能的因素。 09/30 13:10
推 MacPerson:請教..請問VM的機制 指的是? 09/30 14:12
→ legnaleurc:是指 VM 上的 JIT 吧 09/30 14:24
推 bobju:推! 09/30 17:27
推 hSATAC:用 Go 啦! 09/30 22:52
推 lTERRAl:樓上害我想到ruby china 也一堆人在戰要不要學 Go 10/01 03:38
→ bobju:學不學見仁見智 學生時代能學盡量學 一般有工作以後 時間就 10/01 14:30
→ bobju:綁在工作上了 要學新語言就會有時間報酬的考量 接受度就沒那 10/01 14:32
→ bobju:麼高 10/01 14:32
→ gozule:純python需要效能可以用pypy來執行,很有感覺 10/03 02:00
推 pesrty:我的經歷也差不多 WIN32->MFC->BCB->WPF .... 10/23 17:04
→ pesrty:講白了就是哪個語言用的人多 , 就往哪跑, 因為...... 10/23 17:05
→ pesrty:要找資源也比較快, 摳來摳去 10/23 17:08
→ pesrty:老闆觀念就是寫軟體啥都會, 但是人哪來那麼多時間全都會 10/23 17:10
→ pesrty:只有看有沒有現成的來摳 10/23 17:11