大型項目Python或其它動態語言開發,維護起來會比較難嗎?
01-29
用python做過一些小項目,開發效率不錯,維護也方便,但是有一種說法是說用python開發大型項目,後期維護會比較難,體現在哪些方面?因為本人沒有太多的大型項目經驗,體會不是很深,不知道這種說法對不對?
其他人的回答已經很到位了.
大型項目(這裡指的是業務足夠複雜),需要對象能夠有足夠的描述能力,舉個很簡單的例子, 一個用戶對象UserModel,
用戶名是UserName 還是Name,密碼是psw還是UserPsw還是Password ?如果是在區分大小寫的地方,那可能性就更多了.數據模型簡單無所謂,但有的複雜業務,一張表一百多個欄位,寫什麼東西都去查資料庫文檔?
還有函數 介面 繼承之類的(這裡不是指語法,而是oop概念上的繼承)
當然,以上問題雖然存在,但不是決定因素,更大的原因是python太靈活,如果碼工hold不住,可以對項目造成很大的不良影響,而高端人才畢竟太少,如果全部用這種熟手開發大型項目,人力成本太高.javaC#為什麼工業上能這麼流行?很大一個原因就是它們"可以搭起一個不錯的框架,讓比較垃圾的程序員寫出不那麼垃圾的代碼".一熟帶三水,再加個不錯的pm, 做到成本和效率的最優.
大項目也挺多的啊,Openstack夠不夠大……關鍵還是要有適合Python的架構設計,你如果把Java那一套硬搬過來你肯定覺得不合適,廢話,你把C那一套硬搬到Java裡面也會覺得Java不合適。適合Python的模塊設計就是要松耦合、再松耦合,松到能拆成WebService最好。參數全是字元串或者JSON,還需要什麼類型檢查……
Python寫大項目很好用,組內用了幾年,沒啥不可解決的問題。只做後台,別的不知道啊。
多個系統,跑了幾年,維護和別的沒差異。
性能上,Pypy很成熟了,性能敏感模塊用C和C++,做成庫帶個Python Binding調用,完全不是問題。樓上有說表阿列阿,我們幾百個表不含分表,完全不是問題。類型更加不是問題,可完全忽略,任何語言,一行足夠癱瘓你一個系統,這點不會變。靜態檢查工具能發現不少問題。經驗當然也重要。
優點實在太多了,原型構建太方便了,易讀性特別好。你能想到的庫,基本都有Python binding。
不爽的地方也有,GIL很不方便,memory watermark也是問題,但不嚴重。打包分發不方便。python 2和3的差異也是個不爽的小問題。Gc也是。
我們C++,Java,Python都有,根據項目取捨吧。沒有靜態類型檢查是主要原因。能解決么?也能,好的模塊設計還有code review能迴避掉一些,不過這樣一來也就抵消掉一些Python能帶來的快速開發的優勢了。
我就說兩點:
- GvR最近對typed python非常感興趣,想用python3的annotation加入type checking。想一想為什麼。
- 你可能聽說過G家內部Python應用非常廣。但是G家沒有大型項目在用Python(收購來的公司不算,比如說YouTube),而且GvR在G家的時候做的大型Python項目,他人走了之後就被推倒重來了。
還是那句話,動態一時爽,重構火葬場。並不適合大項目,適合原型,前期項目。
使用python開發的大項目多了去了,多大算大?
推薦閱讀:
※Python的類定義有沒有建立新的作用域?
※對寫的python代碼進行加密有什麼好的實現方法?
※如何看待「Python星人」這個群體?
※Python基本語法學完了,接下來不知道要幹什麼?
※python在不用框架的情況下如何寫網站後台?