每個開發人員都應該學習的五種編程語言(上)
程序員編寫代碼的通用編程語言有很多種,大多數使用企業軟件的程序員在退休前通常只使用一種編程語言。然而,也有一些程序員在日常工作中有機會使用多種編程語言。例如,如果程序員使用Flatter本機模塊,則有機會使用Dart、Kotlin(或Java)、Objective-C(或Swift)、C/C++等。
大多數程序員在一種語言上工作了幾十年,這一點會限制他們的技術技能。我們經常看到很多 .NET和Java專家。卻很少看到掌握多種語言的程序員。學習多種編程語言會帶來更多好處。但是,學習每一種流行的編程語言,并不是一個明智的選擇。
在這個故事中,我將向您展示每個程序員都應該學習的五種編程語言。并用實例說明學習這些編程語言的好處。
一、C/C++
C語言是幾乎所有底層軟件組件的基礎語言。C的抽象更接近于硬件,C為程序員提供了最小的語法(保留了32個關鍵字)。與其他現代流行編程語言相比,C的語法更接近匯編語言。因此,C編譯器可以高效地將C源代碼轉換為機器語言,并生成輕量級和極快的二進制可執行文件。
C++是C的擴展,所以你可以使用C++的C語言缺少的特征(例如:類、命名空間等)。學習C/C++對任何程序員都有很多好處。C/C++促使您編寫優化的代碼,因為C/C++不提供自動垃圾收集。
C提高了您解決問題的能力和基本的計算機科學技能,因為它不提供預構建的數據結構和功能齊全的標準庫。例如,如果需要C語言中的堆棧,則必須構建自己的堆棧。
同樣,學習C/C++有助于提高計算機科學知識和技能。下面的故事解釋了為什么程序員應該先學習C語言。
為什么每個開發人員都應該從 C 開始編程
你可以用任何語言開始編程——但從 C 開始有更多好處!
世界上大約有700 種編程語言。但是,開發人員使用大約 20 種不同的編程語言來構建企業軟件。換句話說,即使有很多編程語言,也只有少數流行的通用編程語言。開發人員通常在學校、大學或職業生涯開始時開始編碼。
當他們開始編碼時,每個開發人員都會發現自己在問一個問題:我應該先學習哪種編程語言?如果你在大學學習計算機科學,課程大綱通常首先是 C 編程語言。
在C語言程序米銘語言仍然在與硬件相關的軟件項目經常使用。
但是 Java、C#、JavaScript、Go、Python、Ruby、PHP 和 Kotlin 等語言在現代軟件行業中占據主導地位。這是因為他們的:
- 人性化的語法和語義。
- 功能齊全的標準 API。
- 社區支持。
- 豐富的框架和庫生態系統。
另一方面,現代社區并不經常使用 C——其他流行的語言提供了比 C 更友好、簡單和靈活的環境。是的,C 是硬件相關項目的更好選擇,但大多數開發人員都在工作與網絡和移動相關的項目。
讓我解釋一下為什么學習 C 是最好的選擇。
C 讓你成為一個很好的問題解決者
幾乎所有程序都提供內置方法或庫方法來解決需要邏輯算法的編碼問題。例如,如果您需要將特定項復制到第二個數組中,則可以使用JavaScript 中的內置過濾器方法。如果您使用的是 Java,則可以使用包中的filter方法java.util.stream。從字面上看,任何流行的編程語言都有一個內置方法或庫方法來過濾數組。但是如果你使用 C,你必須自己實現它——因為 C 中沒有內置或庫過濾方法。
當您找到這些場景時,您將面臨需要解決的問題。練習算法問題是成為優秀問題解決者的好方法。我們并不總是處理僅涉及您最喜歡的企業編程語言的標準庫和內置功能的簡單任務。我們經常處理涉及解決問題技能的任務。因此,使用 C 編寫初始代碼會使您成為更好的問題解決者。
而且,參加競爭性編程黑客馬拉松的開發人員經常使用 C 來解決問題。
C 給你硬件的味道
Python、C# 和 Java 等編程語言是非常人性化的語言。但是,這些語言與物理硬件非常抽象。換句話說,在開始使用 C 進行編程之前,您將無法體驗計算機硬件的行為。現代編程語言隱藏了與硬件相關的整個體驗,提供了全新的沙盒環境。在大多數情況下,這個沙盒環境是使用虛擬機創建的。
不幸的是,開發人員跳過了與硬件相關的關鍵主題,如內存管理、文件處理和代碼優化——因為它們不是從 C 開始的。現代編程語言自動處理內存分配和垃圾回收器的釋放。另一方面,在 C 編程語言中,開發人員通過編寫高度優化的代碼來管理內存。
使用 C 編寫初始代碼可為您帶來難忘的硬件之旅,這是每位計算機科學家都應該體驗的。
C 教你表現和自由
當一種編程語言提供非常人性化的抽象時,特定的編程語言將變得不那么靈活。您最喜歡的編程庫的每個標準庫方法和內置方法都充當硬編碼的黑盒。換句話說,現代編程語言隱藏了低級代碼,并為開發人員提供了干凈但有限的接口。使用現代編程語言,直接動態內存分配實際上是不可能的。同時,C 通過公開所有低級代碼訪問為您提供真正的自由。
C 編譯器生成極快的匯編代碼。因此,C 開發環境本身會激勵您編寫高性能代碼。在C中,我們必須小心地聲明變量、分配內存、清理內存、訪問資源和釋放資源。如果您最初使用 C,則可能不會使用當前使用的編程語言使用過多的內存、不需要的資源和錯誤的數據結構。
C 激勵你編寫干凈的代碼
與現代編程語言不同,您必須用 C 編寫許多代碼行。這是因為 C 提供了對您需要的一切的低級訪問——它沒有為您提供高度抽象的標準庫。當代碼中的行數增加時,代碼的復雜度也會增加。因此,我們必須編寫干凈且不言自明的代碼來擺脫雜亂的代碼。
當我們處理行業級軟件項目時,編寫干凈的代碼是一項非常需要的技能。事實上,如果我們從事過基于 C 的項目,那么編寫干凈的代碼就是小菜一碟。
結論
隨著 C++ 項目的積極發展,C 已經成為 C++ 的一個子集。C++ 確實是一種現代編程語言,具有功能齊全的標準庫。因此,學習C++和學習C是不一樣的。但是,直接的內存操作能力和低級訪問能力還是有的。幾乎所有現代編程語言都通過引入新的語法、語義和標準庫方法相互競爭。但是,像 Go 這樣的語言只擴展了標準庫和社區驅動的庫。
如果開發人員立即跳入 Python、JavaScript、C# 或 Java 等現代編程語言,他們將錯過 C 編程語言提供的寶貴經驗。從 C 開始編程是了解編程語言如何與硬件連接的好方法。
先用C語言選擇硬路線。它將幫助您成為您最喜歡的編程語言的專家。
*原文鏈接:https://betterprogramming.pub/why-every-developer-should-start-programming-with-c-39b3a87392bf。
二、Bash
Bash是為類Unix操作系統構建的命令語言和命令行解釋器。Bash解釋器程序預裝在幾乎所有類似Unix的操作系統中。此外,許多GUI終端軟件通常使用Bash作為默認命令解釋器。因此,我們可以為不同的類Unix操作系統編寫可移植的Bash腳本。
程序員遵循不同的實踐來提高他們的日常編程效率。許多程序員通常為重復的手動過程編寫自己的Bash腳本。例如,我編寫了一個簡單的Bash腳本來構建和復制TypeScript項目的輸出。學習Bash無疑是學習過程自動化的第一步。過程自動化確實是提高生產力的方法。
Bash本機支持進程。換句話說,您只需提及其名稱即可運行另一個程序。因此,您可以快速編寫自動化腳本以提高編程效率。下面的故事解釋了如何將GUI元素添加到Bash腳本中。
如何通過添加GUI使Bash腳本現代化
Bash 腳本包含一組用 Bash 命令語言編寫的指令,這些腳本可以在 Unix shell 解釋器中執行。我們使用 bash 腳本來自動執行幾個任務,如果我們按照手動方式執行這些任務,這些任務顯然很耗時。但是如果我們與現代計算相比,bash 腳本是老式的東西,因為與用戶的所有交互都是通過命令行界面完成的。我們知道一些開發人員正在使用引人注目的標志和顏色來突出控制臺界面中的重要內容。如果一個特定的老式 bash 腳本被高度技術性的觀眾使用,那很好。但是如果它被普通觀眾使用,那么進行一些用戶友好的交互顯然是件好事。
事實上,您可以使用Zenity命令行工具將基于 GUI(圖形用戶界面)的輸入/輸出組件包含到您的下一個 bash 腳本中,該工具幫助我們顯示 GTK 對話框。此外,可以使用notify-send命令行工具顯示本機 GUI 通知。這兩個工具通常隨流行的 Linux 發行版一起提供,因此不需要任何類型的預安裝。
消息框
很明顯,使用本機消息框向用戶顯示任務完成情況比在控制臺中打印原始文本要好。使用Zenity可以輕松生成錯誤、信息、問題和警告類型的消息框。
信息消息框:zenity --info。
警告消息框:zenity --info。
錯誤消息框:zenity --error。
錯誤消息框:zenity --question。
如果用戶允許,需要執行一組指令,則可以使用問題類型消息。例如,從磁盤刪除文件。這可以通過使用簡單的if條件或$?存儲最后一個返回值的特殊變量。
通知
通知非常適合顯示長時間運行的批處理指令的狀態。這一點非常重要,即使用戶正在做一些其他工作,而不是查看控制臺以了解發生了什么,他們也會收到通知。借助notify send命令行工具,可以輕松生成本機通知。
考慮下面的簡單例子…
Zenity還具有發送通知的功能,但notify send為我們提供了更多調整的自由。
輸入元素
Zenity通過提供各種輸入元素為收集用戶輸入提供了良好的支持。它有以下類型的輸入框。
日歷輸入框zenity --calendar。
這是一種更好的捕獲用戶輸入的日期的方法,而不是要求用戶從控制臺以yyyy-mm-dd格式輸入所需的日期。
字符串輸入框zenity --calendar。
我們通常使用read命令從控制臺獲取一些字符串輸入。bash腳本對于非技術人員的可用性可以通過提供一個GUI文本字段來增強,該字段還接受通用的按鍵(主/結束鍵等)和簡單的復制粘貼功能。
非常類似的zenity --password可以用來捕獲用戶的秘密字符串,如密碼或PIN碼。此外,密碼輸入還允許您啟用用戶名字段。然后返回用戶名和密碼,并用|字符分隔。
文件選擇對話框zenity --file-selection。
本機保存/打開對話框可以順利顯示。我在Neutralinojs中也使用了此功能。
列出選擇
如果我們使用普通的控制臺輸入來詢問用戶的一些選擇,我們可以為用戶的所需選擇實現幾個縮短鍵輸入。例如,要求用戶輸入字母A以接受一個選項,另一方面要求用戶輸入字母B以激活另一個選項。從用戶的角度來看,通過顯示基于GUI的列表選擇,可以稍微改進此方法。
讓我們假設您正在制作一個安裝腳本,您需要詢問需要安裝哪個幫助程序插件,以便與主軟件程序進行雙因素身份驗證。
高級范例
如上所述,有幾個GUI輸入元素可以與bash腳本一起使用,而不是一直使用原始文本。此外,我將向您展示一個更高級的示例,該示例是使用這些本機GUI元素實現的。
*原文鏈接:https://medium.com/swlh/how-to-modernize-your-bash-scripts-by-adding-gui-cba613a34cb7。