C++之可怕,在於它可以反映人心

標題很玄。XDD
之前參加社群,聽見一位前輩,他們開公司不使用C++

他說「看見新人履歷上寫著會使用C++,我真的懷疑是不是真的會使用C++?」

其實,當下我在底下聽見這句話,還真不服氣。可見我當年多年輕氣盛,哈哈~~
不過,經過兩次看見同事的code(兩間不同屬性的公司)之後,我發現前輩講的話雖然用平凡的字,但是卻暗藏著高深的智慧。

其實,C++的多重寫作風格,是一件好事,但是在實現上,好與不好,也要看個人造化。

所謂「把事情做對≠做對的事情」

說來說去到底在說什麼呀?
再不說重點,就要按上一頁了?!><

我們把C++的寫作風格列出來,便可以開始說明白。

  1. C++ without OO(類似C語言)
  2. C++ with OO(類似Java)
  3. C++ template
  4. C++ generial

看看前兩種,C語言與Java的風格差非常的多
如果這兩種風格都出現在同一個專案中,時而看見一堆物件在跑,時而看見一堆function互call。這種精彩有趣的情況,應該只有C++的code獨享了。

那種Other類別的成員函數,也許就跟山一樣多(沒看到的話就可能是那些不屬於任何類別global function),程式設計師在設計它們時,不用去思考它們歸誰,這是C++的容許,也是C++的放縱,重覆使用的程式碼成為了function被創造的理由,而程式的概念整體性,不是被拋在腦後,就是從來沒有在大腦中出現過。

為了避免這種情況,Java為此而生,規範了種種限制,而造就了物件導向的另一個高峰呀。
注重概念整體性的OO寫作風格,讓每一個fucntion都歸到它們所屬的類別,如果聽到有人說「就是有些function到哪都可以用,而且不屬於誰呀?」的時候,就是該程式設計師幸運使用Java而不是C++避免造就另一個泥巴程式碼出現在世上,不過也許這樣的規範也可以使用Other Class讓自己落入另一個沈淪的泥巴,不過比起C++,Other Class算是好的(至少有被圈出來)。

會使用other class的程式設計師,對於問題的了解程度還不夠深入,所以才會出現無法歸納或無法命名的問題。

不過OO也不是這麼神。

還是有新的泥巴產生,就是God Object,這在維基百科還有介紹呢!什麼叫God Object?什麼是God?用基督教的角度來說(畢竟這一個詞是一神論的西方人創的,就不好意思用東方的角度來解釋god object了),God就是全知全能,創造萬物的那位....,如果我們把它抽象化,不就是other class了嗎?如果所有的物件都不存在,把所有的member value和member fucntion都放在god object的類別中,那麼god objcet也相當符合其概念呀(笑~)


Java為了阻止凡人幹蠢事,寫個程式卻把自己搞死了。就像是發展個科技卻用污染把自己毒死了一樣。只好加了種種的限制,強制要求coding style一定要OO。

而C++呢?

只能夠靠著程式設計師自我規範與自律,寫作的同時不斷的自省,是不是這樣寫是好的?
如果C++的程式設計師自得意滿的以為自己寫的程式碼超棒,大家都要跟,那麼可以看看程式碼便知道這個人的習慣與想法是怎麼回事了。(這麼神?)

quality正好和quick and dirty背道而馳。

所以下次有人讚美你寫程式很快時,記住!這只是讚美一半。
另一半也許就是對程式碼品質上的保留(不批評,但也不讚美)

沒有留言:

張貼留言

(什麼是留言欄訊息?)