在C++復雜性裡面這樣的情況很多見:知道了語言實現的底層機制,卻不知道語言特性本身的意義在什麼地方,C++的復雜性是根本原因”是個有漏洞的推理呢?
正如“Why C++”的一位讀者批評的,我在文章裡面沒有寫明到底哪些是C++的“非本質復雜性”。當然,我自己憑感覺就能知道,而接觸C++一段時間的人大致也能知道,但新手乃至非新手則對我所謂的“非本質復雜性”根本沒有一個具體的認識,這就使得那篇“Why C++”脫離了原本的意圖——面向所有C++使用者和學習者。
同樣的原因,在寫了“你應當如何學習C++”一文之後,當孟巖先生邀請我給《程序員》寫一個系列的文章,介紹一下我在接觸C++的過程中的態度和認識轉變時,我雖然非常高興的答應了,但直到現在3個月過去了還是顆粒無收。
為什麼?因為我覺得真正本質的問題沒有被清晰的觸摸到;所以直到現在我都沒有動筆,免得廢話說了一大堆,除了能被當成小說讀讀之外,對真正考慮是否要學習乃至使用C++的人未必有什麼實際用處。
然而,這麼個念頭一直都放在潛意識裡面。前一陣子和Bjarne通信,談到了關於C++復雜性的一些想法,在郵件裡面總結了一下C++的復雜性來源,感覺思路清晰了許多。。而這篇文章要達到的目的,正是傳達對C++的復雜性的一個具體而明確的認識,有了這個認識作為支持,我們便可以推導出學習C++的最佳實踐者)的方法。
底線是:如果把C++中的諸多不必要的復雜性去掉,留下那些本質的,重要的語言特性,簡化語言模型,消除歷史包袱。即便是C++的反對者也許也很難找到理由說“我還是不用C++”。
在我看來,一個真正從實踐意義上理性反對使用C++的人只有一個理由:C++的復雜性帶來的混亂抵消乃至超過了C++的抽象機制和庫在他的特定項目中)帶來的好處。 值得注意的是。
這裡需要避免一個陷阱,就是一旦人們認定了“C++不好”,那麼這個理由就會“長出自己的腳來”,即,就算我們拿掉C++的復雜性,他們可能也會堅持還是不用C++,並為之找一堆理由。
我假定你不是這樣的人。不過,也許最可能的是他會說:“問題是我們今天用的C++並非如此簡潔),你的假設不成立。”是的,我的假設不成立。但雖然我們無法消除復雜性,我們實際上是可以容易地避開復雜性,避短揚長的。這也是本文的要點,容我後面再詳述。
那為什麼我說“C++的復雜性是根本原因”是個有漏洞的推理呢?因為,要讓人們在使用一門語言去做事情之前耗上大量時間去學習語言中各種復雜性,除了語言本身的復雜性的事實之外。
還有一個重要的事實,那就是學習者的態度和更重要的)方法。而目前大多數C++復雜性學習者的態度和方法是什麼呢?——在真正用C++之前看上一摞語言書日常編程八輩子都未必用得到)。而為什麼會存在這樣的學習態度呢?這就是真正需要解釋的問題。實際上,有兩方面的原因。
在C++復雜性裡面這樣的情況很多見:知道了語言實現的底層機制,卻不知道語言特性本身的意義在什麼地方。本末倒置。為什麼?書害的。二,這類書當中介紹的所有情景加起來其實只屬於那20%二八法則)。
甚至20%都不到的場景究竟是哪些書,後面會介紹,我不便直接列出書名,打擊面太大,但我會把我認為essential的書列出來)。這就是為什麼我說“八輩子都用不著”的原因。