Re: [心得] 前輩是Bug製造機

作者: banqhsia (BEN)   2018-04-12 21:45:28
※ 引述《justsing (只是唱首歌)》之銘言:
: 最近進入一家蠻大的公司
: 才進去沒多久已經把目前正在開發中的專案幾乎重構過了
: 原因是因為某前輩寫的code問題非常多
: 所有變數都用全域變數,導致資料常常出錯
: 命名也很愛取那種
: abc1
: abc2
: 這種完全看不出來在幹嘛的東西
: 開發完也完全不測試就推到正式branch上
講到這個我就心有戚戚
最近在公司接手一些案子,這個案子有多厲害
* 用純 PHP 義大利麵方法寫
* 無OOP,無框架
* 資料庫無正規化、該索引的沒索引,不該索引亂索引
* 因為太多專有名詞,DB欄位直接用 optA、optB、optC..... optH (option?)
* 重覆coding的東西太多
例如查詢資料庫的部份只有欄位不同,就乾脆直接copy整份程式碼,改欄位->存檔
(說好的 class、function 呢? 每支程式都在 create connection or die )

get_user
edit_user
del_user
get_article
edit_article
del_article
... 你他媽每一個 CRUD 就給我寫一個檔案 (裡面99%一樣,只欄位不同)
* N+1 query,比如先查詢產品列表,再在迴圈查詢每個產品的producer_id
(明明 JOIN 一次或 eager loading 就可以辦到的東西)
* 開發途中才進版控,commit 記錄全部 "no message"
* 公司把系統某部份再外包給下游接案公司,給PM接洽發包
接案公司心態:交差
程式碼收回來之後,PM不懂coding,對方亂寫看不懂,現在要維護、加新功能
花更多時間在還技術債,而且對案主還沒結案
* 因為外包的關係,所以資料夾裡面有好幾包,都是獨立的一支系統卻串在一起
例如後台用某個寫法,有自己的library資料夾等;
前台某個功能又自己一包,每個系統各自成一個生態,然後串在一起
: 後來主管們看不下去就請我幫忙改
: 改完後目前系統改善很多
: 但好像也惹得他很不高興
: 雖然他現在幾乎是半冷凍狀態
: 但他偶爾只要寫個新功能就會產生一堆Bug
: 之前跟主管反應過也是不了了之
: 畢竟主管不會寫程式,也很難看懂他的問題在哪
: 通常大家遇到這種情形,會怎麼做呢
: 是不是只能快逃了啊
我在進來現在公司以前,公司主管是有直接告訴我
「我們公司現在很多事情沒有成型,如果有新的想法的話,可以直接提出」
確實,在進來的時候也討論了滿多的想法,建議導入開發框架跟SA的概念
明明感覺是業界已經非常簡單行之有年的東西,卻像登天一樣難
我真的是活在平行世界嗎
可能公司的心態也有差
公司認為簡單的東西可以外包減少工程師 loading,結果程式碼品質很難去控管
寧願花一筆錢外包,也不願意再請人,不就是飲鴆止渴嗎?
(第二手接案公司賺到錢,結果債是我們在還)
不過現在看起來,是有慢慢在變好啦... 有吧。
回到你的問題
我接手這個專案之後,什麼修改都是假的
到處 include 比亂繼承類別還要難 code review,完全不知道變數從哪裡開始出現
更別說程式碼混著 SQL 跟 js 了
找 PM 要原始的需求,現任 PM 也不太瞭解 (因為換好幾個PM接手)
後來我 refactor 的作法是:
舊程式碼直接放一邊,在前端把網站點一點,摸一摸 猜他要幹麻
把需求反推回去,看著輸入的表單,把 schema 推出來
等於是在大便裡面挑黃金一樣,最後剩下那一點點稀少的 就是最核心的東西
其他都是 a piece of shit bullshit
一邊重寫,一邊SA
想想什麼功能有可能擴充,什麼功能是重覆的
把邏輯抽出來,變得抽象一點,再各自實作
↑然後你會發現 這些東西不都重覆的可以共用 class or method 嗎
那些 copy & paste 重覆的檔案是...
大概就是這樣吧
重構真的很累,邊寫你就會邊感嘆
以前覺得世界奇觀要出國才有
結果發現一堆公司的程式碼裡面也有
(攤手)
作者: TauchK   2017-03-26 19:39:00
想插瑤瑤+1
作者: superbabyer (飛蓬夕瑤)   2017-03-26 19:40:00
樓上很糟糕
作者: j0958322080 (Tidus)   2018-04-12 22:00:00
jan der
作者: abccbaandy (敏)   2018-04-12 22:12:00
所以說什麼專案公司練功快根本害人,練複製貼上的手速而已吧XD
作者: Deltaguita (貝里斯)   2018-04-12 22:20:00
以前有個人一直叫我去接案公司,學的東西比較多XD
作者: kalaja (菸酒生)   2018-04-12 22:44:00
有同感,不過是飲"鴆"止渴喔。
作者: newyellow (newyellow)   2018-04-12 22:50:00
接案公司還是要看公司啊 我也有遇過很厲害的
作者: menshuei (紅茶)   2018-04-12 22:54:00
如果我是老闆的話當然外包省錢又有彈性,然後再請一個像你這樣有能力的員工來扛。
作者: bigshawn (棉花)   2018-04-12 22:58:00
怎麼覺得這情境好熟悉 上層超愛外包 拿回一堆義大利麵最後苦的都是底層工程師接案的確學很多 全端 各式語言 硬體規劃 DBA全部一手包辦不過學到的很多都是旁門左道
作者: supernow (善甲狼)   2018-04-13 00:24:00
真的,一手包真的常學到一堆旁門左道
作者: chuegou (chuegou)   2018-04-13 00:41:00
我看到外包回來的code嚇到直接離職 聽說後來案子死了
作者: Ghamu (貓丸)   2018-04-13 02:51:00
有聽說外包可以練功 但總覺得很容易學壞 做一些自己coding輕鬆 維護的人罵幹的事 畢竟本質上交差完拿了錢館你去死話說我看到外包code我也想離職XDDD
作者: y3k (激流を制するは静水)   2018-04-13 11:11:00
外包包到沒什麼經驗跟責任感的學生 連測都不測就直接丟出來等指示更是讓人吐血...= =
作者: pttworld (批踢踢世界)   2018-04-13 11:20:00
外包徵人要小心履歷做幾個月就丟包的人,很雷
作者: MOONY135 (談無慾)   2018-04-13 12:27:00
義大利麵XDDDDD可以問一下前端是php寫的嗎 如果是要怎樣debug比較清爽啊
作者: TitanEric (泰坦)   2018-04-13 12:48:00
好可怕的扣…
作者: Argos (Big doge is watching u)   2018-04-13 14:35:00
不要以為這樣就很可怕 事實上到處都是這樣的code...應該這麼講啦 市面上95%以上你看到的網站 APP 背後code都是長這樣喔! 啾咪~
作者: johnny94 (32767)   2018-04-13 14:50:00
心有戚戚焉,而且你會發現有這種 code 的公司不少
作者: lturtsamuel (港都都教授)   2018-04-13 14:58:00
混著SQL跟is? 不怕被sequel inject?*jsSQL寫在js裡面就代表後端會直接吃下前端送來的SQL 抖
作者: senjor (哞哞)   2018-04-13 16:10:00
有些人的做法是給前端送SQL,然後後端filter掉欄位跟指令
作者: viper9709 (阿達)   2018-04-13 23:47:00
包山包海包...
作者: AvatarH (Avatar Hsieh)   2018-04-14 00:44:00
有人碰過外包價比正職薪水高,這樣有省道錢嗎?
作者: ifreeta1110 (Ifreeta)   2018-04-14 00:54:00
外包當然比正職薪水高,因為正職還有薪水以外的成本
作者: hellomotogg (你好機車)   2018-04-14 03:25:00
想到一個class裡面有一萬行等著重構就有點崩潰
作者: alice822 (梅露)   2018-04-15 10:24:00
怎麼跟我們公司有87%像
作者: james732 (好人超)   2018-04-15 18:51:00
推 QQ
作者: linquer (哈)   2018-04-17 01:04:00
同QQ 87分像+1

Links booklink

Contact Us: admin [ a t ] ucptt.com