Re: [請益] 接手外包商的code沒交接也沒人可以問

作者: shter (飛梭之影)   2022-07-14 07:21:51
※ 引述《sbbty018 (charlie)》之銘言:
: 各位大神好
: 我是最近剛從資策會(java)畢業找到目前這間台中的類博弈公司(40k)
: 面試的時候沒問目前團隊的狀態
: 上班第一天才發現原來我是第一個RD。MIS則是大概有六位
: 公司目前的code都是之前中國外包廠商寫的
: 然後一兩個月前公司決定要自己組台灣的RD團隊就跟中國廠商停止合作
: 所以我這個菜鳥一進來就得自己慢慢看code然後debug
: 另外他們還有用到redis跟rabbitMQ也是我在資策會沒學到的讓我感到有些負荷不來
: 請問這種情況在業界很常見嗎? (超菜junior接手別人的code然後沒有人能夠請教)
我的第一份跟第二份工作都是這個樣子,一開始你會像麻痺的人,給你幾個建議
1. 掌握啟動前的入口 - 大部分程式語言都會有一個從作業系統下命令開始執行
的進入點,可能會載入 config、環境變數、命令參數這些東西,你要先清楚
這些東西的配置意義是什麼。
2. 掌握啟動後的入口 - 如果是 server 或常駐程式,在執行階段就會有監聽行為。
可能來自於 http API、socket、message hook、Redis subscribe ....
你就要找到這些呼叫點的 function,嘗試插 log 或 print,追蹤一些上下游關係
然後學習用工具打約定好的通訊格式測試,像 postman 或去 redis 丟 pub
3. 嘗試動動手腳 - 掌握入口後你就知道哪邊會像大腦發出命令,而你要讓程式神經
將命令傳達到該去的地方。所以你要先假定一個起點跟終點,比如 rabbitMQ 收到
訊息經過邏輯運算會將結果存進 redis 某個 key 值,那你就去追 function 的
資料流向以及中途被包裝成什麼樣的資料結構最後又轉成什麼樣的字串存 redis
4. 起身連續動作 - 獨立的資料處理都掌握的差不多後就要看系統 state machine 跟
life cycle 結構的運作模型,自己去新增一些狀態、設計一些複雜的腳本看看
程式運作的結果跟你想要的是否相同。配合前面三點,自己去修改 config 丟不同
參數、自己開發一個測試的入口,然後呼叫已知的 function 卻在邏輯中判斷命令
夾帶自定義的 config 參數並達成某些狀態條件時要引導至自己另外寫的 function
印 log,這樣你就有辦法介入原有程式並增加新功能
5. 外部工具先學有用到的部分 - 例如 redis 寫資料有很多命令,set, hset, rpush ..
每個的用法和適合的場景不同,照理說科班教育會讓你全部學懂避免誤用才去實作
但你接手別人程式面對陌生工具時你其實是要反過來根據程式的資料結構去搞清楚
這個指令的用法就好。先別浪費時間知道他們存在 redis 內有何差別,你要看的
只是在程式內從介面定義讀回來的資料長什麼樣子。除非你很有興趣,否則訓練自己
在 code 內看到對 redis 呼叫的指令能快速從文件中找到用法說明更重要
6. 一知半解下的行車紀錄 - 到這階段差不多你就可以開發新需求,但會有很長一段時間
你覺得自己是在一知半解下做出新功能的。很多時候你是從 try error 發現一條可以
正確執行完的路就走了,然後不知道狀態或資料變了會產生 side effect。別慌,在
你不懂的地方加註解,給個編號,然後在自己的文件中寫上編號並紀錄起來。當 side
effect 發生時,你有機會從文件中判斷可能與哪幾條有關,去 code 搜尋註解所在
檔案有助縮小判斷的範圍。
7. 不要改壞勝過不要怕改壞 - 有些人會說你就是要放膽去改不要怕壞,從零開發是如此
因為那是你自己寫的,掌握度高,又沒有曾經穩定運作的印象,壞就壞了再修就好。
但今天你是在很多東西沒摸熟不懂的情況下接一個已架構好的系統,
維持運作穩定才不會給自己找加班的麻煩,老闆對你的新人印象才會好。
一堆需求進來先挑自己有把握的並告訴 PM 她想先上但你會花超過預期時間的東西
大多專案管理者會同意完成一個不起眼的功能勝過引人注目卻花超久時間還搞不定
在穩定中累積經驗也累積自信,再慢慢往可能改壞的功能開發
8. 換輪胎 - 過一陣子你可能突然發現好多新功能你其實重複造了輪子,只是當初看不
出來某個 function 跟你寫的目的相同。研究對方寫法,你會柳暗花明又一村;這
時候你的思考邏輯會漸漸與原作者同化,突然開竅了,看懂很多東西了,這才是你
可以開始不要怕改壞準備對模組重構或大展身手的階段。
作者: James781004 (鍵盤暴民)   2022-07-14 07:52:00
推,這些都是接手不熟悉專案時的基本動作
作者: holebro (穴弟弟)   2022-07-14 08:43:00
這是programmer的常識吧
作者: bmw20075112 (天天吃豆漿)   2022-07-14 08:44:00
作者: umum29 (....)   2022-07-14 08:56:00
能把流程寫的出來給推~ 這不是用"常識"就可以解釋的
作者: jasonchris (已經醒了)   2022-07-14 09:14:00
推一個好文
作者: johnwater (Daniel)   2022-07-14 09:30:00
作者: smartb (Linus)   2022-07-14 09:36:00
先學會並習慣備份還原所有東西,以後你會感激我
作者: niceguy (niceguy)   2022-07-14 09:45:00
詳細推
作者: blazers08 (我是傳奇)   2022-07-14 09:56:00
作者: dapple (dapple)   2022-07-14 10:06:00
好文
作者: lazarus1121 (...)   2022-07-14 10:13:00
先懂業務邏輯再反過來看程式才是比較快的
作者: BBSealion (海獅)   2022-07-14 10:20:00
推!能把這流程講清楚讓新手可以理解不容易
作者: peter98 (新兵)   2022-07-14 10:23:00
可以 推
作者: pan0438 (Libra)   2022-07-14 10:28:00
推一個
作者: sbbty018 (sbb)   2022-07-14 10:40:00
推推
作者: vi000246 (Vi)   2022-07-14 10:42:00
先學會git的reset、revert相關指令XD我自己是習慣先操作一遍 弄懂業務邏輯 再看DB儲存結構再開始追程式流程 這樣會比較好懂系統架構
作者: longlyeagle (長鷹寶寶實驗室)   2022-07-14 11:03:00
專業的令人心疼
作者: lairx (lairx)   2022-07-14 12:05:00
你不要那麼專業QQ
作者: yiche (你若安好,便是晴天)   2022-07-14 12:54:00
推推
作者: BearWu (B.r)   2022-07-14 12:56:00
推!!
作者: bnd0327 (阿噗噗)   2022-07-14 13:05:00
這篇真的把新手上路的過程寫得很傳神易懂,推
作者: s678131 (Mu)   2022-07-14 13:33:00
作者: andyPKPK   2022-07-14 14:35:00
推!
作者: jobintan (Robin Artemstein)   2022-07-14 14:36:00
插入log/print重得很重要,有時候就會不知道bug咋發生。
作者: zxcchiou (立叉西)   2022-07-14 14:45:00
推我收藏了
作者: zegas (電風扇啊啊啊啊啊啊啊)   2022-07-14 14:48:00
作者: kiillen (神龍)   2022-07-14 16:01:00
收藏
作者: airtsubasa (偽學姊)   2022-07-14 16:42:00
第一步學會備份 第二步學會生出測試環境 第三步在測試環境浪!
作者: ppc ( )   2022-07-14 17:08:00
人真好
作者: ya2138 (Jigsaw2138)   2022-07-14 17:48:00
認真文,推
作者: yuzukeykusa (Q)   2022-07-14 18:08:00
謝謝大大
作者: sylphis00522 (hardstar)   2022-07-14 18:36:00
暗潮中的一盞明燈
作者: A4P8T6X9 (殘廢的名偵探)   2022-07-14 18:49:00
作者: Nitricacid (硝酸酸)   2022-07-14 19:04:00
作者: Jungggin (Modest Nio)   2022-07-14 19:14:00
推詳細 很有節奏感的流程
作者: gino0717 (gino0717)   2022-07-14 19:23:00
我都把每一行給cout出來看是啥
作者: RayBow (瑞寶)   2022-07-14 19:49:00
推推
作者: shieldsky (Gray wolf)   2022-07-14 20:08:00
覺得實用又清楚
作者: kkroy (☆㊣↖煞氣ㄟ阿喂↘ξ★)   2022-07-14 20:40:00
這一定要推! 有畫面耶! 有以前當新人時的既視感~
作者: lee457088   2022-07-14 21:17:00
哦哦哦哦哦!!!
作者: anneju   2022-07-14 22:22:00
作者: Jaster1117 (賈斯特)   2022-07-14 22:51:00
作者: WulinWorks (武林)   2022-07-14 23:28:00
作者: Celinealone   2022-07-15 00:01:00
很受用,感謝~
作者: fish0112 (魚)   2022-07-15 00:14:00
作者: pigcat1315 (還是朋友?)   2022-07-15 00:34:00
認真的經驗談推
作者: mTwTm (天)   2022-07-15 00:37:00
哇塞 字字珠璣
作者: nelley (名字:大便王)   2022-07-15 07:39:00
推佛心文章
作者: alanKaz (卡)   2022-07-15 09:20:00
好文推
作者: eeyellow (TWC英勇長存人心)   2022-07-15 11:09:00
很寶貴的經驗分享 感謝!
作者: elaine1226 (抹茶拿鐵)   2022-07-15 11:32:00
作者: akito117 (宗益)   2022-07-15 14:26:00
作者: black209 (black209)   2022-07-15 15:32:00
好人 推
作者: d8888 (Don)   2022-07-15 15:39:00
作者: timofEE (新人)   2022-07-15 15:58:00
推實用
作者: adamcha (生於安樂 死於憂患)   2022-07-15 16:51:00
能把工程師技能抽象化 絕非等閒之輩
作者: yoche2000 (Sushi Desu! 在下壽司)   2022-07-15 17:29:00
推 好文
作者: TouMingPS   2022-07-15 19:22:00
作者: eeleader (領航員)   2022-07-15 20:07:00
推好文
作者: jerrypan1 (jerry)   2022-07-15 21:15:00
用心推
作者: lance70176 (十三夜)   2022-07-16 00:25:00
這教學也太認真
作者: nayeonmywife (sanamywife)   2022-07-16 11:16:00
作者: ckrufus (ck)   2022-07-16 18:31:00
推。
作者: pionxzh (不為彼岸)   2022-07-17 10:23:00
這篇真的很用心xdd 推一個
作者: mybluesky (天族)   2022-07-17 20:42:00
說的真好,推
作者: Burwei (系館守護神)   2022-07-17 20:58:00
作者: bab7171   2022-07-20 09:08:00
作者: i78524 (Shulei)   2022-07-21 11:09:00
推 幫助太大了
作者: crazwade (crazwade)   2022-08-03 21:54:00
clg是你的好幫手 QQ
作者: repeat (You won't know)   2022-08-10 23:00:00

Links booklink

Contact Us: admin [ a t ] ucptt.com