看板 Soft_Job 關於我們 聯絡資訊
※ 引述《sedgewick (三分熟的鬧鐘)》之銘言: : 事後我問他, 為什麼會定義成 DATA_SET_SIZE*4 這麼大的 storage size? : 他的答案也很妙:「提高安全係數. 」 : : 所以實際上程式員並不確定他會用到陣列的哪個部分. :D : : 推 uid88:程式寫成這樣,code review怎麼會過? : → sedgewick:整個事件的原因在於程式員的基礎知識有缺陷... 說到 code review 也有很有趣的事情. 我曾經遇過某個超級程式員. 英文非常破爛, 常常拼出莫名其妙的錯別字. 譬如會把 signal 拼成 single 之類的. 長一點的那是必敗無疑... 譬如 multicore_dispatcher 這種本來就很糊塗的字眼. 問題是他的產能是別人的十倍... 結果我就遇上其他的程式員跟我抱怨「能不能請他換一本正常的字典」. 因為錯久了, 大家都要跟著一起習慣那些怪字. 每個人都在擔心發生程式功力提升不多, 英文卻整個毀了之類的慘案. 偏偏又不能用 code review 卡住他. 他寫得更多、更快, 而且絕大部分情況都沒有問題. 寫到五維陣列都不會錯(這可以讓 99% 的 reviewer 消化不良. ) 純粹就程式邏輯而言, 被派去 review 的人都不會比他好... 你手上就是生不出第二個可以「趕上他的進度並修正他的工作」的人. 他只是不會拼字而已! :P 因此大家允許他使用一個很白爛的 house rule. int xxx; int xxxx; int xxxxx; 這種命名方式──我說的是 global variable naming convention!! 而且要有三個 x 以上... 當然用 a, b, y 之類的也無妨. 之後的悲劇嘛......大家可以猜猜看. 某天有個 xxxx 莫名其妙地被改掉. 當然第一個猜測都是, 「馬得這傢伙又拼錯字了. 」 但是很奇怪, 所有針對 xxxx 的存取都是正確的. 可是它就是在某些不知名的時刻會被改掉. 而且還是老問題, 只要加掛神器 gdb 的時候又一切正常. 最後查出來的結果嘛............勉強算是拼錯字. 只是他拼錯的不是 xxxx, 而是 xxx. 在某一個不起眼的角落, 有一個長得像這樣的東西... *((someptrtype *)&xxx + 1) = 20; 這裡面的 xxx 其實應該是 xx (昏倒了沒?) 被誤寫成 xxx 的 xx 是一個 local pointer... 偏偏還有個 global 的咚咚也叫 xxx, 是一個簡單的 type int.... 所以在某些 compiling condition 的情況下... 這個 &xxx + 1 會指到下一個 global variable 的位址, 也就是我們的苦主 xxxx. 到現在我還是不太確定要如何預防這一類的錯誤. 甚至我不太確定 valgrind 這種工具有沒有辦法完全識破這種錯誤. 說它是高級錯誤也不對, 明明只是拼錯字. 說它是低級錯誤嘛... 平庸一點的程式員隨便亂寫 pointer expression 那是當得一塌糊塗. 不會有什麼「明明程式跑得好好的, 就是結果怪怪的」這種. 因為連跑起來的機會都沒有. 話說這個 bug 印象中找了一個禮拜. 為了處理它, 還把整個 multi-thread 全部翻修成 single-thread. 當然是............沒用. 越高明的程式員, 犯下的錯誤越危險; 所以應該雇用猴子就好(誤). -- 新詩練習:新鮮。踩破初春裡的狗大便;不經意的滄桑,滿溢著嫩黃的喜悅。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.223.182 ※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1396086929.A.A27.html
mymaydayya:Find and replace錯字就好了為什麼要走到xxx那一步... 03/29 18:29
sedgewick:程度差不多的團隊才有機會修補錯字... 03/29 18:34
sedgewick:當你跟一個別字大王共事, 整份 code 有一半以上都很糊塗 03/29 18:35
sedgewick:你會直接說「阿鬼, 你還是說中文吧!!」 03/29 18:35
sedgewick:這就是為什麼最後會跟 xxx 這種命名妥協. 03/29 18:36
mymaydayya:至少也用aaa, bbb, ccc吧XD 03/29 18:40
sedgewick:那當然, 可是這些也全被用光了... 最多可以到八九個 x. 03/29 18:43
liteon:看到程式進步不多,英文卻整個毀了差點笑噴..XDDD 03/29 18:50
johnny1972:可以用一個支援中文變數名的語言來coding..... 03/29 18:52
sedgewick:這很慘烈的... Orz 03/29 18:57
GoalBased:1F的方法感覺很好阿... 03/29 19:50
lichai:replace不就好了…code review的成本花在效正英文,太浪費 03/29 19:56
void0:不是有重構工具? 03/29 19:57
void0:用XXX,XXXX,XXXXX 感覺也沒拼錯字高明 03/29 19:57
sedgewick:這個嘛, 所有的 refactoring 都要求特定的 framework. 03/29 20:02
sedgewick:問題是你的團隊不見得可以接受那些 framework 的限制 03/29 20:03
sedgewick:至於 search and replace 哦... 當你要換的東西太多時. 03/29 20:04
sedgewick:會換出一大堆非常科科的結果. 03/29 20:04
sedgewick:而且最糟糕的是, 這些都還是沒辦法避免文中的錯誤 03/29 20:05
sedgewick:只是「也許」發生時比較不會眼花繚亂而已, 也許哦... 03/29 20:05
sedgewick:不信的話請隨便開一個程式, 一千行左右的就好... 03/29 20:07
sedgewick:把裡面最常出現的變數, 譬如說 t 好了, 換成 t0... 03/29 20:07
sedgewick:只換這樣就好了, 看看會有什麼結果... 03/29 20:08
lichai:這種常見的case不是find和replace的字串前後加空白不就好了 03/29 20:11
sedgewick:其實不是, 因為會有人寫 "t," 然後換行... 呼叫函數時. 03/29 20:15
sedgewick:另一件事情是要確定是不是有其他的地方藏著 t0. 03/29 20:16
sedgewick:當然還可以 find a word, 問題是你也會換到字串裡的 t. 03/29 20:16
sedgewick:然後像 macro 裡面的 t, 這個該不該換?(通常是不該) 03/29 20:18
sedgewick:總之如果只跑個 sed 把所有的 t 換掉, 通常是會死的. 03/29 20:19
lichai:變數replace真的沒有那麼複雜,百萬行的程式碼也還好 03/29 20:20
sedgewick:還是老問題, 有 framework 罩著的不難... 一般的很難. 03/29 20:22
qrtt1:請個工讀生幫他改錯字好了(默 03/29 20:32
sedgewick:啊咧! 有道理耶, 我當初怎麼沒想到... 03/29 20:35
ggg12345:可能不是沒想到,很大可能是成見太深. 03/29 20:54
sedgewick:科科, 繼續留著錯字這招我們也不是沒想過... 03/29 21:00
sedgewick:既然說這叫成見太深的話, 我想問這會引發什麼問題? 03/29 21:01
sedgewick:可以猜猜看, 文中我寫到一些... 但是還有另外一些沒寫的 03/29 21:01
y3k:XDDDDD 03/29 21:15
focusardi:你們應該請一個工讀生坐在他旁邊,專門看他命名變數 03/29 21:36
focusardi:反正他產能是別人十倍,多花一個工讀生的錢應該是小case 03/29 21:38
sedgewick:是啊, 所以才說請個年輕貌美的拼字秘書是個好方法(誤) 03/29 21:53
qrtt1:開始練習拼錯字 (握 03/29 21:54
GoalBased:想太多了..10倍 工讀生不用給錢喔 03/29 22:15
GoalBased:讓他轉技術顧問可能比較實在 03/29 22:26
sedgewick:Steve Jobs 的說法是「十倍到一百倍」... :P 03/29 22:26
sedgewick:連拼字都有問題, 轉技術顧問會被欺負啦... 03/29 22:27
kinanson:用google翻譯就好了啊,複製貼上絕不會有錯字,頂多是文 03/29 22:34
kinanson:法怪 03/29 22:34
descent:你就饒了他吧, system call creat 都能拼錯了 03/29 22:43
sedgewick:的確是很經典的 creat() 啊... 03/29 22:58
guestciel:好有趣的案例 XD 03/29 23:02
uranusjr:這時候就是要引入漢語拼音命名法! 03/29 23:12
sedgewick:答對了, 漢語拼音這招勉強有效!! 真的... 03/29 23:16
sedgewick:不過大家都會很白爛地寫幾個 xiao3gou3() 之類的函數. 03/29 23:17
sedgewick:或者 chang2jing3lu4(), 長頸鹿是也... 03/29 23:17
sedgewick:說實在地有點礙眼就是了. 03/29 23:17
okstephen1:長頸鹿太好笑了吧XDD 03/29 23:59
mephiliu:題外話:這個簽名檔好熟悉, 是台大DR的元老嗎? 03/30 00:19
sedgewick:啊咧, 竟然有人知道 DR 這個東西............ 03/30 00:21
sedgewick:簽名檔從沒換過, 但是帳號常因為發呆被砍了又砍就是了. 03/30 00:22
guestciel:試試 pair programing? 03/30 10:22
Wishmaster:很詭異,英文再差,寫久了應該也會背起來吧?? 03/30 11:25
sedgewick:年輕貌美的拼字秘書也能算成 pair programming 嗎?:D 03/30 11:55
sedgewick:至於拼字哦, 背得起來的人其實就是拼字還不夠差... XD 03/30 11:57
sedgewick:不要說我講的那個超級程式員了... 03/30 11:58
sedgewick:連我自己拼 encapsulation 每次也都要靠字典啊~~~ 03/30 11:59
mephiliu:我是B83開頭的~剛好是DR開始擴張時......只是忘了 03/30 14:35
mephiliu:您是哪位大大~ 03/30 14:35
sedgewick:啊... 這個都十幾年前了! :o 03/30 16:03
viper9709:推一樓~~而且拼字不是基本功嗎@@ 03/30 22:11
singlovesong:B83......現在都B03了XDDDDD 學長晚安 03/31 16:57
Assyla:creat很經典 03/31 23:08
troylee:為什麼我覺得我認識這個人 @@a 04/02 01:34