標籤:

為什麼好多人說C++代碼丑?

是我審美有問題嗎?到底什麼叫美,什麼叫丑呢?我是不是審美有問題?_??


不知道,也許我是少數人,覺得 C++ 代碼挺好看的。大概我的審美標準是簡單、清晰、自由。

眾口難調,有人喜歡 {},有人喜歡begin/end,還有人喜歡只用 tab。

而一些點是美或丑也很難說,例如說符號多,APL 才多呢,也許有人覺得美(例子自[1]):

(~R?R°.×R)/R←1↓ιR

C++ 的一些功能,例如運算符重載,可以大幅簡化一些調用,以前我用 JS 寫一些矢量矩陣運算就很冗長難看。C++11 的 auto、range-based for 等也能簡化一些代碼。

但 C++ 的語法無疑比很多語言複雜,好多人(包括我)可能也會看不懂一些(特別是新標準的)代碼。

最後,我也只接觸過幾十種編程語言[2],審美能力或有待提升。

[1] APL (programming language)

[2] Milo Yip:作為一名程序員,你在編程的道路上一路走來都接觸過什麼語言?對你的程序員之路有什麼影響?


我覺得c++語法複雜是真的,但是要說代碼丑。。。那這應該是人為因素,寫的人菜雞


只要有ide幫你配色,什麼代碼都可以好看


因為他們除了說丑說不出任何其他東西了,而美醜是個人喜好,怎麼說都可以立於不敗之地。

很多人評判一段代碼,不是從它的功能性和可維護性上分析判斷,上來就先噴一句真tmd丑。這種人你基本上不用理會他,完全是牆頭草。你只要說這段代碼是主要邏輯和結構模仿了谷歌/阿里/百度/騰訊某開源項目中的某段代碼,或者說XXX項目中也是這麼運用的,保證他們立馬閉嘴。


符號太多是真的,特別是有一幫人還特別喜歡用下劃線,屎上加屎。但是如果以DRY作為標準的話,C++應該是第二好看的,沒有之一。


謝寶邀。

這個問題看標題就知道毫無回答的必要,如果不是被邀請,我不會回答這類問題。

無論你想要維護的結論是什麼,都沒什麼意義。如果你要問因何而為美或丑,那還值得講究說道說道。語言是一種工具,是你實現你的想法的工具,所以各種語言有各自的宗旨,有各自所長和所短。C++ 的設計宗旨為了追求性能和強大不厭其煩孜孜不倦睚眥必較,它並不是面向大眾的,而是面向精英碼農,它的學習難度最大,隨之而來的也會導致,概括的說,其代碼可讀性對普通人來說不會那麼友善。習慣了使用 C++ 代碼的人可能會覺得 C# 和 VB 醜陋,反之亦然,有人覺得性能重要,有人覺得性能無關緊要,開發起來舒服更重要,有人喜歡編譯型語言,有人喜歡見效快的解釋型語言,有人喜歡 C#,也有人喜歡 C++ 里嵌入彙編對 CPU 的精確操控,還有人喜歡耗費大量精力去造輪子怡然自得樂在其中,別人穿的舒服的鞋,你拿來套在自己的腳上,當然不舒服。

談代碼的美醜,這裡不狹礙的單獨指 C++,而是指代碼,就有多種層面,有代碼的表面呈現,例如代碼書面格式,命名,注釋等帶給人的觀感,也有代碼的內涵例如運行時效率表現,有代碼的可擴展性,可維護性,通用性,可移植性等,也有對於程序員來講的實現成本的高低。有的代碼容易寫出而效率可以接受,有的代碼運行時效率最高但開發成本過高,可讀性,通用性可維護性可能也會降低,這時的美醜就要看個人追求和側重去權衡定義了。同樣一個需求,實現只有方法方式方向,而從來沒有標準答案,對性能和代碼優美的追求就想擠海綿里的水,只要你願意提升,似乎是無止境的。在某個方面的優異表現,符合你的預期,是你所在意和追求的,那麼就會帶給你「美」感和主觀上愉悅的享受。這樣的代碼需要巧妙的實現技巧,數學基礎,對計算機和編譯器工作方式的深入理解,非常多的經驗積累和思考,具體的代碼的例子就沒必要去舉了。

丑的代碼千千萬萬,形形色色,簡而言之,就是對自我要求低的,愚蠢的,不負責任的,想當然的,敷衍的人,製造的代碼,就是丑的。甚至不能用的,錯誤的,難以維護的,稱為垃圾代碼,這樣的代碼往往會激起同行的憤怒。

同樣的語言,不同的人,生產的代碼各不相同,有人寫的美,有人寫的垃圾。又如何能一概而論 C++ 的代碼的美醜呢,這樣不是過於群體論了嗎,也不符合具體問題具體分析的唯物主義辯證法。當你靈光乍現寫出優美的代碼就好像見到了維納斯雕像欣喜若狂驚呼 amazing,而外人眼裡所見再怎麼說也是文本一堆。比如說薛大師生產的都是垃圾代碼,那麼你能因為一個人的愚蠢,而認為 C 語言的代碼就是丑的么,難道我們能像這樣的外行那樣談論代碼顯得不夠 C 或者因為函數返回一個宏定義就變得文雅了么。NO,那是因為高智商的人所能體驗到的美感,超過了平凡人的想像,是愚蠢的人永遠都無法體驗和達到的。


其實還好,如果盡量注意代碼整潔度 再加上設計的時候注意一些。還是可以的。

不過作為一個寫慣了C#的C++新手 還是很不習慣C++的語法的。當然java也不習慣。python還好。

寫C++全局作用域的那個 作用域和雙冒號 心理真是mmp

對頭文件真是 恨之入骨。因為要操心引入的問題。還有有時候會有衝突。(而且有時候衝突是在引入的文件裡面的 卧槽了,我新手唉,你報錯報在windows的一些源文件裡面,我根本不懂好伐,一般都是Google 找方案找不到就 各種試探企圖繞開,要不然呢 233)

對string 用哪個第三方庫有了選擇困難症。stl那垃圾string就是扶不起的阿斗。然而你要 獲得像C#裡面的string 的便利 真是一件太不容易的事了。

還有有些C++那一堆符號夾雜著宏的某些源碼 卧槽看到我心理 非常 mmp。

寫函數的時候要先寫聲明後寫實現 這也太坑了。而且要先聲明後調用,順序不能隨心所欲,我很不開心。

在windows下 各種string相關的坑 最近看到一個文章才稍微清楚一點。C++輸出中文字元(轉) - yjig - 博客園

總之,寫C++ 真是太操心了。

當然以上一切問題的源頭都是因為:我是菜雞。我承認。

論標準庫的重要性。

(標準庫是什麼?標準庫是一種約定。因為有了強大的標準庫,程序員們的代碼才更加雷同 你和別人才有得聊,快速看懂別人的代碼。)


用下劃線還是camel, Hungarian 都夠抬幾個死人出去了,長名還是短名,都夠拆遷幾個城市的。你說開這麼個貼幹啥,不是沒事教唆不良少年打架嗎?

我覺得沒人說自己的代碼丑,大部分大家遵守的關於命名的規範,都充滿了個人主義的偏見,就像100年前說華人是狗,現在說黑人智商低,綠綠是傻逼,這種屬於被水灌了腦子太多的偏見。我記得我以前打全局變數之前一定要打個g_,i32,f32這種漫天飛,反正前面沒有寫類型就不爽,後來就覺得這個沒啥必要,每個前面都加m_,只是手殘非這麼打。後來在不同環境大家使用規範不同也合作挺愉快的。

曾經看過一個民族審美的文章,關於性的。代碼也是這樣,看多了自己機構的代碼,看到不一樣的就想把他燒死。我以前對長名很反感,寫的多了,也覺得這件事不重要了。

凡是不影響閱讀速度的,那能叫丑嗎?閱讀速度不僅跟代碼有關係,也跟你的智商和所受的訓練有關。說標準庫丑的,你自己擼一個需要考慮不同os,不同設備的代碼也好看不到哪裡去,標準庫藉助工具至少是獨起來不困難的。


因為有很多人真的很喜歡用各種符號,看完真的想錘他


如果理解「丑」就是大家通常意義上的丑的話, 我覺得原因是多方面的

cpp的主要應用場景大多也都是效率敏感以及非常接近底層的事情 在很多時候極致的效率和更高抽象和「更美」的代碼的確是相悖的,你可能訪問控制不能做的那麼好,才能讓後面的運算利用前面的中間運算結果。你可能需要在代碼中顯式地瞎搞內存和指針,才能達到系統級別編程的最高效率,你可能需要一堆宏才能保證換個平台你的代碼不會爆炸等等。這種時候美醜可能也只能說是「相對」了的,功力深的程序員可能能做的只有「讓它不那麼丑」,跟諸如py這種業務邏輯語言來比可能自然是比不了

c++的哲學,以及標準一直在鼓勵的零開銷抽象,11以來標準庫想在編譯期就做完的事情越來越多,core language也很久沒有大規模更新OO特性了。你想要高層次的編譯期抽象?好看的DSL?好啊,拿尖括弧來換吧。應該沒人會覺得標準庫實現和TMP是傳統意義上的「好看」吧。即使你不是狂熱的TMP粉絲,日常sfinae也足以讓其它語言的用戶覺得莫名其妙了

另外就是「語法」的設計上可能確實對新手並不是很友好,曾經就有初學cpp的同學跟我吐槽為啥lambda長那個樣子,花了一番功夫跟他解釋花式捕獲的重要性...還有其它種種想必大家也有體會,雖然說不上是丑,平均意義上可能也沒有其它語言要「好看」. (我不覺得丑btw)

所以說我覺得一個抽象層次偏低的語言去寫代碼可能確實就更容易寫得比抽象層次高的語言更丑,你需要考慮效率,考慮平台,考慮莫名其妙的一堆東西,而別的語言就只管函數調用就是了。所以固然可能有程序員水平的問題,恐怕也達不到需要被人身攻擊的地步吧.


指針用多了就丑,少用指針像C++11風格這樣,就很好看了,有時候簡直可以賞心悅目


大概因為「好多人」菜吧


代碼好不好看,首先是命名,命名很難看沒有逼格冗長,那麼美觀度一下就降低很多,在此特別鄙視java和c#,命名無比冗長,一個類名或者方法名,可以五六十個字母,簡直噁心。

然後才是排版,適當使用){為一行,函數加參數注釋,代碼段之間適當加換行,等等等等。

最後,避免冗長代碼,避免多餘代碼,避免沒有營養的代碼,避免架構耦合太高,避免噁心代碼等等等等。

其實從代碼美觀度,就能淺顯的推測出一個人的逼格,菜雞寫的代碼就算再有技術含量,都很醜,而有逼格的人,代碼寫的再爛,看著也很好看,很有逼格。

個人之見,中國有大約一半的人寫的代碼都很醜,很沒有逼格,多去github看看人家寫的代碼的風格,命名,排版,看著多麼賞心悅目,再看看自己的項目代碼,一團糟。如果的有cpp碼農的不相信我說的,那麼請拿出自己現在手裡的項目,和boost代碼風格做下比較。

c++的代碼,我是推薦boost的代碼風格,除了類命名外,函數和變數一律不要駝峰,我個人也是拒絕大小寫同時存在於命名中,大大影響代碼美觀。

附加,如要要寫純c,那就更別要駝峰了,直接去參考nginx or linux內核 的源碼,什麼時候用大寫,如何排版,等等。


STL為了避免用戶瞎define用了一堆帶下劃線的名稱,確實丑,但是你自己寫代碼寫好看了就夠了


因為Cpp不是為美而生的。

只有外行人才評論它的花邊,內行人評論它的技術。


不關事,反正我用再好看的語言,都寫不出高效易用的代碼。

別說了,要哭

————————————————————————————

好吧主要意思是,這種好不好「看」根本不重要


估計是吃不到葡萄說葡萄酸吧


剛開始看是覺得挺丑的,看多了就覺得

.

.

.

.

.

.

丑得還挺別緻的!


因為葡萄是酸的。


看別人代碼的人: 我們是否越來越不願意花時間去理解別人? 同時

寫帶代碼的人: 也不知道如何清楚地表達自己?


推薦閱讀:

如何學好編程語言以及進行軟體開發?
Linux內核應該怎麼去學習?
如何使自己寫的編譯器生成可在 Windows 或 Linux 下直接運行的可執行文件?
為什麼C語言在printf內賦值有「不及時」的情況?
C/C++中按值傳遞比按地址傳遞更快嗎, 引用呢?

TAG:C | CC |