看板 Soft_Job 關於我們 聯絡資訊
※ 引述《godspeedlee (妳,我可以)》之銘言: : 標題: Re: [討論] n萬行的code : 時間: Thu Jul 21 22:19:17 2016 : : ※ 引述《randomly (倫敦鐵橋垮下來)》之銘言: : : (幫以前同學代po) : : 背景:四大資工碩,役退。 : : 同學最近才剛工作兩三個月 : : 聽他說一進公司,主管直接丟了一份project的source code給他 : : 原本負責這個project的前輩已經離職了,所以當時是由主管代職, : : 這份source code林林總總大概有6~7萬行 : : 主管表示:試用期過後,這份code之後就交給你maintain了 : : 所以他從第一天進公司開始每天都在看code : : 三個月也一轉眼過去了, : : 剛剛吃飯聽他說,上禮拜開會主管突然問他 : : 「某case發生時會有bug,請問是在哪個function什麼原因造成的?」 : : 同學自己也不熟,只好回說待會回去看一下再跟主管回報 : : 主管只丟了一句話就離開了: : : 「你前三個月試用期都在幹嘛? : : 才問一個case也答不出來,之後你是要怎麼開發,怎麼maintain?」 : : 各位認為這件事是我同學能力不足? 還是主管太嚴苛? .......... 這個問題顯然如前面有人在推文就說 是抱怨主管 的貼文. 主管嚴不嚴苛, 是比較的問題. 自從美式派遣工在世界各地流行, 美式概念的公司已經跟台灣過去的概念 有所不同. 發展軟體是 Team work, 所以台灣過往流行高階資深員工要帶領訓練新進 員工. 但美式新管理方式想法不同, 認為員工一來就要能上工直接作事, 上層一看花不來就立即辭退, 馬上招新人. 反正, 挑好的能做的何必訓練? 派遣工就是電話通知派遣公司馬上就換人來. 替換招募管人到班 是派遣公 司該做的服務, 用錢就解決了. 四大碩畢是會有老學長照顧, 但國外進來的洋碩士漸多, 派遣就泛濫. ================================================================ 萬行沒有文件的程式如何維護? 在沒有學長資深同事傳承下, 整個程式就像個黑箱子, 又是限時限日那是 常人幹的事? 做軟體的或許在工作環境上很少遇見這種如何 "仿製" "山寨" 產品的事. 就是弄個現成產品來, 工程師就要能造個同樣功能的類似品出來. 電玩對任何正常小孩都能"不用教"就能自動學習上手. 雖然小朋友可能辦 不到立即山寨出一個成品, 但拿現有旁邊類似的東西也是可以模仿, 用口 頭嘴泡某些功能, 就能自個用言語假設虛擬出類似的部件玩將起來. 用資本主義只顧鑽錢的角度聘員工做事, 不必訓練新進員工似乎也不是不 可以的事. 人本來就有學習能力, 在台灣何況是四大篩選出來的? ======== 電腦就是被數學家歸類為 finite state machine. 做硬體的或是做機械工 具的工程師, 常常是被要求看見這種黑箱子就要能造出來, 山寨是理所當 然的要求. 早期去中科院造飛彈的, 工研院造電子產品的不就如此? 軟體因破解密碼出名的 Turing 提出了抽象的 Turing Machine 使用了可 以無限長的磁帶記憶體, 電腦就被歸類在 Turing finite/infinite state machine 這類別上. 但也都是能從 state machine 被認識清楚的. 打開一個機器的黑箱子是要用到一些道具的. 要弄懂一個毫無文件說明的程式, 以前就是反組譯可以減去記住指令碼的 麻煩, 能設斷點追蹤的 debug 程式就能顯現執行過程. 若是已有可編譯 但沒有備註的程式, 這麻煩就減省很多了. 沒有備註說明的程式, 就是內部有那些 state 並不讓讀者看見, 從一個 state 變換到另一個 state 的過程也沒有條件(或規格)說明, 也就是流 程不清. ========= 若是自動控制系統的領域裡, system identification 就是從 I/O 的反 應裡要把可見的狀態(Observable state)觀測出來, 同時也要找出可從外 部影響操控的可控狀態(Controllable state)找出來. 小孩對任何的電玩 都是能從 IO 反應得出電玩的狀態機功能. 若有高階語言的程式保留, 高階程式語言的輔助編譯/避錯工具就能協助 將程式的狀態變數列出, 只是這些工具還不能做更有意義的命名. 同樣的 類似流程圖的自動產生工具也是能將不同模組的流向畫出來. 底下由 godspeedlee 大大提出的個人使用經驗就是 利用電腦工具 減省 煩人的學習認知工作. =============================================================== : 除非在學時就常常把玩 open source,上 github 幫忙解 issue, : 不然第一次就追幾萬行,除非你天生神力,不然一定覺得很吃力 : : 我第一次碰上這種工作是 12 年前,那份 code 不只 6-7 萬行, : 起碼 40 萬行以上,用當時最新的電腦完整編譯一次大概要 20 分鐘, : 我大概看了一年,每星期我要都把看懂的部份寫成文件給主管 review。 : : 那時候笨笨的,只會用 grep 來看原始碼,然後用 word/ppt 很辛苦 : 的把 call graph、資料結構、繼承階層畫出來,那時候認識了一位高手 : ,他說要把 data flow 找出來,這對我幫助很大。 : : 大概是因為我是爛私大畢業,薪水又低,所以老闆可以 : 忍受我一年吧XD : : 那時候也沒有人跟我講要用 vim+ctags+cscope or SourceInsight, : 或是用 doxygen 產生 call graph,白走很多冤旺路,如果是現在 : 還可以用 valgrind 在 Run-time 時產生 call graph,比起當初, : 現在可以用的工具很多了。 : : 如果是現在的我,還會設法用 profiling 工具找出最常被執行的區塊, : 按照80/20 法則,6萬行的程式只有約一萬行是最常被執行的,理解一萬行 : 應該要比理解 6 萬行容易許多。 : : 所以我想你同學最大的問題是...他怎麼沒跟學長或板友求救? : : → badyy: 除了cscope,ctags外glimpse cindex好像也不錯用 07/21 23:03 : → godspeedlee: 忘了提...記得用SSD,搜尋速度加倍啊~!! 07/21 23:05 : → manaup: SSD真的很重要! 07/21 23:36: 推 ggg12345: 這篇回文指出了工具的重要性. 07/22 12:52 可以維護的就找免付費的高手來做. open source 的協同開發, 彼此成長成似乎是免付費的高手互助. 寫出程式, 別人若都看不懂是要如何加入合作? 透過網路又如何緊密合作? 對發展中的軟體若不是架構與構想良好, 高手怎肯投入? 好的量測評估工具, 甚至協助除錯的工具因之被會被導入, 協助分析流程的 工具也隨高手的加入而帶進來. 展示出有潛力的專案自然會吸引金主進來投資. 這個open source 就有機會 了. 此時, 就是不給改的(受封鎖保護的)就可以投資付費造平台工具 找高手造 新工具直破或另從他途突破, 也可再造其他保護(如法律智財權)工具阻擋洩 密破解. 密碼解譯就是一個對防衛做破解的工作. 落後地區要追上先進國, 學習與山寨不可免. 但先進國豈有不防備的道理? 防火長城與網站審批 是大陸阻止先進國資訊技術入侵或遲滯對手的辦法, 追趕的產業就拼命學習跟上, 不僅是 me too. 有些環境大陸不具備, 例如 有線電話與信用卡, 大陸就用實名註冊的手機做刷卡代替. 大陸的飛機技術跟不上先進國, 錢學森就建議做高速導彈, 畢竟導彈沒做好 還是有一次性使用機會. 做可再反覆使用的民航機費時費力遠水救不了近火 . 爛土槍對洋砲, 還是先有一片發展的天地頂住, 不被消滅再說. 當然, 所有缺的都要補上, 才能追上先進國.
UtahC: 推state machine觀念 酷 07/23 13:56
knives: 還來 07/23 14:01
※ 編輯: ggg12345 (114.43.236.88), 07/23/2016 14:53:56
sayya2311: ㄜ... 07/23 15:50
sayya2311: 現在真的是只看過一點計概還是電影就可以唬爛的時代? 07/23 15:58
robler: 別再幻想了 半桶水 07/23 16:54
Sidney0503: 還修掉ip咧 07/23 17:17
tvbic: 廢話連篇 07/23 18:15
ripple0129: ggg風格其實還蠻有特色的XD 07/23 18:29
f19870421: 看不懂 07/23 20:06
Ommm5566: push 07/24 18:14
alan3100: 真有即視感 寶不能再多了 07/24 22:12
csfgsj: 看到噓文的 07/25 09:35
csfgsj: 不知道要為樓主難過,還是要為噓文者難過 07/25 09:35
(femlro 刪除 csfgsj 的推文: 人身攻擊)
Sidney0503: 哈哈 看到推聞者為樓主感到開心 07/25 15:02
Sidney0503: 前者喜歡討拍 後者喜歡討噓 07/25 15:03