"叔叔建議我遠離 Python,從組合語言學起......"

"叔叔建議我遠離 Python,從組合語言學起......"

整理 | 鄭麗媛

出品 | 程式人生(ID:coder_life)

據歷史悠久的組合語言是程式設計師最討厭的程式語言(佔比 37%),其次便是 C++(17%)和 C(16%)。

作為一門面向機器的程式設計語言,組合語言固然十分精細,但對於程式設計師而言卻不太友好——不好記憶,裡面也沒有指標的概念,所有的變數、函式都由棧或堆上的偏移地址所代替。與高階程式語言相比,彙編在可讀性、開發效率和可移植性上顯然存在不足。

所以,我們自然覺得:都 2022 年了,在眾多高階程式語言的包圍下,還會有人將彙編作為程式設計師入門的第一個程式語言嗎?有的,前陣子一位 Reddit 使用者(以下用“小 R”代稱)就發帖稱:“我的叔叔,一位前程式設計師,建議我從組合語言學起……”

"叔叔建議我遠離 Python,從組合語言學起......"

建議原因:應該先敲下最難的“釘子”

小 R 表示,TA 最近對學習程式設計有點興趣,因此找了之前做程式設計師的叔叔,想問問有啥入門建議,結果 TA 叔叔開口就是:“一定要遠離那些簡單的高階程式語言,如 Python 或 Ruby。”

叔叔對小 R 解釋道,當年他第一次學習基礎程式碼時,一度認為自己是個天才,因為他幾天內就很好地掌握了新技能。直到後來他又接觸到了 C 語言,才完全顛覆了他的自我認知——他被“狠狠”難住了一段時間,而且之前掌握的那些基礎技能在學習 C 語言上完全沒用。

“簡單的程式語言顯然不會教你任何關於程式設計和計算機究竟是如何工作的知識。你現在還年輕,有一個能吸收很多知識的‘海綿大腦’,還有許多網際網路指南可參考,你應該先敲下最難的‘釘子’,把彙編或者 C 作為第一門語言,以便之後對任何事情都可以輕鬆學習。”

"叔叔建議我遠離 Python,從組合語言學起......"

(圖片下載自視覺中國)

不必對高階程式語言避之不及

顯然,小 R 叔叔的這番言論跟現實中大多程式設計師的選擇相悖,小 R 也因此茫然地將問題拋給了廣大網友:“你們對此的看法是什麼?”

部分網友認為,能說出這種觀點的“叔叔”肯定是大齡程式設計師:

“他告訴你要以一種他自己都沒嘗試過的方式去做,而這個觀點彷彿來自 30-40 年前。”

“你叔叔太老派了。如果他是在 1980 年之前畢業的,那可以理解,畢竟彙編在當時很常見。但到 1990 年以後,已經逐漸有更多的選擇了。”

有網友調侃道,這種學習方法太過於“追本溯源”了:

“這感覺就像是說,在你開車之前,你首先要知道它的每一個部分是如何工作的。”

“既然這樣,那就先學半導體物理,然後學電晶體,然後是 CMOS 邏輯,然後是邏輯閘,然後是數位電路,然後是計算機構成,這樣更能彰顯你叔叔的‘厲害’。”

話雖如此,但每一門程式語言能流傳至今,必定有其的意義,彙編也是如此,現在作業系統中依舊還有彙編的身影。被許多程式設計師厭惡的組合語言,更適用於底層硬體,如微控制器、工業控制、實時控制等,它更為精簡,執行效率也更高。

兩年前,曾有一位學過彙編的程式設計師分享道:

”我也學過彙編,做一個程式要寫好多條命令,而且思路要清晰,對程式設計師智商要求非常高。我以前單位有幾個八十年代大學畢業的程式設計師,智商真的是非常高。現在的程式設計真的很傻瓜化,從沒學過程式設計的短期內也能很快自學程式設計。“

平心而論,學好彙編確實能深入理解計算機底層原理,但這並不意味著就一定要對高階程式語言避之不及——如今,高階程式語言的開發效率、適用範圍都遠超過彙編,更符合現在企業所追求的高效。

最後引用一位網友的建議:“如果你想成為編譯器開發者或硬體工程師這類人,你可以好好學彙編;但如果你只是從事軟體開發,最多根據自身能力適當瞭解一下彙編即可。”

那麼,作為程式設計師的你,接觸並學習的第一門程式語言是什麼呢?

參考連結:https://www。reddit。com/r/learnprogramming/comments/wedgo2/my_uncle_a_former_programmer_has_recommended_that/