日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

为什么Java、Python会成为程序员最害怕的编程语言?

發(fā)布時間:2025/3/16 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么Java、Python会成为程序员最害怕的编程语言? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者 | Mike Loukides

譯者 | Sambodhi

策劃 | Tina

這是 O'Reilly 發(fā)布的“The Least Liked Programming Languages”(作者:Mike Loukides)英文文章的中文翻譯版本。英文原版的翻譯得到 O'Reilly Media,Ina. 的授權(quán)。版權(quán)所有,未經(jīng)書面許可,任何部分不得以任何形式使用、復(fù)制、修改。

最不受歡迎 / 最令人畏懼的編程語言有哪些?這些編程語言為什么令人畏懼?對它們的評價是否公正?

在 StackOverflow 的 2020 年度開發(fā)者調(diào)查中,有一張表格,顯示的是“最受歡迎、最令人畏懼和最想要的編程語言”。最受歡迎的和最想要的編程語言,嗯,是有點無聊。倒是那個最令人畏懼的就有意思多了。正如托爾斯泰(Tolstoy)所說的:“幸福的家庭都是相似的,而不幸的家庭則各有各的不幸。”(All happy families are alike; each unhappy family is unhappy in its own way.)

那么,這些令人不快的、不受歡迎的編程語言都是哪些呢?為什么程序員如此害怕使用這些編程語言呢?如果有機會的話,很難不會加入一些理論,甚至說一些不明智的話。或者為一些因為錯誤的原因而不喜歡的編程語言辯護。

更準確地說,StackOverflow 統(tǒng)計的是“正使用該語言或技術(shù)進行開發(fā),但沒有表示有興趣繼續(xù)使用的開發(fā)人員的百分比。”這聽上去沒有“恐懼”那么可怕;“沒有表示有興趣繼續(xù)使用一種語言的工具”這一提法的本身就是一種相當模糊的畏懼暗示。我做過的很多事情我都不想再做了,包括編寫產(chǎn)生 shell 腳本的 troof 宏。但我們不用擔心這個,對吧?

最不受歡迎的語言列表與最廣泛使用的語言列表相似,如 RedMonk、Tiobe 和 O'Reilly Learning 上的搜索結(jié)果所示。這一點也不奇怪;C++ 之父 Bjarne Stroustrup 曾說,“世界上只有兩種語言,一種飽受詬病,另一種沒人使用。”(There are only two kinds of languages: the ones people complain about and the ones nobody uses.)這話說得很有道理,至少在這項調(diào)查中是這樣。如果你有數(shù)百萬用戶,要做到讓很多人不喜歡你并不難。因此,在不受歡迎的語言列表中看到 C 這樣的多年老牌語言和像 Java 這樣的新秀也就不奇怪了。

Kevlin Henney 和我認為,最不受歡迎的語言列表也反映了從事大型遺留項目的程序員的意見,而不是短程序。不喜歡某一門編程語言的原因可能是“道德連坐”:因為不喜歡一個龐大的、過時的、文檔最少的代碼庫,以及每次修復(fù)一個 Bug 都會破壞其他東西的架構(gòu)風(fēng)格。因此,在榜單上看到曾經(jīng)被廣泛使用但卻不再受歡迎的編程語言也就不足為奇了。人們也很容易愛上一門古怪的語言,這種語言對于某個項目來說非常完美,但你再也見不到它了。(就拿我來說,這種語言是 Icon。你試試吧,你可能會喜歡這門語言。但它卻不在任何人的清單上。)

最令人驚訝的是當一種語言不合時宜的時候:當它比你預(yù)期的明顯更多或更少不受歡迎時。這就是我要思考的問題。因此,在進行了初步的討論之后,下面是一些討論的結(jié)果:

?

?

Java??

自誕生以來,Java 就一直是人們愛恨交加的語言。我參加過 USENIX 會議,在會議上,James Gosling 第一次談到 Java(遠在 1.0 之前),人們離開會議室后都在談?wù)?Java 是有多么可怕——那時候并沒有人真正使用過 Java 語言,因為它還沒有發(fā)布。在這項調(diào)查中,Java 排名第 9 位。鑒于 Java 的聲譽,給出這樣的排名應(yīng)該已經(jīng)很夠意思了。

如果這個列表中有一種編程語言與大型項目相關(guān),那就是 Java。關(guān)于 Java 有很多令人討厭的地方:盡管其中很多都與 Java 成長過程中程序員形成的不良習(xí)慣有關(guān),而不是與語言本身有關(guān)。如果你發(fā)現(xiàn)自己在濫用設(shè)計模式,請退后一步看看自己在做什么;把所有東西都變成設(shè)計模式就是一個信號,表明你并沒有理解模式到底是用來干什么的。(如果你需要復(fù)習(xí)的話,可以參閱 《深入淺出設(shè)計模式》(Head First Design Patterns) 或“四大金剛”合著的經(jīng)典書籍《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》(Design Patterns: Elements of Reusable Object-Oriented Software)。如果你開始編寫 FactoryFactoryFactory,請停下來好好走一走。如果你正在編寫 ,那就無需這樣做了。但 Java 并不會讓你這么做的。描述性的名稱還是很好的;長得離譜的名稱(以及深得離譜的包層次結(jié)構(gòu))卻并非如此。我總是試圖在每行代碼上都有一個連貫的想法。你不能在名字只有半行長的時候這么做。但這不是 Java 的錯,而是 Java 程序員的一種文化怪癖。

Java 是冗長的,但這不一定就是個問題。正如一位并非 Java 愛好者的人曾經(jīng)告訴我的那樣,類開始時的所有聲明實際上都是文檔,而文檔在大型項目尤為重要。一旦你知道了數(shù)據(jù)結(jié)構(gòu)是什么,你就可以很好地猜測這個類是做什么的。我發(fā)現(xiàn) Java 比大多數(shù)其他語言更容易閱讀和理解,部分原因在于它非常明確——大多數(shù)優(yōu)秀的程序員意識到,他們花在閱讀別人的代碼上的時間要比編寫自己的代碼要多。

?

Ruby?

當我發(fā)現(xiàn) Ruby 在榜單上居然排名第 7 位時,讓我倍感驚訝。Ruby 比 Java 更不受待見嗎?這是為什么?我用 Ruby 編寫過一些有趣的程序;在很大程度上,它是一種“按我的意思去做,而不是按我說的去做”的編程語言,15 年前,就是這個承諾讓很多程序員愛上了這門語言。

但如果我們把 Ruby 放在大型系統(tǒng)的環(huán)境中予以考慮的話,它還是有意義的。編寫模棱兩可的代碼并不難,至少對于一般的觀察者來說是這樣。如果一個函數(shù)或方法被打上“猴補丁”而產(chǎn)生一些非標準行為,那么就很容易與之發(fā)生沖突,而這些修改卻很少被記錄下來。元編程在 Rails 等框架得到了出色的應(yīng)用,但是我一直對 Ruby 庫中的神奇功能方面感到困擾。這些功能都不利于大型項目。

譯注:猴補丁(monkeypatch),是一種很臟的編程技巧,用拼湊代碼的方法修改進程邏輯。這種技巧也叫鴨子雙關(guān)。猴補丁意思是用類似雙關(guān)的技巧拼湊出和常規(guī)進程相左的進程邏輯,這種技巧只會在運行時刻生效。猴補丁的出現(xiàn)說明進程本身設(shè)計有缺陷,它用在網(wǎng)頁和數(shù)據(jù)庫上就是 SQL 注入攻擊,Unix Shell 的 flag 使用不當也會產(chǎn)生類似的安全問題,比如將文檔命名為“-x”形式,命令行就可能將文檔名認作一個傳遞的參數(shù)而造成運行異常。

許多年前,我在 Ruby 或 Rails 會議上曾聽到有人這樣說:“沒有任何大型項目,Ruby 中的所有東西都能減少 90% 的代碼行數(shù)。”我一直認為 LOC 是一個愚蠢的指標(譯注:LOC,length of the code,即代碼的長度)。就算你相信 Ruby 真的減少了 90% 的代碼行(反正我不信),一個大數(shù)目的 10% 仍然是一個很大的數(shù)字,特別是如果你有責(zé)任消化這些代碼,包括背后發(fā)生的事情。Ruby 很有趣,我現(xiàn)在還用它來編寫快速腳本(雖然我基本上已經(jīng)改用 Python 來做了),但它會是大型項目的首選語言嗎?那可能會讓我害怕地跑掉。

????

R? ??

R 在“最令人畏懼的名單”中排在第 10 名。我認為這是因為一種誤解。R 既是也不是一種通用編程語言。一些統(tǒng)計學(xué)家告訴我,“你們程序員不明白,R 是一個統(tǒng)計工作臺,并不是一種編程語言。它不是 Python 的什么怪異版本。”我曾多次用過 R,但當我讀完 Vince Buffalo 的《Bioinformatics Data Skills》(譯注:暫無中文版)中有關(guān) R 的教程后,我終于“明白了”(至少是部分明白了)。循環(huán)和 if 語句在該教程的最后只有幾頁,而不是你最先學(xué)習(xí)的概念之一。為什么要這樣?因為如果你正確地使用 R,你就不會需要它們了。它的設(shè)計目的是讓你不必使用它們。如果你使用的是更傳統(tǒng)的語言,你可能會發(fā)現(xiàn)自己在與這門語言作斗爭,而不是使用它。條件邏輯和迭代的實現(xiàn)有更好的方法。

它還有助于使用最好的工具和庫:RStudio 是一個非常好的 R 集成開發(fā)環(huán)境,而 Tidyverse 是一組用于處理數(shù)據(jù)很棒的庫。然而具有諷刺意味的是,這甚至可能是問題的一部分:有了優(yōu)秀的圖形庫和 Web 框架,R 突然看起來不太像一個專門的統(tǒng)計工作臺,而更像一個通用的工作臺了。

許多程序員似乎正在用另一種眼光看待 R——也許是為了分析 COVID 數(shù)據(jù)?在 2020 年 7 月的報告中,R 從 Tiobe 指數(shù)的第 20 位躍升至第 8 位。這是一個巨大的變化。不管是什么原因,如果你用它工作,而不是反對它,那么 R 將是一個更愉快的環(huán)境。它是非常有意見的,而且這些意見是統(tǒng)計學(xué)家的意見,不是程序員的意見。

Python

Python 在這個榜單上排在第 23 位。對于一個使用如此廣泛的編程語言來說,這個排名是非常低的。Python 很容易讓人喜歡;我之所以喜歡 Python 僅僅是因為它去掉了花括號。但除此之外,它還有什么值得人們?nèi)ハ矚g呢?我總是講“不要選擇語言,要選擇庫”,而 Python 就有很棒的庫,尤其是在數(shù)值計算方面。Pandas、Numpy、Scipy 和 scikit-learn 都是人們喜歡 Python 的好理由。像列表解析(list comprehensions)這樣的功能就消除了許多與傳統(tǒng)控制結(jié)構(gòu)相關(guān)的簿記。Python 既適用于快速而棘手的任務(wù),也適用于大型項目。如果我想用電子表格做點什么,我?guī)缀蹩偸鞘褂?Python。(我嗎?數(shù)據(jù)透視表?)而像 Jupyter 這樣的工具可以很方便地記錄你的實驗過程。

從“大項目”的角度來看,Python 很容易閱讀;不會因為嵌套的花括號而令人感到眼花,而且由于包含了解析(comprehension)、映射(map)和其他功能,嵌套的級別也更少。它具有合理的面向?qū)ο蟮奶匦?#xff08;盡管公認有些古怪)。我又回到了一些舊的循環(huán)腳本,并且經(jīng)常能夠完全不使用循環(huán)就編寫它們。如果你想把一個連貫的想法放在一條線上,那就是所有可能世界中最好的。《Python 之禪》(The Zen of Python)中有一個重要的口號是“明了優(yōu)于隱晦”(Explicit is better than implicit);你很少會去猜測別人是什么意思,或者試圖破譯“發(fā)生的”一些意想不到的魔法。Python 獲得了最受歡迎的編程語言的稱號,最大限度地減少人們的反感。它擁有一系列平衡的特性,這使得它成為小型項目和大型項目的理想選擇。

JavaScript

對于排名第 16 位的 JavaScript,我們該如何看待呢?我是沒什么好說的。這是一種以隨機和無序的方式發(fā)展起來的語言,程序員最終認識到它的強大和高效,這在很大程度上要歸于 Doug Crockford 的經(jīng)典著作《JavaScript 語言精粹》(JavaScript: The Good Parts)。一種像 JavaScript 一樣被廣泛使用的語言,在最令人畏懼的的語言排行榜上只排在第 16 位,它肯定是做對了什么。但我不一定要喜歡它。

當然還有很多要說的。毫無疑問,VBA 是最不受歡迎的語言。我承認我完全不了解 Objective-C(排名第 2),我從來沒有任何理由去使用這門語言。盡管我很早以前就討厭 Perl,但令我驚訝的是,Perl 是如此不受人們待見(排名第 3),但有些傷口永遠不會愈合。看看 Perl 7 發(fā)布幾年后會發(fā)生什么,這將是一件有趣的事情。匯編語言(排名第 4)是一種后天習(xí)得的品味(而且不是一門單一的語言)。如果你不學(xué)著去愛它,你就會討厭它。如果你不喜歡它,你真的不應(yīng)該去使用它。你幾乎總是可以避免使用匯編語言,但當你需要直接使用硬件時,你就別無選擇。C 和 C++(排名分別為第 5 和第 8)給了你很大的空間,但對于幾乎任何項目,它們都能讓你盡可能接近硬件,而無需擔心使用匯編語言的問題。它們是消失在過去呢,還是會永遠與我們同在呢?我猜是后者;需要 C 的性能和普遍性的項目實在太多了。它是現(xiàn)代計算機中幾乎所有重要內(nèi)容的基礎(chǔ)。

猜測編程語言以及人們喜歡或討厭它們的原因是一件很有趣的事。它可能有用,也可能沒用。但我所說的不一定有用,你聽聽就好,別當真。

參考閱讀:

https://www.oreilly.com/radar/the-least-liked-programming-languages/

有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)

歡迎大家關(guān)注Java之道公眾號

好文章,我在看??

總結(jié)

以上是生活随笔為你收集整理的为什么Java、Python会成为程序员最害怕的编程语言?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。