阅读好的开源项目源码能够带来什么

观千剑而后识器

合抱之木生于毫末,九层之台起于累土。同样的,代码大神始于小白,这是一个不可缺少的阶段。我们在起初开始进入编程的大门的时候往往会因为怎么去实现一个很简单的功能或者需求而绞尽脑汁,那个时候我们是苦恼于不会。到后来慢慢的我们能够依照我们自己的知识体系去实现需求了,可能初期会觉得很开心,毕竟自己获得了成长,从不会到会是一件很值得开心的事情。但不知道大家有没有这样一种经历,那就是几个月甚至几周之后再回过头来看当时写的代码就会觉得很不好理解,可能百思不得其解自己当初为啥有这么写,于是要么继续忍受要么推翻重写,循环不止。包括我自己现在仍然会有这种感觉,我觉得本质原因是因为在最初设计代码的时候就没有做好,或者说压根就不知道好的代码设计应该是怎么样。那怎么去解决这样一个问题呢,我的选择是去阅读高质量的开源项目源码,去分析,去体验好的代码设计流程是怎么样的,然后再慢慢体现在自己的日常代码中,最后形成自己好的代码风格,我本人也在朝着这个方向而努力。

最佳实践还是奇淫巧技

编程语言有很多种,入门往往简单,但是想要真真的掌握一门语言的最佳实践和一些奇淫巧技确需要时间和经验的积累。要实现一个目的在Python 里面可能有十种写法,在Java 可能也有五种写法,在Golang 里面可能也有三种写法,每种语言的最佳实践不一样,也就是说如果把Java 的写法思维硬搬到Go 里面可能不合适或者说写起来很别扭。而通过阅读高质量优秀的开源项目的源代码可以借鉴、模仿优秀工程师的最佳实践 并且思考为什么他们要这么写,这么写和自己之前的实现方式的异同和优劣,进而转化成自己的东西,慢慢地在之后自己的代码中就会有所体现,代码质量也会相应的提高。另外就是一些语言特有的奇淫巧技,有的能够大幅度缩减代码量的同时保持不错的可读性,有的能够用到编译器的特殊优化进而提升代码的性能,这些奇淫巧技基础教程里面往往不会教你,但是往往会出现在优秀的开源项目中。虽然在正式的工程中不提倡使用各种奇淫巧技和黑魔法,但在特殊场景下或者易于被理解的场景下的使用是被允许的,而使用前提是你懂得这些东西。

面试加分

这个看起来可能有点功利性,但阅读好的源码是为了提升自己,自己的水平提升了之后带来的自身竞争力的提升也是水到渠成的事情,现在岗位招聘的JD 上经常可以看到开源项目贡献者和源码阅读者加分的字眼,只是因面试官和企业的风格不同加分程度不同罢了。至于为什么加分也很容易明白,举个例子,JD 要求熟悉kafka,现在有三个工程师,第一个仅仅是简单的使用过,或者仅仅自己写过一些demo 第二位能够理解基本的概念 ,在项目中使用kafak解决了一些问题并且成功上线,而第三位对基本概念很熟悉的同时还阅读过kafka 的源代码,能够理解整个kafka 的主要运作流程,那么他大概率能够理解kafka 的特性和其他消息队列的异同,那么日常场景的使用和技术选型是基本没有问题的。显然在其他方面相差不大的情况下第三位工程师自然占有优势。所以阅读优秀开源项目的源码不是为了面试加分,但随着自身水平的提升,面试中占得优势是水到渠成的事情。

为自己的开源之路铺路

有自己的开源项目并且被人认可使用是一件很有成就感的事情,在我看来成就感是一件很重要的事情,它推动我去做很多事情,而要让自己能够做出真正有影响力的开源项目的前提条件就是:

  • 你的项目确实能够解决目前一些场景下的痛点
  • 足够稳定
  • 有好的代码质量,易于扩展,这样才会有更多的人愿意参与进来改善,形成一个良性循环。

而以上几点我认为从阅读源码开始都是一个很不错的选择。

阅读源码的技巧

很多同学可能觉得阅读开源项目的源码很难,打开一个开源项目可能几十个文件,数万行甚至数十万行代码,觉得无从下手,有这种感觉是正常的,那么如何去解决这个问题呢,我个人觉得有以下几个办法:

  • 阅读源码之前要先会使用,如果连这个开源项目的功能和解决的问题都不知道的话直接扎进源码里面那将会事倍功半,大概率无法坚持下去
  • 最好是带着目的性的去阅读,比如你想弄清楚具体某个问题该项目是如何解决的,这样有针对性,也更容易以点扩展到整个面
  • 抓重点,再优秀的开源项目也不是所有的代码都值得阅读,要学会抓住重点
  • 学会不求甚解,这个看起来有点奇怪,但可能某个问题你实在卡住了,怎么也想不明白,这个时候可以尝试线绕过,因为知识是有体系的,阅读到后面的某个地方可能会让你联系到一起,恍然大悟

总结

上面说这么多阅读源码的好处,其实总结起来就一个,阅读优秀的源码能够帮助自身的提升,让自己多思考。

go高薪必备:面试框架17讲 文章被收录于专栏

<p> <span style="font-size:14px;">本专刊是Go开源项目源码分析专栏,共 17 篇文章,挑选了Go 开源界知名的 4 个开源项目gnet(高效的网络库)、gin(知名的Go微型web框架)、fasthttp(高性能web框架)、nsq(Go消息队列)来对它们进行源码分析,分析它们的设计思想和代码实现。每个项目的讲解都是由浅入深,由设计思想的剖析到源码实现的分析,更易于读者理解。</span> </p> <p> <br /> </p> <h2> <b><span style="font-size:16px;line-height:1;">购买须知:</span></b> </h2> <span style="font-size:14px;">订阅成功后,用户即可通过牛客网 PC 端、App 端享有永久阅读的权限;</span><br /> <span style="font-size:14px;">牛客专刊为虚拟内容服务,订阅成功后概不退款;</span><br /> <span style="font-size:14px;line-height:1;">在专刊阅</span><span style="font-size:14px;line-height:1;">读过程中,如有任何问题,可在文章评论区底部留言,或添加牛客导师,加入读者交流群;</span><br /> <span style="font-size:14px;">想成为牛客作者,请邮件联系yinxiaoxiao@nowcoder.com,邮件主题【牛客作者+写作方向】,并附上个人简历一份及近期作品一份;</span><br /> <p> <span style="font-size:14px;">牛客专刊版权归本平台所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布 / 发表,违者将依法追究责任</span><span style="font-size:14px;">。</span> </p> <p> <br /> </p>

全部评论

相关推荐

好在哪里了?我请问了?
_hengheng:很好啊,我看旁边同事都入职了都有工作
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-23 18:28
点赞 评论 收藏
分享
点赞 评论 收藏
分享
_mos_:忍耐王
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务