看板 terievv
作者 標題 標題 [閒聊] 一個函式2000行, 一個if 300行
時間 2015-06-14 Sun. 02:29:18
看板 Soft_Job
作者 標題 [閒聊] 一個函式2000行, 一個if 300行
時間 Wed Jun 10 11:07:59 2015
本人看過各類型的程式,但最近看一個程式讓我
嘆為觀止... 一個cpp檔就將近5萬行,這也就算了,
一個函式高達2000行,光是一個if()裡面就有300行,
一個for()裡面有1500行,這是我看過最大的for迴圈,
而且還有很多goto... 你們遇過類似的程式嗎?
--
Sent from my Android
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.15.50.91
※ 文章代碼(AID): #1LTweIjx (Soft_Job)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1433905682.A.B7B.html
推 : 好想見識一下......1F 06/10 11:10
推 : 絕世高手!!!2F 06/10 11:12
※ 編輯: guest0970 (101.15.50.91), 06/10/2015 11:14:45推 : 沒有最爛,只有更爛XD3F 06/10 11:15
推 : 看到"還有很多goto"我就跪了4F 06/10 11:16
推 : 我討厭金字塔......6F 06/10 11:21
推 : 我們公司則是有另外一個天才致力於把code的行數縮得很短7F 06/10 11:22
→ : 變數命名寫的過度詳盡,大量使用三元運算子和物件存取
→ : 每行的字大概都是三四百起跳,沒人看得懂沒人能維護
→ : 還沒用變數混淆器就比混淆器效果還好,整個養code自重
→ : 變數命名寫的過度詳盡,大量使用三元運算子和物件存取
→ : 每行的字大概都是三四百起跳,沒人看得懂沒人能維護
→ : 還沒用變數混淆器就比混淆器效果還好,整個養code自重
推 : 養code自重 XDDD11F 06/10 11:35
推 : 5萬行還好,超過65535行會編譯錯誤12F 06/10 11:41
→ : 再加把勁就能逼進65535了!!13F 06/10 11:49
→ : 為什麼超過65535會編譯錯誤阿?14F 06/10 12:00
推 : 不是腦渣,就是人渣15F 06/10 12:04
→ : 程式很大,但一堆沙拉油桶跟保麗龍在裡面
→ : 怕別人發現,就把它弄得很亂
→ : 這是人品的問題,要是我一定把它開除
→ : 程式很大,但一堆沙拉油桶跟保麗龍在裡面
→ : 怕別人發現,就把它弄得很亂
→ : 這是人品的問題,要是我一定把它開除
推 : 我們公司之前也是有code寫到超龐大的看不懂的 後來被fire19F 06/10 12:10
→ : 很明顯是公司問題..20F 06/10 12:13
推 : 看過 但是沒你那麼慘 會變這樣跟主管有很大的關係21F 06/10 12:41
→ : 通常這樣寫還能上線...大概是主管或後台硬的人寫的22F 06/10 12:45
→ : 不要換行就很短了阿@@23F 06/10 12:52
推 : 之前接離職同事的code,程式碼就一個.cpp,一個.h ....24F 06/10 12:53
→ : 裡面包山包海,cpp有四萬多行,header也有一萬多行.....
→ : 再看main function.... 嗯...不愧是main! 2萬多行!
→ : 裡面包山包海,cpp有四萬多行,header也有一萬多行.....
→ : 再看main function.... 嗯...不愧是main! 2萬多行!
→ : 最近寫API 主要class 1000行就有點受不了了27F 06/10 12:58
→ : 有遇過(茶)28F 06/10 13:02
推 : 糟了,是世界奇觀29F 06/10 13:08
→ : 說不定故意彙整起來要整公司 XD30F 06/10 13:09
推 : 離職工程師的逆襲?31F 06/10 13:27
推 : 糟了,是世界奇觀32F 06/10 13:31
推 : 2年前寫了一個網頁html碼和cs個別7千多行 至今羞愧不已33F 06/10 13:41
→ : 3個同事自告憤勇要改寫 至今3週 一個功能都改不出來
→ : 只能說解鈴還需繫鈴人 這種修改神作的事
→ : 還是必須讓神作創造者出來解決
→ : 3個同事自告憤勇要改寫 至今3週 一個功能都改不出來
→ : 只能說解鈴還需繫鈴人 這種修改神作的事
→ : 還是必須讓神作創造者出來解決
推 : 神作不是一個人可以寫出來的37F 06/10 13:50
推 : 太屌惹~這樣在公司就不容易被取代了.因為根本無法交接XDD38F 06/10 13:52
推 : 一個func兩百行我就受不了了..一定很沒競爭力39F 06/10 14:19
推 : 一定有看過 How To Write Unmaintainable Code40F 06/10 14:33
→ : 不要出現{{{{{{{{{{'_'}}}}}}}}}}就都還好41F 06/10 14:50
推 : 以前公司有整份code只有一個function,,,42F 06/10 14:54
推 : 我也在改一個整份7000多行 裡面大概有 1000個goto的程式43F 06/10 16:02
→ : 比爛比不完啊,這就是年久月深+眾志成城的結果啊44F 06/10 16:46
→ : 主管問題比較大吧…45F 06/10 17:41
→ : 這種code主管還讓你merge 真冏46F 06/10 18:26
推 : 太強XD47F 06/10 18:49
推 : 想問為何超過65535會compile error?48F 06/10 19:26
推 : 應該是超過65536個methods才會編譯失敗,但這是可解的49F 06/10 20:09
推 : 只能說 我看過直的怪物 也看過橫的怪物.......(淚50F 06/10 20:14
推 : 但反過來也有一堆神經病 把那堆大師的書當聖經讀 但寫出51F 06/10 21:01
→ : 來卻完全不是那麼一回事 clean code clean到走火入魔 脫
→ : 褲子放屁生了一堆多餘的函數 只為了包幾行程式碼 函數數
→ : 量大爆炸
→ : 來卻完全不是那麼一回事 clean code clean到走火入魔 脫
→ : 褲子放屁生了一堆多餘的函數 只為了包幾行程式碼 函數數
→ : 量大爆炸
推 : 貴公司沒有教育訓練或者規定coding風格嗎?????????????55F 06/10 21:16
推 : 因為大多文化把R&D工作態度都當成捧LP的態度56F 06/10 22:19
→ : 而不是實際工作上執行的結果
→ : 而不是實際工作上執行的結果
推 : 很多外包的、不用團隊合作的, 寫出來的code都這樣...58F 06/10 22:39
→ : 反正能幫老闆解決問題的就是好code!
→ : 反正能幫老闆解決問題的就是好code!
推 : 很強啊XD60F 06/10 23:10
→ : 公司付的錢只買得起會動的code啊 高品質的code不用錢逆61F 06/10 23:17
→ : 不要去怪為什麼會有這種code的存在 它是合理的產品
→ : 要怪就怪你沒眼光沒本事拿少少錢為這公司處理技術債
→ : 找好的公司待 有入流的員工和管理就不用再看到這種code
→ : 不要去怪為什麼會有這種code的存在 它是合理的產品
→ : 要怪就怪你沒眼光沒本事拿少少錢為這公司處理技術債
→ : 找好的公司待 有入流的員工和管理就不用再看到這種code
推 : 那種code很可能是一代接一代,逐代漸近成為巨大恐龍,愈是後65F 06/11 00:53
→ : 面的人愈難去動,就算把原著們找回來,只怕也改不動了
→ : 另外這種維護code的事很容易遭遇到[人亡政息]的情境,只要當
→ : 時維護夠力的人離職了,又沒交接清楚,後面不會有人想去碰,就
→ : 一直擱到現在你所見的情形了
→ : 面的人愈難去動,就算把原著們找回來,只怕也改不動了
→ : 另外這種維護code的事很容易遭遇到[人亡政息]的情境,只要當
→ : 時維護夠力的人離職了,又沒交接清楚,後面不會有人想去碰,就
→ : 一直擱到現在你所見的情形了
→ : 只為了包幾行code生出一堆func有什麼問題嗎?70F 06/11 07:39
→ : 我覺得只要符合需求都是合理的阿 不只維護性是需求 時間也是71F 06/11 09:36
→ : 需求 當你沒那麼多錢卻要時間那麼短的時候 做出爛貨剛好而已
→ : 需求 當你沒那麼多錢卻要時間那麼短的時候 做出爛貨剛好而已
推 : 高品質的程式碼很花錢,很多老闆只想出會動的錢。73F 06/11 12:16
→ : 老闆只對金錢遊戲財務操作有興趣 這種硬底子活還要他掏錢想74F 06/11 21:23
→ : 得美
→ : 得美
→ : 5萬行還好啦,看過VC++ source tree 300MB 的 (笑)76F 06/12 02:23
推 : 我主要class大概600行吧 不能超過100077F 06/12 04:08
推 : 我維護的code雖然沒你這麼慘 但也快吐了 整個義大利麵..78F 06/13 00:08
看板 Soft_Job
作者 標題 Re: [閒聊] 一個函式2000行, 一個if 300行
時間 Wed Jun 10 19:31:16 2015
※ 引述《guest0970 (guest)》之銘言:
: 而且還有很多goto... 你們遇過類似的程式嗎?
俗語說:存在的就是有他的道理
如果上面這句話成立
那為甚麼大家討厭的 goto 這個功能會繼續保留呢?
明明就會把程式結構搞亂(每本書都這樣講,...也建議不要用goto)
, 那為甚麼不從源頭把 goto 取消?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.167.190.1
推 : 為了相容1F 06/10 19:31
※ 編輯: bota (1.167.190.1), 06/10/2015 19:35:44→ : goto沒這麼萬惡2F 06/10 19:39
→ : goto不是不能用而是要謹慎使用3F 06/10 19:42
推 : 萬惡 goto,用者死4F 06/10 19:44
→ : C之後的程式語言,很多都把goto語法拿掉了5F 06/10 19:56
推 : goto可以用 但是不要濫用6F 06/10 19:59
推 : 相容7F 06/10 20:02
推 : Linux kernel 滿天的goto,不要把goto妖魔化了~8F 06/10 20:36
推 : 嵌入式常用 goto9F 06/10 20:37
推 : 其實像Java就沒有goto,但是還是把他放保留字10F 06/10 20:57
推 : C的goto很常見11F 06/10 21:02
→ : C 做 error handling 有時候沒有 goto 反而更難懂12F 06/10 21:03
推 : 破壞最佳化的副作用 有時候是好處13F 06/10 21:04
→ : Linux kernel的goto也幾乎只拿來做init/destroy就是了14F 06/10 21:07
→ : 對樓上那句看的不是很懂15F 06/10 21:07
→ : 樓樓上
→ : 樓樓上
推 : 我學的時候就叫我不要用了,有人可實際範例示範好處嗎17F 06/10 21:19
推 : c 遺毒18F 06/10 21:24
→ : 某些很深的func call,用goto能減少return的效能浪費19F 06/10 21:33
推 : 推cha大20F 06/10 21:54
推 : 底層有時候goto很好用,像是driver的error handle21F 06/10 22:16
推 : c沒goto的話會很麻煩....22F 06/10 22:27
推 : 組合一堆jmp jxx 就是goto呀 XD23F 06/10 22:36
→ : goto 不是罪
→ : goto 不是罪
→ : 寫底層firmware就有可能會使用到goto25F 06/10 22:39
→ : 很常看到 if (error) goto exit_handle; 之類的寫法啊?26F 06/10 22:42
→ : 可以做到有點像 try { } finally { } 的感覺
→ : 可以做到有點像 try { } finally { } 的感覺
→ : goto在進入/離開順序相反時很好用28F 06/10 22:46
推 : goto是好東西, 問題在於會不會用29F 06/10 23:41
→ : C因為沒有try-throw-catch的語法, 所以一定要有goto
→ : C因為沒有try-throw-catch的語法, 所以一定要有goto
推 : 我寫java的時候就常常在想.... 把goto還給我 QAQ31F 06/11 02:21
→ : 有沒有可能是compiler為了相容之前有goto的code,所32F 06/11 07:42
→ : 以含淚繼續保留goto?
→ : 以含淚繼續保留goto?
推 : goto沒那麼邪惡,但是要確保寫的人邏輯要很好,不會出34F 06/11 09:43
→ : 錯
→ : 錯
→ : goto就搞不清楚程式流程怎跑會寫出未爆彈..36F 06/11 09:46
推 : 嵌入式的確常用goto switch case也都沒被取消37F 06/11 11:22
推 : 曾經讀過 Linux coding style38F 06/11 11:26
→ : 其中有一條就說:如果知道這程式在幹嘛 不反對用goto
推 : 打從全世界第一個高階語言就有 goto 只是我幾乎沒在用
→ : 其中有一條就說:如果知道這程式在幹嘛 不反對用goto
推 : 打從全世界第一個高階語言就有 goto 只是我幾乎沒在用
→ : 對第一個寫的人來說goto是神器41F 06/11 11:56
推 : 通常也只用在 error handle 向下 goto 吧42F 06/11 12:52
→ : 跟時間機器一樣向上goto有人的頭就要爆炸了XD
→ : 跟時間機器一樣向上goto有人的頭就要爆炸了XD
推 : 其實 try catch 也是一種goto啊... = =44F 06/11 16:18
推 : goto太好用,以致怕不會用的人亂用,乾脆叫你不要用45F 06/12 01:05
→ : goto不邪惡,邪惡的是coder的觀念....46F 06/12 02:26
→ : 好goto的兩大前提:1.同函式內要保持同向性
→ : 2.不要交錯goto的path
→ : 好goto的兩大前提:1.同函式內要保持同向性
→ : 2.不要交錯goto的path
看板 Soft_Job
作者 標題 Re: [閒聊] 一個函式2000行, 一個if 300行
時間 Wed Jun 10 22:42:39 2015
推 : 我學的時候就叫我不要用了,有人可實際範例示範好處嗎49F 06/10 21:19
例子像這樣 https://gist.github.com/anonymous/5ea6b0d75808e00cf35f
雖然用if/else也可以,但真用下去會巢狀if好幾層
這例子還只有3個成員,如果struct內有10+個成員
你不會想寫10+層if/else吧
甚至某些成員還要用自己的init function
而這些init function又都有可能fail
我想沒人會想看那一大坨code吧...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.35.150
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1433947363.A.E31.html
推 : 這種pattern的code最近看好多喔1F 06/10 22:52
推 : 用 switch case + loop 應該也可?2F 06/10 22:52
推 : 拿來當作try...catch的用法滿方便的3F 06/10 22:54
→ : 這樣寫有一部份是可讀性考量~簡單明瞭4F 06/10 22:56
→ : switch case + loop就沒那麼直覺
→ : switch case + loop就沒那麼直覺
推 : error handling 好用6F 06/10 23:13
推 : c function單一出口 該free或該close的resource都可7F 06/11 00:06
→ : 以在出口處處理 避免leak....
→ : 以在出口處處理 避免leak....
推 : 是的 思考切勿僵化9F 06/11 00:40
推 : 這例子簡單明瞭10F 06/11 00:50
推 : 寫C很可憐,又要避免resource leak,又要榨出最後一點效率11F 06/11 08:52
→ : ,不用goto反而傷害可讀性
→ : ,不用goto反而傷害可讀性
推 : 應該說學習的時候還是別用goto..等熟練後再用比較好13F 06/11 09:10
→ : C/C++ 本來就不是給新手的語言14F 06/11 09:39
→ : 這是頭一次覺得適合用goto XD15F 06/11 13:07
→ : 我就是從linux kernel code 學會這個好用的寫法的16F 06/11 13:15
→ : 我會覺得應該要說 當你對寫程式該注意的事情很熟後17F 06/11 13:43
→ : 用goto是沒有關係的 可以讓程式簡潔便於維護
→ : 用goto是沒有關係的 可以讓程式簡潔便於維護
→ : 請問用function或是function pointer取代不會比較好嗎?19F 06/11 13:45
→ : function會增加stack memory吧 function pointer我不懂20F 06/11 13:52
→ : 事實上kernel driver的init/exit就是function pointer21F 06/11 14:21
→ : 就算用function還是要處理malloc失敗的case呀~
→ : 就算用function還是要處理malloc失敗的case呀~
推 : 看到goto就頭暈 因為程式老師說1張考卷只要寫1個goto23F 06/11 15:15
→ : 就是整張零分
→ : 程式老師也變成我的碩士指導教授 有一次幫他改寫程式
→ : 發現他有寫 goto
→ : 就是整張零分
→ : 程式老師也變成我的碩士指導教授 有一次幫他改寫程式
→ : 發現他有寫 goto
→ : A man chooses, a slave obeys (歪27F 06/11 16:25
→ : 所以只在像kernel driver這種特別合用的地方才被用呀28F 06/11 16:54
→ : 如果裡面不只是做malloc的話while不太合用噢30F 06/12 21:10
看板 Soft_Job
作者 標題 Re: [閒聊] 一個函式2000行, 一個if 300行
時間 Fri Jun 12 16:20:50 2015
這種code最容易出現在理工科的實驗室裡面。
因為一般理工科的學生並沒有接受過coding的訓練,
通常也不會自己深度接觸coding方面的知識,
只是會寫一些C/C++就開始寫了,
然後全部塞在一個main function裡面,
code完全不能reuse。
我看過最誇張的是一個3維有限差分法模擬程式6k行幾乎全部在main()。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.219.142.149
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1434097253.A.77E.html
推 : 說實在data跑的出來 漂不漂亮能不能reuse誰在乎1F 06/12 16:25
推 : 只要能解決當下問題,能不能 reuse不重要...2F 06/12 16:28
→ : 拋棄式程式 用完就丟 不用reuse3F 06/12 16:42
→ : 如果不goto用main()完成也蠻強的4F 06/12 16:46
推 : 我常寫這種CODE 後天要結果 明天做表 通通"暫時性寫法"先5F 06/12 16:46
→ : 然後就常常暫時性下去了 只有以孩還要用到的才認真寫
→ : 然後就常常暫時性下去了 只有以孩還要用到的才認真寫
→ : 老實說這種code除錯很難,對趕著出數據跟本沒幫助7F 06/12 19:44
→ : 推~有經驗的XD8F 06/12 23:44
推 : 做差分,爲了效能必須犧牲可讀性9F 06/13 07:53
推 : 主要後續維護 跟修改很累10F 06/13 10:11
→ : 我覺得光"寫出這種code"沒辦法判斷好不好 你又不知道當時會這11F 06/13 10:13
→ : 樣寫是因為時間短還是設備差還是人爛
→ : 樣寫是因為時間短還是設備差還是人爛
→ : 說"人爛"比較嚴重一點,我主要觀點是說這通常是理工科實驗室13F 06/13 18:16
→ : 在為了快速產出計算結果之下的產物。仔細去讀軟體工程的書
→ : 是要花很多時間的。多半不專唸資工的不會想做這麼多。
→ : 除非自己打算以後專做模擬計算,那就會對軟工涉獵比較多了。
→ : 在為了快速產出計算結果之下的產物。仔細去讀軟體工程的書
→ : 是要花很多時間的。多半不專唸資工的不會想做這麼多。
→ : 除非自己打算以後專做模擬計算,那就會對軟工涉獵比較多了。
→ : 硈t產出結果就不是人的問題了 是時間XD17F 06/13 23:31
→ : 要快速
→ : 要快速
--
※ 作者: terievv 時間: 2015-06-14 02:29:18
※ 看板: terievv 文章推薦值: 0 目前人氣: 0 累積人氣: 1316
回列表(←)
分享