最好的編程編輯? 沒有明確贏家的永無止境的戰鬥
已發表: 2022-03-11不管有什麼明顯的相反證據,程序員都是人。 而且,和所有人類一樣,我們喜歡利用我們的選擇自由。 無論選擇是服用紅色藥丸還是藍色藥丸,穿裙子還是褲子,還是使用一種開發環境而不是另一種,我們所做的選擇都將我們置於一組人或另一組人中。 選擇不可避免地出現在我們對選項的評估之後。 做出選擇後,我們傾向於相信任何選擇不同的人都會犯錯誤。
您可以輕鬆地搜索互聯網並找到數百個關於 Emacs 與 Vim 的辯論。 即使你全部閱讀,也不可能客觀地選出獲勝者。 但是,開發環境的選擇是否能告訴您開發人員可以交付的工作質量? 絕對不!
一位出色的開發人員可以將她的代碼寫入記事本中,並且仍然可以交付出色的東西。
當然,專業人士在為他們的工作選擇工具時會考慮很多事情。 這適用於每個職業,包括軟件開發。 然而,很多時候,選擇是基於個人品味,而不是容易有形的東西。
程序員將大部分時間都花在了開發環境上,所以我們想要一些既美觀又實用的東西是很自然的。 每個開發環境都有其優點和缺點。 作為一個整體,它們是軟件開發行業的驅動力。
開發人員在選擇一組編程工具(如所選的編程編輯器)時應該評估哪些內容? 這個問題的答案並不像聽起來那麼簡單。 軟件開發接近於一門藝術,很少有“模糊”因素將傑作與高價收藏品區分開來。
每種編程語言,無論是 Java、C#、PHP、Python、Ruby、JavaScript 等,都有其與項目結構、調試和部署相關的開發實踐。 但是,它們的共同點之一是編輯代碼。 在本文中,我們將從軟件開發中最常見的任務:編寫代碼的角度來評估不同的開發平台。
IDE 與通用文本編輯器
集成開發環境 (IDE)(或交互式開發環境)是一種軟件應用程序,可為計算機程序員提供用於軟件開發的綜合設施。 IDE 通常由源代碼編輯器、構建自動化工具和調試器組成,並且許多支持許多附加插件和擴展。
文本編輯器是更簡單的應用程序。 與 IDE 相比,它們通常只對應於 IDE 的代碼編輯器段。 然而,它們往往遠不止於此。 創建 IDE 是為了服務於軟件開發的目的,而許多文本編輯器也旨在供非開發人員使用。
靜態類型語言可以從 IDE 中獲得很多好處。 由於嚴格的類型規則,IDE 可以在編譯之前直接在編輯器中檢測跨類和模塊甚至跨文件的錯誤和命名不一致。 此功能是許多 IDE 的標準配置,因此,IDE 在靜態類型語言中非常流行。
然而,對動態類型語言做同樣的事情是不可能的。 例如,如果方法名稱可能由代碼本身生成,由一系列字符串連接構造而成,則嘗試檢測動態語言中的命名錯誤只需要運行實際程序即可。 因為 IDE 的主要優點之一不適用於動態語言程序員,所以他們更傾向於堅持使用像 Sublime 這樣的文本編輯器。 附帶說明一下,這也是測試驅動開發運動圍繞動態語言社區發展起來的主要原因,並且在靜態語言中沒有那麼強大的追隨者。
是什麼造就了出色的編程編輯器?
除了各種語言的許多不同功能外,每個編程編輯器都需要有一個組織良好且乾淨的用戶界面。 整體美學吸引力也不應被忽視。 這不僅僅是好看的問題,因為精心設計的編輯器具有正確的字體和顏色選擇,有助於減輕眼睛疲勞並提高工作效率。
在當今的開發環境中,無論功能集如何,陡峭的學習曲線都是一種負擔。 時間總是寶貴的,所以一個好的編輯器應該很容易習慣。 理想情況下,程序員應該能夠立即開始工作,而不必跳過太多的環節。 瑞士軍刀是一種實用且有用的工具,但任何人都可以在幾分鐘內掌握它。 同樣,對於編程編輯器來說,簡單是一種美德。
用戶界面、功能和工作流程
讓我們仔細看看 UI、不同的特性和功能,以及應該成為任何編程編輯器一部分的常用工具。
當然,行號應該默認打開並且易於打開或關閉。
片段對於在固定佈局中插入標準化文本塊很有用。 然而,編程很多事情都是只說一次,所以要小心使用代碼片段,因為它們可能會讓你的代碼在未來難以維護。
對當前文件進行 lint 或語法檢查的能力非常有用,啟動它的能力也是如此。 如果沒有此功能,程序員必須切換到外部命令行窗口,選擇並運行正確的命令,然後逐步查看錯誤消息以查找錯誤源。 但是,lint 必須在程序員的控制之下,因為 lint 引起的延遲可能會在關鍵時刻中斷編碼器。
只要不妨礙內聯文檔,它就很有用,但是在類定義上打開瀏覽器頁面有時會更有用,尤其是當有很多相關的類不直接相互擴展時。 將瀏覽器文檔中的代碼剪切和粘貼到正在編寫的代碼中是很容易的,因此隨著程序員對文檔知識的增加,內聯文檔的額外複雜性通常變得不那麼有用,實際上,更令人討厭。
Word-completion 很有幫助,因為它速度快,幾乎與編輯中的文檔一樣可靠,而且侵入性較小。 只需輸入一個單詞的幾個字符,然後按 Enter 鍵即可獲得其餘部分,這是令人滿意的。 否則,一個人會在過度打字的壓力下工作,這被懶惰的程序員所憎惡,他們想要輸入ee
而不是更冗長的exponentialFunctionSquared
。 單詞補全通過最小化打字、強制連貫命名和不妨礙來滿足。
跨程序重命名變量和函數很有用,但您需要能夠查看更改並確保您的代碼沒有損壞。 再次,單詞完成是一個有用的中途站,因為它適用於所有語言; 您可以為具有較長生命週期的項目使用長名稱,而不會產生輸入開銷。 您可以在本地通過較短的名稱使用對它們的引用,以縮短可能會分佈在過多行上的表達式。 如果您需要重命名,長名稱是唯一的,因此這種方法適用於所有語言和所有文件。
源文件有時會增長很多。 代碼折疊是一個很好的功能,它簡化了長文件的閱讀。
使用元字符和正則表達式對局部、增量或全局進行範圍限制的查找/更改是當今最低要求的一部分,語法突出顯示也是如此。
流行編程編輯器概述
多年來,我經歷了許多編輯,這就是我對他們的看法:
Emacs:世界上最受歡迎的編輯器之一。 Emacs 最大的特點是它的可擴展性,儘管它的擴展語言很複雜(你甚至可以用
Mx tetris
在其中玩俄羅斯方塊)。 Emacs 的粉絲認為它基於終端的界面是一個很棒的特性,而其他人可能會爭論它是一個缺點。 根據我的個人經驗,我發現採用和學習的東西太多了。 我敢肯定,如果您知道如何使用 Emacs,您將永遠不會使用其他任何東西,但是接受和學習整個文化比我想做的要多。 儘管如此,它在開發人員中的受歡迎程度證明它遠非舊時代的遺物,而且仍然是我們未來的一部分。Vi/Vim:Vim 是另一個強大的基於終端的編輯器,它是大多數 xNIX 操作系統的標準配置。 除了具有與 Emacs 不同的界面之外,我的觀點實際上是相同的。 如果你是靠它長大的,我相信你永遠不會使用其他任何東西。 掌握 Vi 技能將使您在通過 SSH 和其他緊要關頭進行操作時變得更加簡單,並且一旦您熟悉了擊鍵,您就不會遇到速度問題。 雖然不像 Emacs 那樣難以破解,但學習曲線仍然相當陡峭,而且它肯定可以使用窗口編輯器的一些不錯的功能。
SublimeText:正如它的名字一樣,SublimeText 是一個漂亮的文本編輯器,具有大量的功能。 與一些類似的編輯器不同,SublimeText 是閉源的,因此不能在低級別進行修改。 SublimeText 提供了傳統文本編輯器的簡單性,以及簡潔快速的 UI。 許多開發人員發現它比 Vim 更易於使用,對於新手來說尤其如此。 學習曲線並不那麼陡峭。 雖然 UI 簡潔明了,但 SublimeText 確實提供了一些漂亮的功能,例如 UI 右側的按比例縮小的顯示代碼,允許用戶快速滾動代碼並相對輕鬆地導航。 雖然它不是完全免費的,但功能有限的演示版是。 解鎖所有功能將花費您 70 美元。
Atom 是 GitHub 為新一代開發人員製作編程編輯器的成果。 雖然它仍在進行中,但 Atom 是一個非常強大的編輯器,擁有一個充滿活力的開發人員社區,他們熱衷於新的擴展、JavaScript 庫等。 它的缺點包括一些 UI 怪癖,一些附加包可能行為不端的可能性,以及在處理(非常)大文件時報告的性能問題。 但該項目正在積極開發中,目前的缺點可能會得到改善。 Atom 是一個開源項目,它可以很容易地被黑客入侵以滿足您的需求。
Nano:在一個狹窄的角落裡表現出色,但功能不夠豐富,無法防止不可避免的想法潛入腦海中,因為必須有更快的方法來做到這一點,因為人們努力通過擊鍵來縮進代碼塊,同時保持註釋行在第 80 列! 它甚至沒有文本突出顯示,並且不應該用於配置文件更改以外的任何事情。
TextMate2:TextMate最大的缺點是只能在Mac上運行。 正如其創建者所說,“TextMate 將 Apple 的操作系統方法帶入了文本編輯器的世界。” 通過橋接 UNIX 基礎和 GUI,TextMate 精心挑選了兩全其美的優點,讓專家腳本編寫者和新手用戶都受益。 它是許多 Ruby、Python 和 JavaScript 開發人員的首選編輯器,並且對 Bash 或 Markdown 也有很好的支持。 在本文發表時,TextMate 2 仍處於 Beta 階段,但它已經擁有一個非常成熟的插件生態系統,有望將其擴展到 Emacs 的擴展之外。
jEdit:基於 Java,被一些人認為很慢。 開箱即用的配置可能會讓某些人望而卻步,但如果配置得當,jEdit 可以非常快,而且外觀非常漂亮。
Eclipse:另一個廣泛使用的 IDE,Eclipse 在 Java 開發人員中非常流行,但已經適應了許多不同的平台。 我們可以爭辯說,它的整體架構是將其拉入水下的一塊岩石,但它仍然是開發人員中最受歡迎的平台之一。
Aptana Studio:一個全面的開源 Web 應用程序 IDE。 它可以作為 Eclipse 插件使用,這使得它在一些 Java 開發人員中很受歡迎。 獨立版本更加精簡,並提供了一系列不同的主題和自定義選項。 對於在 Eclipse 中磨練技能的程序員來說,Aptana 的項目管理功能也可能派上用場。 雖然早期版本在某些硬件平台上存在性能問題,但這些問題已在 Aptana Studio 3 中得到解決,應該已成為過去。
NetBeans:另一個相對流行的具有跨平台支持的開源 IDE。 它在啟動時比像 SublimeText 這樣的精簡編輯器要慢一些,並且與某些替代品相比,附加組件的選擇是有限的。 由於無縫的 SCM 集成和 HTML5 支持,許多 Java 開發人員已經愛上了 NetBeans。 在最新版本中,NetBeans 對 PHP 的支持也得到了改進。
JetBrains:為 Java、Ruby、Python 和 PHP 提供一系列 IDE。 它們都基於相同的核心引擎。 JetBrains IDE 本身就非常強大,它已經獲得了越來越多的追隨者。 但是,它們不是免費的開源解決方案,儘管有 30 天的試用期,而且價格合理。
Komodo Edit:Komodo Edit 具有巨大的潛力,但它充滿了煩人的小“陷阱”和特質,這可能會因其缺乏正交性而令人沮喪。 Komodo Edit 感覺雜亂無章,這很遺憾,因為它顯然具有強大的功能。 我不斷回到 Komodo Edit,希望我錯過了一些組織原則,而每次,我都被一堆雜亂無章的能力擊退。
Geany:Geany 不像這個列表中的許多其他編輯那樣是主要的權力參與者。 它更多地由“它不是什麼”來定義,而不是“它是什麼”。 它並不慢,它沒有很多過去的遺產,它沒有宏功能,也沒有很多緩衝功能的多窗口。 然而,它所做的事情,它做得足夠好。 它可能是我嘗試過的所有編輯器中要求最低的,並且仍然可以完成您對程序員編輯器的期望的 90%。 Geany 在 Ubuntu 上看起來足夠好,這也是我選擇它作為首選編輯器的原因之一。
我的結論
在這些偉大的工具中,僅僅宣稱其中一個是最好的編程編輯器是冒昧的。 而且有很多編輯器我什至沒有嘗試過。 沒有一種萬能的解決方案。 這迫使我嘗試了許多不同的編輯器; 如果您對編輯器的壽命更感興趣,您還需要閱讀 Roben Kleene 對代碼編輯器的評估。
我目前正在使用 Geany,但這是因為它符合我的要求。 借助 Geany,以及來自 Perl/Gimp/Audacity/Sox 的大量幫助,我能夠為我開發的 Android 應用程序開發和維護 Java 代碼庫,準備它們以針對多個分銷商、源代碼、lint 的不同配置進行編譯、編譯、dex 和生成.apk
文件,並在全球範圍內交付這些應用程序。
您的開發線可能規定了一組不同的要求,我希望我節省了您一些時間來研究最合適的編程編輯器。