笨辦法學C 後記:「解構 K&R C」 已死

「解構 K&R C」 已死

原文:Deconstructing K&RC Is Deadhtml

譯者:飛龍git

我完全失敗了。我放棄了多年以來嘗試理清C語言如何編寫的想法,由於它的發明是有缺陷的。起初,個人書中有一章叫作「解構 K&R C」。這一章的目的是告訴人們永遠不要假設它們的代碼是正確的,或者對於任何人的代碼,無論它有多出名,也不能避免缺陷。這看起來彷佛並非革命性的想法,而且對我來講它只是分析代碼缺陷和編寫更好更可靠代碼的一部分。程序員

多年以來,我在寫這本書的這一塊時收到重挫,而且收到了比任何其它事情更多的批評和侮辱。不只如此,並且書中這部分的批評以這些話而結束,「你是對的,可是你認爲他們的代碼很爛這件事是錯的。」我不能理解,有一羣被認爲很聰明的人,他們的大腦中充滿理性,卻堅持「我能夠是錯的,可是同時也能夠是對的」的觀點。我不得不與這些學究在C IRC channels、郵件列表、評論上鬥爭,這包括每個它們提出一些怪異的、迂腐的刻薄意見的狀況,須要我對個人文章進行更多的邏輯性修改來講服他們。github

有趣的一點是,在我寫這部分以前,我收到了本書許多正面的評論。當時本書還在寫做中,因此我以爲確實須要改進。我甚至設置了一些獎金讓人們幫助改進。但可悲的是,一旦他們被本身的英雄矇蔽,所崇拜的基調就發生了翻天覆地的變化。我變得十分使人討厭,只不過是嘗試教人們如何安全使用一個極易出錯的垃圾語言,好比C語言。這是我很擅長的東西。編程

這些批評者向我認可,他們不寫C代碼也不教授它,他們只是死記硬背標準庫來「幫助」其它人,這對我來講並不重要。我以一個開放的心態試圖解決問題,甚至設置獎金給那些有助於修復它的人,這也不重要。這可使更多的人愛上C語言,而且使其它人入門編程,這更不重要。重要的是我「侮辱」了他們的英雄,這意味着我所說的話永遠地完蛋了,沒有人會再次相信我。安全

坦率地說,這是編程文化極爲的黑暗、醜陋、邪惡的一面。他們成天在說,「我與大家同在」,可是若是你不屈服於大師們海量的學識,以及乞求他們准許你質疑他們所信奉的東西,你忽然就會變成敵人。程序員費盡心機地把本身放在權力的寶座上,來要求別人讚許他們高超的記憶能力,或者對一些微不足道的雜事的熟知,而且會盡全力消滅那些膽敢質疑的人。編程語言

這很是噁心,我對此也沒什麼能作的。我對老程序員無能爲力。但他們註定會失敗。它們經過標準化記憶所積累的學識,也會在鹹魚的下一次翻身中蒸發掉。它們對考慮如何事物的運做方式,以及如何改進它們,或者將它們的手藝傳授給他人毫無興趣,除非這裏面涉及到大量的阿諛奉承並讓他們以爲很爽。老程序員總會完蛋的。學習

他們向如今的年輕程序員施壓,我對此並不能作任何事情。我不能阻止無能程序員的誹謗,他們甚至根本不像專業的C程序員那樣。然而,我寧願使本書有助於那些想要學習C語言以及如何編寫可靠的軟件的人,而不是和那些思惟閉鎖的保守派作鬥爭。它們貪圖安逸的行爲給人一種感受,就是他們知道更多迂腐的、可憐的小話題,就好比未定義行爲。指針

所以,我刪除了書中的K&R C部分,而且找到了新的主題。我打算重寫這本書,可是並不知道如何去作。我猶如在地獄中,由於我本身很是執着於我以爲很重要的一些事情,但我不知道如何推動。我如今算是明白了這是錯的,由於它阻礙我將一些與C不相關的重要技巧教給許多新的程序員,包括編程規範、代碼分析、缺陷和安全漏洞的檢測,以及學習其它編程語言的方法。code

如今我明白了,我將爲這本書製做一些課程,關於編寫最安全的C代碼,以及將C語言代碼打破爲一種學習C和編程規範的方式。我會卑微地說個人書只是一個橋樑,全部人應該去讀K&R C來迎合這些學究,而且在這些黃金法則的腳下頂禮膜拜。我要澄清個人C版本限制於一個固定的目的之中,由於這讓個人代碼更安全。我必定會提到全部迂腐的東西,好比每一個書呆子式的,關於20世紀60年代的PDP-11電腦上空指針的要求。

以後,我會告訴人們不要再去寫別的C程序。這不會很明顯,徹底不會,但個人目標是將人們從C帶到能更好地編程的其它語言中。Go、Rust或者Swift,是我能想到的能處理C語言主要任務新型語言,因此我推薦人們學習它們。我會告訴他們,他們的技能在於發現缺陷,而且對C代碼的嚴格分析將會對全部語言都有巨大的好處,以及使其它語言更易於學習。

可是C呢?C已經死了,它是爲想要爭論A.6.2章第四段的指針未定義行爲的老程序員準備的。謝天謝地,我打算去學習Go(或者Rust,或者Swift,或者其它任何東西)了。

相關文章
相關標籤/搜索