不知道大家有没有这样的经历? 某种代码操作,之前很少写,突然要用了但想不起来怎么写了;某个工具库很久没用了,现在想用了连库名都忘记了;某个命令行,曾经用过,现在已经忘记它有哪些参数了…… 这样的经历我反正是遇到好多次了。程序猿做久了,难免偶尔需要写一些很难的代码(低频代码),这种代码的特点就是偶尔用一次,之后好久都不会用,但下次再用的时候又得重新查资料。 所以程序猿总是调侃自己是面向百度/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,一个用高效来赚取划水时间的程序猿。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。