不知道大家有沒有這樣的經歷? 某種代碼操作,之前很少寫,突然要用了但想不起來怎麼寫了;某個工具庫很久沒用了,現在想用了連庫名都忘記了;某個命令行,曾經用過,現在已經忘記它有哪些參數了…… 這樣的經歷我反正是遇到好多次了。程序猿做久了,難免偶爾需要寫一些很難的代碼(低頻代碼),這種代碼的特點就是偶爾用一次,之後好久都不會用,但下次再用的時候又得重新查資料。 所以程序猿總是調侃自己是面向百度/CSDN/GITHUB編程。
為了讓大家回憶起被低頻代碼支配的恐懼,我們先拋一個具體的例子:你能用Java寫出讀寫文件的代碼嗎? ,坦誠的講,雖然我是一個Java程序猿,但讓我寫這個我還是得去查下相關的資料。雖然這種問題出現的頻次很低,但遇到一次還是得需要花點時間重複折騰的。所以,我後來的選擇就是把這些代碼片段都記錄下來,之後如果再遇到,可以直接複製粘貼,相較於重新上網查閲資料,快的不是一點半點。每次遇到類似的問題,保守估計可以節省十幾分鍾、半小時的。
我另外要説的是,記錄代碼片段不僅僅是為了以後節省時間,它也可以間接幫助你建立某些方向的知識體系。你想想看,如果你每次遇到新的問題,解決後得到了一段代碼片段,你想把它記錄下來,並且能讓其在以後還能快速回憶起來,你就得額外補充一些信息,補充信息的過程就反推你去獲取更多的內容。長久下來,你積累的知識也會越來越多。比如我自己在記錄代碼片時我肯定會補一些代碼註釋,或者是額外的代碼示例。
記錄代碼方式很多,比如Github Gist ,不過這種比較適合放一些開源的代碼片段,不適合私用。你也可以直接使用雲筆記保存代碼片段,只要做好歸檔、標籤、寫好描述,方便檢索就行。 也有專用的代碼片段軟件,比如我在用的SnippetsLab(付費軟件),相較於普通雲筆記來説,SnippetsLab代碼的歸檔和檢索還是方便的多,個人還是覺得挺好用,用了好多年了。 下圖是我之前處理視頻時記錄的一些ffmpeg操作,如果再用ffmpeg,這些內容必然會派上用場。
看到這裏你肯定也想立即建立自己的代碼片段庫了,最主要的問題就是哪些代碼應該被存起來。我的建議就是把你還不熟悉,但未來肯定會用到的代碼片段都存起來,已我自己的代碼庫為例,我會存儲以下幾類代碼片。
某些不常用命令的使用
我自己就存了好多awk相關的命令,保存的內容甚至可以出一篇完整的awk教程了。 新生代的程序猿可能都不用awk了,甚至是不知道awk是什麼了,有興趣可以看下我之前寫的一篇文章Linux三劍客之awk入門指引。雖然我早已不做運維了,但工作中還是偶爾會用到awk來處理一些文本數據(應用日誌),比如前兩週我們受騰訊雲故障的影響,有一批設備有問題,但我們無法快速找出來,我就是用grep、awk命令從日誌裏撈篩出來的,1千多台設備,前前後後用了不到5分鐘。
某些工具類的使用
某些類庫之前用過,現在要用,突然想不起來怎麼用了。這種經歷不管是任何語言任何崗位的程序猿應該都是非常常見的。比如我們Java程序猿常用的guava庫、apache-common庫、Jdk裏一些低頻使用的包…… ,node、python、go……程序猿們應該也有類似的困惑吧,畢竟都可以隨意import。
一些特殊語法
雖然我已經寫Java很多年了,但是很多Java的語法糖用的還不熟練。舉個簡單例子,比如Java lambda表達式裏的groupingBy,自己還是寫不出來,畢竟沒有系統性學過lambda表達式,也沒經常使用到,這種我就直接記錄,下次遇到直接抄。
某些特殊配置的方法
你知道nginx怎麼配置https嗎? 你知道jvm怎麼配GC相關的東西嗎? 你知道xxx如何通過命令行啓動嗎?…… 我不知道,但我代碼庫裏有,20秒內我就可以給你答案。
一些完整的代碼Demo
雖然本人是一名專職的Java程序猿,但偶然也是需要寫python和shell腳本去實現一些功能的,因為不是專業的,甚至部分語法都得現查,所幸使用其他語言的場景並不多,我乾脆直接保存完整的代碼Demo,下次在其基礎上改吧改吧就行了。
以上就是我目前代碼庫裏存儲的幾大類別代碼,也有些代碼片段我之前會存,但目前不會再存了,因為隨着自己工作時長的增長,有些東西已經爛熟於心了,未來這些無用的代碼也會逐漸清理出去。 最後還有幾個需要注意的點也提醒下大家一下:
- 代碼片補充好額外信息
記錄代碼片的目的是為了之後可以快速複用,或者是能快速回憶起來某些信息。首先就要求代碼片能被快速檢索到,寫好代碼描述、打好標籤、做好分類,保證能快速找到代碼,否則沒有任何意義。 其次,你找到代碼後也得能看懂啊,所以一些複雜的代碼建議加上詳細的註釋,參考資料,或者更多形式的實例。 - 注意信息安全
我知道肯定有人會在代碼片裏保存賬號密碼,這種帶敏感信息的代碼片就不要放公網上了,也不要隨意分享了,否則泄露了就得不償失了。
今天文章的內容就到這了,喜歡請點贊,有用請關注,我是XINDOO,一個用高效來賺取划水時間的程序猿。