Calendar

十一月 2009
« 十月   十二月 »
 1
2345678
9101112131415
16171819202122
23242526272829
30  

Categories

傳 pointer 就是 pass-by-value 這件事是要重複講幾遍

台灣真的是太多老師喜歡亂教了,
結果每年都有學生以為傳 pointer 就是 pass-by-address (即 pass-by-reference)。
後來發現初學者常搞不清楚的原因就是被那些星號給迷惑了,
所以把星號藏起來講就簡單了。

意思完全一樣,
只是換一種寫法而已。
會說這個不叫 pass-by-value 的人就減少了一大半,
如果我蓋掉最上面的 define 跟 typedef 那幾乎不會有人說 這是 pass-by-address 了。
所以結論就是一堆寫書的亂寫、教書的亂教,
不曉得這能不能當成商品重大瑕疵要求退書錢或學分費?

這麼多年看下來實在是有點火大。

  • 很多人都搞不清楚,我之前在某國立大學研究所的課程提出來過
    大家還一臉狐疑,還有人跟我說 VC++ compile 會失敗,所以我錯 XD
    這世上的 compiler 又不是只有 VC++

    路過,忍不住說一下

    • 丟到 Comeau C++ 官網去 compile 才比較準,
      VC++ 的公信力沒有那麼大。
      不過現在很多腦殘現象我都丟一句你高興就好,
      也懶得跟他們辯下去了。

      我大學的老師也是在 113 從大學一路升到博士班畢業的,
      跟他講的時候他也是不信,
      結果是等到他的指導教授從 113 退休跑到我們大學來教書後才得以平反。

      至於國立大學私立大學這種事,
      我讀過私立科大的前段、國立普大中段、國立普大前段,
      應該是最有資格評論的。

      基本上台灣的教育評鑑制度確確實實的存在很大的問題。
      單就資工系來說,
      真正有實力的其實不分科大普大國立私立,
      每班頂多就是只有那兩三個,
      而且他們的成績排名未必就是落在班上/系上前段。

      不過也不能否認,
      成績排名落在前段的跟落在後段的實力還是有層次上的差異,
      畢竟大學已經是專門的科系了,
      專業必修課程都具專業指向性,
      分數這種東西就變得比較有意義了些。
      只是就台灣業界目前的技術水平需求而言,
      這兩者是無法區分出差異的,
      特別是在不懂技術的人眼裡更是如此。

      技術講半天也聽不懂或聽不進去的,
      東西做了幾個月結果什麼東西都沒有也講不出做過什麼的,
      不管在哪間學校裡佔的比例都大同小異,
      這已經是一種常態。

      所以碰到一些在國立大學或知名大企業裡有類似你這樣遭遇的人講這種事,
      我也只能說習慣就好。

  • 甲乙丙

    是你腦殘而已.
    傳pointer 實作上傳的是variable 的address , 所以傳的是value.
    但哪是實作C 的人的看法, 對一般的programmer 來說, 我只管它calli 內的改變會
    影響到caller, 這反應跟pass-by-address 一樣即可.

    • 請勿降低「一般 programmer」的格調,謝謝合作。

      我小學開始寫 C,就知道它是 by value,書上也是寫 by value。
      會碰編譯器實作也是國中想自製語言和寫直譯虛擬機器罷了,但當時知識有限,真正碰編譯器實作是大學以後的事。
      誰沒有當過一般的 programmer?不要騙人沒當過一般的 programmer。
      傳入的 type 相同就是 by value,這有很難懂?
      typedef 一下看上去很明顯就是 by value,而且這種 typedef 在 C 程式裡還是隨處可見。

      設計語言和實作編譯器的人在思考的問題,更不是這種使用者層次的東西。
      所以很不好意思,這篇完全是以一般 programmer 的角度來看問題。
      我只能說,連使用說明書都看不好怪誰?

      一堆人也是以為 runtime stack 和 activation record 這類東西是寫 compiler 的人才要懂的。
      結果程式當掉沒人幫忙,自己跑去開 debugger 來看 stack frames,才整個人傻在那邊,去找別人幫忙。
      然後自己當初不願意認真學所應該付出的代價,又轉嫁給當初願意認真學的同事或同學,徒然增加社會成本,還不知羞愧。
      每次 MSN 一開,就會聽到一些學弟還是朋友在抱怨同事當年沒學好,現在學習態度又不佳,搞出一堆問題讓他擦屁股。
      但是為了公司的和諧氣氛,他們都不好意思當場開罵,只能回家上線找我或其他人吐苦水。
      這類案例已經多到我聽得耳朵都長繭了。

      「一般的 programmer」絕對不會有這種膚淺的想法。
      只是在台灣,「一般的 coder」太多,業界卻還是給他們掛上工程師之類的頭銜,讓他們忘了自己實質上是 coder。
      實際上,也是有很多 programmer 跑去做 coder 的工作,但不知道自己的工作內容是 coding 而不是 programming。
      結果造成這個人跟團隊和公司適應不良,覺得大家都不會規劃程式,還聯合起來排擠自己。
      這個理由非常簡單,因為台灣多數的公司等級根本就太低,要收的根本就是 coder。
      這位 programmer 找了不適合自己的工作,卻又不願意降低程度跟 coder 合作,那結果當然就是以多數暴力收場。
      這就像一位文明國家的人,跑去落後國家的部落,和他們村民還有巫師說他們很迷信,那他不會出事才奇怪。
      然而就算他死在那邊,要怪的也是他,而不是那些村民和巫師。
      因為去那邊,以及在那邊說那種話,都是他自己選的。

      上面廢話這麼多,難道我是想說「一般的 coder」就會不在意這些東西嗎?當然不是。
      因為在台灣,雖然「一般的 coder」真的很多;但事實上,素質低落、水準糟糕的 coder 更是多如繁星。
      所以我真正要說的東西,雖然繞了很多彎,但也已經不言而喻了。