Re: [請益] 新人該如何快速上手

看板Soft_Job作者 (華麗的天下無雙)時間9年前 (2016/09/28 19:00), 9年前編輯推噓71(7108)
留言79則, 74人參與, 最新討論串2/2 (看更多)
※ 引述《jojoboy0115 (jojo)》之銘言: : 前情提要 : 開始上班到現在已經兩個月了, : 想請教各位先進,當你們還是新人時 : 是怎麼樣了解程式的架構呢? : 花了多久才成為公司的即戰力? : 先謝謝各位了 : ----- : Sent from JPTT on my Foxconn International Holdings Limited A6S. 每個人都有這段從新手到熟手過程,如果你遇到挫折,也不必灰心,因為這是每 個人都需要經過的必經之路。 根據您的描述,你在這試用期所做的工作主要是更改已完成或運行中系統的小功 能,這樣的功能很容易完成,很快就能看到成果,所以也很容易有成就感,但往 往新手會因為這樣的成就感而在這的階段被卡住,而無法往上一層樓,做更長更 複雜的工作。 此外,您也提到程式的測試,根據你的描述我可以大膽猜測,您不是使用單元測 試框架來做程式的測試,而是使用手動測試吧? 另外,有些人不如離職,我想這一點也太過誇張了,大多數的公司,都不會從頭 到尾手把手教你整個程式架構,這很花時間,效果也不佳,主要的工作,還是得 要靠你自己來。 我想貴公司應該是想要交給比較大的開發工作,而不是只是修改小function之類 的吧?而你因為無法快速了解程式架構,所以感到挫折。 我分享一下我做程式架構分析的幾個原則,提供給您參考。 一、不要一開始就投入code trace 也許有些人會建議你直接用debug mode trace code,我認為這是很後面才會做 的事,因為你無法確認你投入的那段程式碼是否關鍵段落。 二、好好閱讀你手上的使用者文件 使用者文件是給客戶看的,不是給開發者看的,你的公司應該有提供給你,如果 沒有,就去問你的前輩吧,看看你的系統提供你的客戶多少功能,試著把這些功 能整理成功能架構圖,先別管程式是怎麼寫的,第一件事情:你要先搞懂你的產 品,以使用者的角度。 三、做一份整個架構的程式清單 如果你們公司能提供你的話很好,即使有,你也不用太高興,因為與實際內容不符 在業界是屢見不鮮的事情,不管有沒有,你都要自己整理與對過一次,每一個頁面 ,每一個類別在程式中的作用,你不需要細看程式碼的function,也不需要知道裡 面的流程跟互動關係。 如果你參與的系統有適當的架構,分層負責元件,以及正確的開發style,你應該在 分析這份程式清單的過程中發現這個系統與其他外部服務(如果有的話,例如用了那 些資料庫,使用了哪些其他服務)的關係,還有之前的開發者在開發過程中的思維, 你應該可以歸類出哪些是frontend的程式碼,那些是business logic,那些是DAO。 當然,在過程中你勢必也能看出來每個namespace的用途以及哲學,等到你真的把清單 做出來或一一對過,你對整個系統的架構已經有一定的瞭解了。 四、試著畫出程式之間的依賴關係 你可以從任何一個程式開始,以你熟悉的方式,不用管什麼UML或是什麼規範,用你 自己懂的方式,就算是簡單的方塊圖加上箭頭也好,把程式或namespace之間的圖 畫出來,你可以用手繪或是用powerpoint等任何工具,只要你方便快速就好,因為這 不是正式的文件,只是便於你了解整個系統架構。 記住,你是用圖像表示程式或模組之間的關係,不需要細究裡面的文字,你可以從 using,程式碼或是visual studio的工具找到這些關係,但我不是很建議透過工具, 用你自己的眼睛對過一次才會有記憶,程式的架構是你必須記憶起來的東西。 五、追蹤程式碼 到了這個階段,追蹤程式碼才有意義,因為你會知道哪些程式碼是值得追蹤的, 當你收到一個需求,你才需要去追蹤程式碼,沒頭沒腦的隨便找一個地方開始追蹤 ,是事倍功半的。 追蹤程式碼的過程很容易忘記,但是整體架構卻不容易忘記,因為你是用圖像記憶 方式把東西記下來,而不是記憶文字。所以直接追蹤程式碼,對於系統架構了解我 覺得作用不大,除非你的目標是理解演算法。 六、學會單元測試 單元測試分為兩個部分:單元測試框架與mocking framework,感覺你們公司應該 沒有在做單元測試,不過沒有關係,他們沒做你可以自己做,透過單元測試跟mocking framework做白箱測試,可以徹底了解一個元件自己是如何運作的,為了要讓一個測試 能夠成功通過,你就會在過程中對於程式的運作邏輯更為了解,最重要的,他可以讓 你知道如何「打斷」邏輯,縮減你需要了解的程度。 七、運用靜態掃描工具協助你了解程式碼 舉例來說,Sonarqube,這安裝上十分簡單而且也不用費用,他可以掃描C#程式碼並 發覺其技術債務,複雜度等等的資訊,這可以讓你很快了解到整個程式的核心在哪裡 ,通常最複雜越高,問題最多的程式就是這個系統的核心程式,你可以從核心程式開 始找出他與其他程式之間的關係。 此外,用 doxygen + graphviz可以快速產生系統架構與說明文件,不過因為產生得 太快了,所以還是自己手動去畫比較有記憶。 八、不要害怕開口 不要害怕開口去問前輩,主管或是同仁,程式是問出來的,大家都當過程式員,你要 一個程式員兼顧元件說明與架構,大家都會有所疏忽,因為schedule跟cost,不要害 怕問蠢問題,只要你經過前面一二三四五六七,你的問題勢必會直指核心,就算是問 蠢問題也沒關係,積極度要表現出來,人都好為人師,多少快慢,對方都會回答你的 。 以上八點,是過去我接各類系統時的分析方式,我的電腦裡面,位置的牆上永遠掛著 我一開始分析的系統架構圖,當我遇到一個問題的時候,我會從頭開始看他對系統各 部分的影響,即使我很久沒有碰過某個系統,只要看到圖我就能回想起來,希望以上 的幾點能夠對你有幫助。 等到您能快速接手別人的程式架構,未來您要自己做程式架構設計,也是水到渠成的 事情。 -- https://www.facebook.com/derekhsu.sports 德瑞克徐的少年籃球夢粉絲團 http://www.sportsv.net/authors/derekhsu 運動視界作者網頁 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.217.130.251 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1475060406.A.1ED.html ※ 編輯: derekhsu (49.217.130.251), 09/28/2016 19:01:47

09/28 19:03, , 1F
推 很實用的建議
09/28 19:03, 1F
※ 編輯: derekhsu (49.217.130.251), 09/28/2016 19:05:31

09/28 19:05, , 2F
實用推
09/28 19:05, 2F

09/28 19:21, , 3F
對原po來說最後一點一定要做到,一方面也可以讓主管或資
09/28 19:21, 3F

09/28 19:21, , 4F
深人員知道你目前狀況
09/28 19:21, 4F

09/28 19:54, , 5F
真是好文章
09/28 19:54, 5F

09/28 20:21, , 6F
二的部分有些公司做法是開始不給,上手才給。
09/28 20:21, 6F

09/28 20:44, , 7F
09/28 20:44, 7F

09/28 20:49, , 8F
真的
09/28 20:49, 8F

09/28 20:49, , 9F
推推! 不管新手老手都非常實用的文章!
09/28 20:49, 9F
※ 編輯: derekhsu (49.217.130.251), 09/28/2016 21:01:57

09/28 21:18, , 10F
根據clean coder,新人不是應該要先學會說不嗎
09/28 21:18, 10F

09/28 21:20, , 11F
好文推
09/28 21:20, 11F

09/28 21:20, , 12F
09/28 21:20, 12F

09/28 21:21, , 13F
09/28 21:21, 13F

09/28 21:24, , 14F
09/28 21:24, 14F

09/28 21:28, , 15F
推,但我覺得要先trace某支程式,再來了解整個架構會
09/28 21:28, 15F

09/28 21:29, , 16F
比較有感覺,上手比較快;反之則有些耗時
09/28 21:29, 16F

09/28 21:35, , 17F
push
09/28 21:35, 17F

09/28 21:36, , 18F
推,感謝分享!
09/28 21:36, 18F

09/28 21:36, , 19F
其實第8點最重要,敢開口問真的解決很多問題
09/28 21:36, 19F

09/28 21:37, , 20F
不過問問題也要很有技巧,太常問前輩會不爽
09/28 21:37, 20F

09/28 21:47, , 21F
Good
09/28 21:47, 21F

09/28 22:13, , 22F
非常精闢 !!!
09/28 22:13, 22F

09/28 22:25, , 23F
09/28 22:25, 23F

09/28 22:30, , 24F
非常感謝您這近兩千字的回文,在下覺得受益良多,就
09/28 22:30, 24F

09/28 22:30, , 25F
算最後的結果不盡理想,在這過程中必定是有所收穫。
09/28 22:30, 25F

09/28 22:38, , 26F
非常實用推!
09/28 22:38, 26F

09/28 22:58, , 27F
09/28 22:58, 27F

09/28 23:21, , 28F
我的前輩不教 要我自己找答案 後來還離職了
09/28 23:21, 28F

09/28 23:22, , 29F
我花了一年才自認為可獨立作業(FAE兼RD)
09/28 23:22, 29F

09/28 23:33, , 30F
感謝分享
09/28 23:33, 30F

09/28 23:48, , 31F
09/28 23:48, 31F

09/29 00:06, , 32F
感謝
09/29 00:06, 32F

09/29 00:11, , 33F
謝謝您貢獻一篇好文章
09/29 00:11, 33F

09/29 00:24, , 34F
熱心推
09/29 00:24, 34F

09/29 00:28, , 35F
09/29 00:28, 35F

09/29 00:36, , 36F
09/29 00:36, 36F

09/29 00:40, , 37F
推 好文章!!
09/29 00:40, 37F

09/29 00:55, , 38F
推,好文!!
09/29 00:55, 38F

09/29 01:00, , 39F
感謝分享
09/29 01:00, 39F

09/29 01:13, , 40F
D大乃強者我朋友:p
09/29 01:13, 40F

09/29 01:17, , 41F
推!謝謝分享
09/29 01:17, 41F

09/29 01:29, , 42F
經驗分享收益良多
09/29 01:29, 42F

09/29 01:30, , 43F
真的好文
09/29 01:30, 43F

09/29 02:22, , 44F
09/29 02:22, 44F

09/29 02:23, , 45F
這篇好
09/29 02:23, 45F

09/29 03:16, , 46F
優文
09/29 03:16, 46F

09/29 03:36, , 47F
09/29 03:36, 47F

09/29 06:34, , 48F
09/29 06:34, 48F

09/29 08:06, , 49F
實用推
09/29 08:06, 49F

09/29 08:08, , 50F
感謝分享!
09/29 08:08, 50F

09/29 08:19, , 51F
原來德瑞克徐也是程式員!
09/29 08:19, 51F

09/29 08:36, , 52F
nice
09/29 08:36, 52F

09/29 09:11, , 53F
09/29 09:11, 53F

09/29 09:19, , 54F
09/29 09:19, 54F

09/29 11:24, , 55F
09/29 11:24, 55F

09/29 11:26, , 56F
推,我當新人時有用2,3,4,5,8
09/29 11:26, 56F

09/29 12:42, , 57F
09/29 12:42, 57F

09/29 13:35, , 58F
跪惹 感謝分享
09/29 13:35, 58F

09/29 13:51, , 59F
推德瑞克徐 (雖然他很大隻推不動)
09/29 13:51, 59F

09/29 16:55, , 60F
09/29 16:55, 60F

09/29 18:38, , 61F
09/29 18:38, 61F

09/29 20:56, , 62F
比對自己經驗,本文很有參考價值
09/29 20:56, 62F

09/29 21:59, , 63F
這真的用心 貼心+專業!
09/29 21:59, 63F

09/29 22:53, , 64F
推!!!謝謝分享
09/29 22:53, 64F

09/29 22:58, , 65F
推好文~
09/29 22:58, 65F

09/29 23:26, , 66F
~好文推
09/29 23:26, 66F

09/30 21:08, , 67F
實用推!!
09/30 21:08, 67F

10/01 13:44, , 68F
好文必推
10/01 13:44, 68F

10/01 19:04, , 69F
10/01 19:04, 69F

10/01 19:56, , 70F
10/01 19:56, 70F

10/01 20:07, , 71F
10/01 20:07, 71F

10/02 14:00, , 72F
我以為我到NBA版了
10/02 14:00, 72F

10/02 19:35, , 73F
推!
10/02 19:35, 73F

10/03 01:44, , 74F
有學到東西給推
10/03 01:44, 74F

10/03 10:28, , 75F
推推 感恩 非常實用
10/03 10:28, 75F

10/04 08:32, , 76F
朝聖
10/04 08:32, 76F

10/04 20:02, , 77F
10/04 20:02, 77F

10/18 16:36, , 78F
收穫很多,把架構圖像化跟主動提問是新人期的重點
10/18 16:36, 78F

10/21 19:33, , 79F
獲益匪淺!
10/21 19:33, 79F
文章代碼(AID): #1NwwAs7j (Soft_Job)
文章代碼(AID): #1NwwAs7j (Soft_Job)