最近在看組裡的乙個祖傳專案框架,我覺得每個做系統的 lab 都會有那麼一兩個在某年橫空出世的天才少年,憑藉一己之力寫下乙個自己用上去非常爽的框架,幫助他順利畢業。但是,我在用這個框架的時候就遇到了非常多的問題,雖然框架功能上足夠的強,但是對於我這個後來人,並沒有太大的幫助。我幾乎花費了一整週的時間在這上面,但還沒有完全掌握所有的流程。根據 git 的提交歷史來看,這個框架前前後後寫了可能有兩年時間,這位前輩也用這個框架發了一片頂會(23333),但是從 git 上看,這個 7 w行純 c 語言的**都是他乙個人寫完的,這代表著他很多的資料結構,功能和流程都是在他經過梳理之後,變得非常的通用。但這些通用的資料結構和函式往往意味著抽象,如果沒有相應的文件,那麼後來人很可能陷入完全看不懂的境地。我就是面臨了這樣的困擾。
我想具體的說說我面臨的問題以及我是如何試圖去解決他們的。
所有的資料結構都缺乏必要的邏輯上的說明。儘管有的資料結構都只進行了字面可讀的命名,例如 chunk,recipe,但是對於裡面的具體資訊,就缺少注釋,常常讓人一頭霧水。同時在使用一些常見的資料結構的時候,例如 hash 表,由於 c 語言指標的通用,在沒有對 hash 表寫明 kv 結構的時候,很難讀懂 key-value 的具體邏輯含義的。沒有辦法,我只能看什麼時候插入資訊,什麼時候查詢 key ,拿 value 去做了什麼,對比實際邏輯去看他的對應的 k-v 資訊。所以,任何的資料結構都應該註明基本邏輯上的含義。
日誌列印的問題。在列印日誌的時候,他確實列印出了相應的資訊,但是,他忽略了最重要的一點,他沒有列印出函式呼叫,也就是說,我並不知道這個日誌對應的函式呼叫在哪。對於我這個後來者,甚至找不到合適的位置。我不太清除c語言能不能實現獲取呼叫函式的功能,但這也提醒我們,日誌列印的時候,不能只是為了方便除錯,只列印需要的資訊,而忽視了我們預設的,潛在知道的,但是對於新上手的人不清楚的資訊。對於日誌列印,應把需要的所有資訊都列印出來,而不是只列印出你關心的資訊。
函式復用的問題。c語言缺乏物件導向的方法過載,重寫。所以,他採用了函式指標的方法,一會這個函式指向乙個具體實現的函式,而接下來,由指向了其他實現的函式。雖然這樣在邏輯上進一步的抽象,但是函式的高度復用,代表著通用的資料結構,甚至出現了void* (* func( void*, void*))
,這種非常,非常,非常通用的函式簽名。確實,這樣方便了函式指標指來指去,但是對於後來人而言,經常需要滿大街找這個函式到哪去了,甚至有的時候需要單步 debug 來看具體的變化。
缺乏乙個提綱挈領的整體流程說明。他採用了多執行緒來加速整個系統,但是他沒有對整個流程進行說明,這導致了我在後期新實現自己的方法的時候,誤以為之前都有時序上的一致,然後導致自己的設計出現了嚴重的失誤。沒有整體上的流程說明,雖然自己可以做到對程式何時何狀態的理解,但是對於後來人而言,常常找不到對應的時機。
在新上手乙個不是非常熟悉的框架的時候,我對他們的經驗就是先看對應的資料結構,通過資料結構,你至少可以了解基本的資料,這些資料往往代表著業務需要的資訊,也就表示了業務需要的資料。然後盡可能對著**,用乙個例項跟著走一遍,有的時候,雖然跟不上,這時候可以利用 debug 的形式,針對不同的資料做到流程上的了解。但是這可能會陷於細節而忽視了整體的設計。如果對一些通用的資料型別不是很了解的話,可以在 debug 的時候,在進行檢視,看具體的場景下,這個通用的資料型別是什麼樣的,雖然可能會僅僅著眼於某些情況,忽視了沒有嘗試到的場景,但是也對於理解資料型別有一定的幫助。
如何在 GitHub 建立乙個「有人用」的專案
近年來,github的個人頁面已經逐漸成為程式設計師的求職名片,它充分展示了程式設計師在筆試面試中很難展示的真正程式設計能力。甚至有企業在招聘廣告中說,github專案的星數只要達到一定數量,就免試錄取。這也在一定程度上說明了問題 github上的專案必須要有人用,才說明你做的軟體是有價值的。那麼去...
如何高效完成乙個沒有思路的課題
這個學期有很多事,但是發現效率都不高,總是拖到最後完成。但是通過實踐來看,這些看似完不成的專案是有途徑完成的。0 分割任務。分割成非常小的維度,保證每個任務實施都非常簡單,沒有心理負擔。就算沒有整體思路,還是可以一步一步推進一些,找到下一步的線索。1 搜尋技巧 學習概念,理解原理 搜尋三篇認為比較好...
沉思錄一 如何維護乙個複雜的網路應用
寫下這個文章的時候,剛從乙個複雜的linux服務端網路應用專案中脫出,除去身心的疲憊不堪後,不得不反思標題中的問題,如何破局?這樣在下次面對相似問題時,可能就多幾分倖存的機率。最想知道我是在什麼地方死的,這樣我就可以避開死亡了。這個是查理芒格多次講過的話。但是很多人被困難問題擊敗後,都沒有找到自己是...