奧推網

選單
科技

歷經眾多“現代”程式語言後,我又回到了 C 語言

摘要:作為一名優秀的程式設計師,緊跟技術潮流發展來學習新技術是提升職業生涯的一大途徑。其中,程式語言是程式設計師的必備技能,各個語言的使用和適用性不盡相同。那麼,在見識並嘗試過眾多程式語言後,哪種程式語言最深得人心呢?本文作者 Adam Berg 給出了他的答案:C 語言。

原文連結:https://devtails。xyz/@adam/switching-to-c-over-modern-programming-languages

作者 | Adam Berg譯者 | 彎月

出品 | CSDN(ID:CSDNnews)

嘗試新的程式語言

大約一年前,我決定了解一下Rust。我閱讀了相關書籍,學習了一些教程,還閱讀了一些文章。後來,我決定用Rust編寫我的第一個命令列應用程式。

學習一門新語言的感覺有點像嘗試RPG遊戲中的一個新角色。剛開始的時候,一切都令人興奮。隨著學習的不斷加深,你會意識到以前在程式設計工作中遇到的挫敗感又一次出現了。我認為,這些“挫敗感”大多是因為無聊引起的。如果在玩電子遊戲的時候感到無聊,完全可以重新開始。畢竟遊戲的目的就是享受樂趣。然而,在軟體開發中,重頭開始是一件大事。我想透過本文,探討一下我決定暫時放棄Rust(以及其他語言),並集中精力(重新)學習C的一些原因。

“原生”語言

在計算機程式設計中,“原生”語言指的是計算機可以理解的語言。然而,最近我在思考一個問題:我個人的“原生”程式語言是什麼。

我從十幾歲開始接觸Java,但大多數時候都是圍繞著教程打轉。後來,進入大學,我的專業是工程學,大一的時候我選修了C語言。這門課的成績呈兩極分化:要麼是學霸,要麼是學渣。我覺得這很正常,因為你編寫的程式要麼能正常工作,要麼就跑不通。在這門課中,我學習了程式設計的所有基礎知識,並大致瞭解了計算機的工作原理。這門課的學習堅定了我的想法:我想學習程式設計,而且從那時起C語言就在我心裡紮了根。

現如今,我掌握了(至少可以正常使用)多門程式語言:C、C#、C++、Assembly、Php、Java、Golang、Rust、Swift、ActionScript 3、JavaScript、TypeScript、Haxe 和 Python。我經常拿人類語言與計算機語言做類比。“原生語言”就好象我們的母語,母語與其他語言最大的不同在於,在說話或寫作的時候,母語會自然而然地湧現。而其他語言,則需要在腦海中翻譯,而且在說出來之前也需要先在腦海中打草稿。雖然我的其他語言也可以說的很流利,但終究比不上母語。

在提到C語言時,人們的第一反應是“C語言太難了”。回顧以往的經歷,我卻覺得JavaScript、Swift 和 Rust才是最難理解的語言。這些語言擁有很多神奇的“魔法”,因此很難搞清楚究竟怎麼回事。我發現在用這些語言編寫程式碼時,我的大腦會編寫偽 C 程式碼,然後轉譯為正在使用的語言。

於是,我開始思考為什麼我還要學習這些新語言。我開始使用 JavaScript 是因為它是編寫Web互動式應用程式的唯一方法。後來,我開始使用 Swift,因為它是蘋果提供的編寫 iOS 應用程式的唯一方式。最後,我又開始學習Rust,主要是因為它很流行……

每種語言都讓我學習到了很多新知識,但每種語言都讓我略感酸澀。我受夠了慢吞吞的JavaScript(尤其是在 Web 開發領域,我們想方設法進行各種微最佳化,實際上換一種語言也許立即可以將速度提升2倍)。Swift就像是一副帶著蘋果logo的手銬。我不認為自己會在蘋果圍牆花園之外使用這門語言,而且我無法接受只能在一個平臺上開發的程式語言。我原本希望Rust能夠給我帶來一絲欣喜。雖然我至今認為它有這種潛質,但不幸的是,我發現Rust的語法很笨拙,而且學習的時間甚至超過了實際編寫程式碼的時間。誠然,隨著經驗的增加,這種情況會慢慢改善。考慮到很有可能Rust不會大火,所以我不打算花太多時間在上面。我還沒有真正體驗過Rust聲稱要解決的C/C++中的問題。這可能是因為我也沒有花太多時間學習C/C++,但我認為在尋求解決方案之前,我們應該首先正確理解問題。

C 語言的程式設計核心

最近,我突然想起可以使用emscripten編譯C語言在Web上使用。過去,我曾嘗試過,但這次我想花一些時間結合C語言和SDL庫,編寫一個遊戲《乓》的概念驗證。

在成為 Web 開發人員之前,我是一名遊戲開發人員,我一直認為遊戲引擎的執行方式比網站更直觀。我已經開始嘗試使用 SDL 編寫非遊戲應用程式。第一次是記筆記的類似 GUI 終端的應用程式。我花了一些時間來整理想法,目前我有了一個能用的應用程式。我希望儘快編寫完該應用程式。

此外,我還嘗試在 iPhone 6手機上運行了相同的程式碼。蘋果不支援在iPhone 6上編譯 Swift 應用程式。在檢查了SDL的相容性後,我注意到它能夠在 iOS 6 及更高版本上執行,這意味著它實際上能支援從iPhone 3GS之後所有iOS裝置。經過此次嘗試,我發現我完全可以不使用Swift 和 Objective-C,同時我比大多數現代“iOS 開發人員”具有更好的 iOS 相容性。

在 Web 開發方面,我很不喜歡需要“安裝”的Web 應用程式。Web應用程式實際上並不能與本地檔案系統,而將服務節點、IndexedDB等組合起來,確保在離線狀態下正常工作太複雜了。使用C以我熟悉和喜愛的方式讀取和寫入檔案非常簡單。C語言的應用程式本來就只能離線,線上才是後來新增的功能。

在我看來,Web 應用程式應該作為正確安裝的應用程式的補充。我很有興趣探索一下相反方向的工作是否有意義。例如用 C 語言為編寫桌面版的應用程式,然後確保相同的程式碼也能夠在瀏覽器中執行。

我厭倦了沒有網際網路就無法訪問應用程式。我厭倦了總是需要開啟一堆瀏覽器的標籤頁。我厭倦了需要很長時間才能開啟應用程式。如今,處理器的速度越來越快,但我們卻找了各種理由編寫更糟糕的應用程式。

總結

我感覺自己目前的狀態就像是開始了一個新角色。也許將來我對C語言的看法也會和其他語言一樣。但值得慶幸的是,我堅信更進一步掌握C語言更加有價值。C語言是構建其他一切的基礎。也許我會發現 Rust 複雜的語法和規則是值得的。但我必須親自嘗試得出結論,而不是盲目地跟風,人云亦云。