python不適合大型項目_在大型項目上,Python 是個爛語言嗎? |

【洪強寧的回答(89票)】:

太多硬傷和臆想,懶得批。只說“代碼超過 10w 以后你就別想用 python 開發了”這一句,2012年4月豆瓣主站項目代碼行數就近50萬行了,可我們還在用 python 開發。

【劉鑫的回答(42票)】:

我寫過幾年Python,也寫過幾年CPP,寫過幾年CS,Python做大項目沒什么問題,不會比其它主流語言更差,項目的可控規模多大,主要還是取決于人,不是語言——語言當然有差別,但是沒有宣傳的那么大。至于開發工具的問題,高水平的開發人員根本不會依賴開發工具。而且,Python本身不是那種非常依賴代碼補全等功能的技術,我習慣的組合是emacs+ipython+python-mode,用doctesting做TDD,效率很高。最近一段用sublime text比較多,也沒覺得離開習慣的環境就做不下去。

至于錯誤在運行時,這就看自動化測試的水平了。Python項目出現的bug不會比CPP或Java更高。

如果用不好,什么都是爛語言。這是個相當廉價的態度。

==========

看了一下鏈接里的文章,覺得挺可樂,那位老兄根本不知道Python比Java還要早一年發布吧……(準確的說,1994年是python發布了1.0版,而第一次publish代碼是在1991年的0.9.0版)

【猛禽的回答(3票)】:

雖然在TL組的另一個帖里回復過這位microcai,既然在這里看到就再說一下吧。

在那個帖里,他說道:

但是說實話,他這段恰恰就是“缺乏根據在那里胡扯”,而且是從開始提到python就扯——比如解釋器比編譯器(他還給說成了匯編)簡單,除了C++那種變態級別的編譯器,python的解釋器不比其它編譯器簡單多少。另外,python也需要編譯為pyc,除非說.net/java也是解釋語言,何況就算是編譯成目標代碼,也有cython這種間接方式,或是pypy這種動態方式。

當然我不會真的逐條反駁這么浪費時間的,上面這條就足夠說明他的問題了。

回到樓主的問題上:python是否不適合大型項目?

成功的例子參見 @洪強寧 等人的答案。

事實上項目管理的根本問題是對人的管理。java之所以適合做大項目,很大原因在于比較容易找到一幫水平差不多的人,并且管理起來也比較容易。python的優點是易學,雖然找一大幫人不容易,但培養起來比較快,規劃得當問題也不太大。但是C++就不同了,找一幫會C++的人不難,但是水平參差不齊,如頂樓匿名人士所說“你修不盈新手挖的坑,扶不正老人搭的廟”,就算是找到一幫C++高手,還各有各的習慣和愛好。至少python還有pythonic這條陽關道。

【梁濤的回答(7票)】:

根據這些年用過的編程語言,我總結出一條判斷語言是否值得學習、使用的指導原則:

易用、靈活、高效,一門編程語言最多只能同時擁有兩項。

易用 包括:

1. 簡潔,易讀、易理解、易寫;

2. 一致性好,易協作,易接手維護;

3. 基本構造緊湊;

4. 盡可能自包含,擁有豐富的類庫和軟件包支持;

5. 可移植,對執行環境的假定越少越好;

6. 從編寫到執行,整個過程涉及的工具越少越好,程序易部署;

7. 手冊可隨手取用。

靈活 包括:

1. 伸縮性好,刪除依賴性與加入依賴性一樣簡單;

2. 允許在不同層次上抽象(含DSL);

3. 支持多種編程范式;

4. 盡可能適用于更多的領域;

5. 可定制語言子集(方言);

6. 可編譯執行,也可解釋執行。

高效 包括:

1. 編寫快,越快越好(考慮工具支持與純手寫);

2. 編譯快,越快越好;

3. 除錯快,越快越好;

4. 執行快,越快越好。

還有一些特性沒有羅列出來。

仔細考慮一下,上述各特性不乏相互對立的,如何取得平衡,完全視應用環境而定。

這些特性考量將與設計哲學相互影響,最終決定一門編程語言的編寫風格與使用方式。

但終究,一門編程語言被設計出來的主要目的,是在成本最小化的基礎上,盡可能好地解決某些問題。

另外,不從架構角度考慮開發與運維、用戶操作的關系,做出來的東西必然到外都是坑,且很難持續。

不要隨便看不起一門編程語言,它被發明出來必然有其用處。

在恰當的時機用適當的語言解決正確的問題比什么都重要。

【徐辰的回答(17票)】:

NASA用FORTRAN把人送上了月球;K&R用匯編和B語言寫出了UNIX……

有爭論哪種語言好的功夫還不如去改改程序里的Bug,優化下執行效率,要不就美化下代碼多寫兩行注釋,省得總有人說你正在用的語言是個爛語言……

【李遙的回答(1票)】:

我用Python做過商業項目,在同時支持python2和python3以及各種小版本號的時候覺得被坑了。不是完全沒有walkaround,但是回顧時覺得選擇Python很不明智

【王亞暉的回答(5票)】:

沒有爛語言,只有爛人寫的語言罷了。

【池靜若的回答(5票)】:

寫大項目主要是邏輯的管理,和人的管理能力,與語言沒關,有些語言強制加了管理能力,就省了很多管理的規劃。舉個淺顯的例子。

匯編語言是最沒管理能力的,甚至變量就是內存和寄存器

C語言有點管理能力,至少分了全局,局部,函數,函數體內變量隔離

匯編就不說了,C語言對于沒經驗的幾個人來說很難寫大型程序,

但是簡單的規劃一下就可以寫了

例如,每個變量都前綴個人的名字,int tom_var; char jerry_var;float xx_var;

然后如果需要共用的,就寫 int public_var;

函數同樣處理,這是個非常好的技巧。。。。。。。

但是這種技巧一直被別有用心的公司諷刺

于是出現了C++;c++ 其實把名字換成了命名空間,然后把一些函數加了class頭,然后引入了面向對象的東西。但是class里面加了太多的歧義和難于理解。

于是又出現了,java ,強制用包,類

java算是編譯語言走到的極點,算軟件工程的產物,加了太多管理和約束的東西

導致寫代碼又羅嗦,又麻煩。適合大工程,但是效率很低(開發效率)

python出現了,更接近人的語言,高度的邏輯化,用python 基本上比java的邏輯減少了3倍。

大項目本質上是大邏輯的管理,python從理論上說能寫比java大3倍的項目

一個語言只要具備了,函數,類,模塊,包就是一個具有良好管理能力的語言。

如果你覺得什么語言寫不了大程序,仔細思考一下你的邏輯管理能力

或許 c是個好的鍛煉方式,如果沒有類,每個文件變量會沖突,你該如何解決呢!

分割線----------------------------------------分割線

吐槽。。。。加班中。。。寫代碼。。。。。隨便看到,忍不住吐槽。。。。。,繼續寫。。。

【Pyclass的回答(1票)】:

哪一種語言沒有缺點呢?在適用的領域,用好Python,那Python就是最好的語言,在不適用的領域,即使寫再好的程序,也無法完成任務。 爛的不是語言,而是不懂的人把它用爛了、、、

【長風的回答(0票)】:

可以看看OpenStack有多少行代碼,或者Django多少行代碼

【陳思源的回答(0票)】:

語言只是個工具,python作為動態語言,有快速開發的優勢,遇到大項目時,架構是項目成敗的關鍵,至于bug量,完全的團隊的水平相關,與語言無關

【alexzhan的回答(0票)】:

Dropbox算不算大型項目?但是基本上所有的客戶端都是Python寫的。

有很多網站也是用Python開發的,比如豆瓣還有豆瓣的很多客戶端都是用純Python,Quora也是用的Python,不過最近可能轉到Scala上了。

【夜末的回答(0票)】:

因人而異

【楊浪的回答(0票)】:

用python的好處就是這位兄弟還在跟你講python怎么不好的時候 你的1k行的代碼都快寫完了..

語言之爭從來都是毫無意義,好的設計架構才是最重要的

【馮子浩的回答(0票)】:

為什么python沒有好的ide……因為不大需要……

為什么python沒有強大的debugger……因為不大容易寫出有明顯bug的程序……

縱使Java死搞類型,該出bug的照樣出……

【zhoutall的回答(7票)】:

我記得一句話,寫出來的代碼目的是給別人看的,順便可以在機器上執行。

好的代碼是可讀性強的,好的語言便是為了方便寫出可讀性強的代碼。

我覺得Python很不錯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385979.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385979.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385979.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

996頁阿里Android面試真題解析火爆全網,分享面經!

導語 學歷永遠是橫在我們進人大廠的一道門檻,好像無論怎么努力,總能被那些985,211 按在地上摩擦! 不僅要被“他們”看不起,在HR挑選簡歷,學歷這塊就直接被刷下去了,連證明自己的機會也沒有,學…

access ole 對象 最大長度_Redis 數據結構和對象系統,有這 12 張圖就夠了!

作者 | 程序員歷小冰責編 | 林瑟Redis 是一個開源的 key-value 存儲系統,它使用六種底層數據結構構建了包含字符串對象、列表對象、哈希對象、集合對象和有序集合對象的對象系統。 今天我們就通過 12 張圖來全面了解一下它的數據結構和對象系統的實現原理。01數據結…

python煙花表白_python炫酷煙花表白源代碼

詳細內容天天敲代碼的朋友,有沒有想過代碼也可以變得很酷炫又浪漫?今天就教大家用Python模擬出綻放的煙花,工作之余也可以隨時讓程序為自己放一場煙花秀。python炫酷煙花表白源代碼這個有趣的小項目并不復雜,只需一點可視化技巧&a…

【面試總結】2021Java春招面試經歷

三、堆空間 基本描述 JVM啟動時創建堆區,是內存管理的核心區,通常情況下也是最大的內存空間,是被所有線程共享的,幾乎所有的對象實例都要在堆中分配內存,所以這里也是垃圾回收的重點空間。 堆棧關系 棧是JVM運行時的…

tableau地圖城市數據_Tableau 地圖 | 無法識別的城市

Tableau自帶的地圖功能很強大,也很簡單只要雙擊具有地理位置角色的字段,即可生成地圖不過有的時候在你部署地圖的時候總會發現有些城市或地名無法識別,提示如下:這篇post就來簡單聊聊為啥今天直說處理方法,不談后臺原理…

【高級Java架構師系統學習】最新Java高級面試題匯

性能調優 影響MySQLServer 性能的相關因素 商業需求對性能的影響系統架構及實現對性能的影響Query語句對系統性能的影響Schema設計對系統的性能影響硬件環境對系統性能的影響 MySQL 數據庫鎖定機制 MySQL鎖定機制簡介各種鎖定機制分析合理利用鎖機制優化MySQL MySQL數據庫Qu…

vue 安裝指定版本swiper_Vue中的runtime-only和runtime-compiler

在我們使用vue-cli的時候,會提示你安裝的版本可以看到有兩種版本:Routime Only和Runtime Compiler版本1.Runtime Only - 代碼中不可以有任何template 性能更高在該版本下,通常需要借助如webpack的vue-loader發工具把.vue文件編譯成js因為是在…

一文搞懂JVM架構:入職3個月的Java程序員面臨轉正

Java基礎 1.JAVA 中的幾種數據類型是什么,各自占用多少字節。 2.String 類能被繼承嗎,為什么。 3. 兩個對象的 hashCode() 相同,則 equals() 也一定為 true,對嗎? 4. String 屬于基礎的數據類型嗎? 5.…

不顯示調用super_讓不懂編程的人愛上iPhone開發(2017秋iOS11+Swift4+Xcode9版)-第11篇

歡迎回到我們的iPhone開發教程系列,讓我們繼續前進吧。重新來過別害怕,哥不是讓你拋棄之前所有的源代碼,從零開始重新構建這個項目!這里說的是游戲界面里面的“Start over”按鈕。在我們的to-do清單里面曾經提到過,這個…

一文搞懂JVM架構:跳槽面試大廠被拒

正文 在實際的工作項目中, 緩存成為高并發、高性能架構的關鍵組件 ,那么Redis為什么可以作為緩存使用呢?首先可以作為緩存的兩個主要特征: 在分層系統中處于內存/CPU具有訪問性能良好,緩存數據飽和,有良好…

全局變量_Python函數中的全局變量與局部變量

# a,b變量是全局變量,在整個py文件中都可以訪問a 11b 12# 定義一個函數def first():# 這個變量是函數內部定義的變量,屬于局部變量,只能在函數中使用c "Hello"# 大括號{} 是format()函數的用法,格式化print("c {}".format(c))# 如果局部變量定義的名稱…

一文詳解:字節面試官必問的Mysql鎖機制

一面 1 自我介紹和項目 2 Java的內存分區 3 Java對象的回收方式,回收算法。 4 CMS和G1了解么,CMS解決什么問題,說一下回收的過程。 5 CMS回收停頓了幾次,為什么要停頓兩次。 6 Java棧什么時候會發生內存溢出,Jav…

install npm 到某個文件下執行_你可能不知道的 npm 依賴管理那些事

點擊上方藍字關注我們npm 是 Node.js 默認的、以 JavaScript 編寫的包管理工具,如今,它已經成為世界上最大的包管理工具,是每個前端開發者必備的工具。不知你是否遇到過下面問題:哎?我本地明明是好的,線上的…

萬字總結!騰訊、字節跳動面經已發

二、常見的并發問題 1、臟讀 一個事務讀取了另一個事務未提交的數據 2、不可重復讀 一個事務對同一數據的讀取結果前后不一致。兩次讀取中間被其他事務修改了 3、幻讀 幻讀是指事務讀取某個范圍的數據時,因為其他事務的操作導致前后兩次讀取的結果不一致。幻讀…

ncbi查找目的基因序列_NCBI大搜索之目的基因尋蹤

NCBI大搜索之目的基因尋蹤最近經常碰到查找目的基因的問題,那今天就講一下如何利用NCBI數據庫查找目的基因!NCBI(National Center For Biotechnology Information),美國國家生物技術信息中心,分子生物學,生物化學及遺傳學領域常用…

萬字長文!2020-2021京東Java面試真題解析

我整理的spring學習筆記: 像spring這種知識點我們不能盲目的學習,首先我們得有一套學習路線,我總結了一套spring的學習思維導圖,今天通過我整理的Spring學習路線.xmind給大家分析spring需要掌握的一些核心知識點。 spring的特點&…

echarts label固定位置_ECharts+百度地圖網絡拓撲應用

前一篇談及到了ECharts整合HT for Web的網絡拓撲圖應用,后來在ECharts的Demo中看到了有關空氣質量的相關報表應用,就想將百度地圖、ECharts和HT for Web三者結合起來也做一個類似空氣質量報告的報表拓撲圖應用,于是有了下面的Demo&#xff1a…

三年Java開發,你連基礎的JVM運行時內存布局都忘了

面:為什么要使用雙親委派機制去加載類? 答:避免多份同樣字節碼的加載,浪費內存。 類的加載方式 隱式加載:new顯示加載:loadClass、forName等 類的裝載過程如下圖: 面:loadClass和…

vue實現可編輯的文字_蘋果還自帶文字轉語音,只要一鍵按下便可實現,今天分享給大家...

如果想將文字轉成語音,那大家平時都是怎么操作?下面小編就為大家介紹手機,電腦上都可以使用的方法,讓我們一起來看看吧!一、手機端操作1、蘋果手機其實蘋果手機就自帶了文字轉語音功能,只要打開手機&#x…

三面美團Java崗,面試竟然被這31道Java基礎題難倒了

01 分布式限流:NginxZooKeeper 1.1 分布式限流之Nginx 請解釋一下什么是 Nginx? 請列舉 x Nginx 的一些特性。 請列舉 x Nginx 和 和 Apache 之間的不同點 請解釋 x Nginx 如何處理 P HTTP 請求。 在 x Nginx 中,如何使用未定義的服務器名稱來阻止…