Re: [心得] 前輩是Bug製造機
※ 引述《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 重覆的檔案是...
大概就是這樣吧
重構真的很累,邊寫你就會邊感嘆
以前覺得世界奇觀要出國才有
結果發現一堆公司的程式碼裡面也有
(攤手)
--
推
03/26 19:39,
03/26 19:39
噓
03/26 19:40,
03/26 19:40
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.241.170.131
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1523540744.A.6DA.html
推
04/12 22:00,
7年前
, 1F
04/12 22:00, 1F
推
04/12 22:12,
7年前
, 2F
04/12 22:12, 2F
→
04/12 22:12,
7年前
, 3F
04/12 22:12, 3F
推
04/12 22:20,
7年前
, 4F
04/12 22:20, 4F
→
04/12 22:44,
7年前
, 5F
04/12 22:44, 5F
推
04/12 22:50,
7年前
, 6F
04/12 22:50, 6F
推
04/12 22:54,
7年前
, 7F
04/12 22:54, 7F
→
04/12 22:54,
7年前
, 8F
04/12 22:54, 8F
這樣真的留不住人,在裡面的人也會覺得不公平吧
推
04/12 22:58,
7年前
, 9F
04/12 22:58, 9F
→
04/12 22:59,
7年前
, 10F
04/12 22:59, 10F
→
04/12 23:01,
7年前
, 11F
04/12 23:01, 11F
→
04/12 23:01,
7年前
, 12F
04/12 23:01, 12F
→
04/12 23:01,
7年前
, 13F
04/12 23:01, 13F
對未來轉職的幫助是真的滿有限
外包公司錢賺到了,然後欠了一堆技術債,本公司的工程師來還,
還一還覺得沒什麼發展,走人之後,好不容易改一點的東西馬上變 legacy
惡性循環
推
04/13 00:24,
7年前
, 14F
04/13 00:24, 14F
推
04/13 00:41,
7年前
, 15F
04/13 00:41, 15F
推
04/13 02:51,
7年前
, 16F
04/13 02:51, 16F
→
04/13 02:51,
7年前
, 17F
04/13 02:51, 17F
→
04/13 02:52,
7年前
, 18F
04/13 02:52, 18F
推
04/13 09:39,
7年前
, 19F
04/13 09:39, 19F
→
04/13 11:11,
7年前
, 20F
04/13 11:11, 20F
→
04/13 11:12,
7年前
, 21F
04/13 11:12, 21F
大學生專題,滿滿的既視感
還有我原文裡面說的,迴圈裡面包查詢,N+1 query
這種需求是達到了,但明明正確作法應該是 JOIN 或 eager loading
很明顯就是網路上 sample code 去 copy 回來再自己改成要的功能
更別說還有什麼
// 先准备一个连线用于查询 這種東西 (連註解都一起copy回來了?
→
04/13 11:20,
7年前
, 22F
04/13 11:20, 22F
→
04/13 12:27,
7年前
, 23F
04/13 12:27, 23F
→
04/13 12:28,
7年前
, 24F
04/13 12:28, 24F
→
04/13 12:28,
7年前
, 25F
04/13 12:28, 25F
Model, View, Controller MVC 架構
但要注意 controller 一不小心就會寫的很髒,還要符合 SOLID principles
現在主流應該是前後端分離,mobile 也可以共用 (小弟不才,應該4j樣吧)
推
04/13 12:48,
7年前
, 26F
04/13 12:48, 26F
推
04/13 14:35,
7年前
, 27F
04/13 14:35, 27F
→
04/13 14:35,
7年前
, 28F
04/13 14:35, 28F
→
04/13 14:36,
7年前
, 29F
04/13 14:36, 29F
感謝師兄提點,啾咪
推
04/13 14:50,
7年前
, 30F
04/13 14:50, 30F
推
04/13 14:58,
7年前
, 31F
04/13 14:58, 31F
→
04/13 14:59,
7年前
, 32F
04/13 14:59, 32F
→
04/13 15:01,
7年前
, 33F
04/13 15:01, 33F
推
04/13 16:10,
7年前
, 34F
04/13 16:10, 34F
→
04/13 23:47,
7年前
, 35F
04/13 23:47, 35F
→
04/14 00:44,
7年前
, 36F
04/14 00:44, 36F
這時候就會想說,既然有外包的需求 (例前端、美工)
為何不直接請一個設計師
況且,外包價比正職高,正職也會心裡不平衡吧
(爛 code 製造機,結果還賺得比較多,屁股我們在擦)
推
04/14 00:54,
7年前
, 37F
04/14 00:54, 37F
推
04/14 03:25,
7年前
, 38F
04/14 03:25, 38F
推
04/15 10:24,
7年前
, 39F
04/15 10:24, 39F
推
04/15 18:51,
7年前
, 40F
04/15 18:51, 40F
※ 編輯: banqhsia (123.241.170.131), 04/15/2018 22:27:53
推
04/17 01:04,
7年前
, 41F
04/17 01:04, 41F
討論串 (同標題文章)