阅读源码的经验总结

作者: Maat红飞 | 来源:发表于2016-08-30 10:19 被阅读26958次

    对于一个有追求的程序员来说源码必读不可,阅读源码是一件令人头疼的事。阅读别人的代码远比自己写代码要难。Linus 是Linux的早期作者,一句影响深远的话是“Read The Fucking Source Code”,这句话既体现了阅读源码的重要性,也说明了阅读源码对于大牛来说也是一件令人头疼的事。阅读源码对于中级工程师尤为重要,通过代码可以看作者的思想。如果你源码看多了,你就可以灵活应用不同的途径实现同一效果。对于一个中级Android开发者需要阅读什么源码,Android系统源码?第三方开源库源码?完整项目源码?这些源码学习价值都很大,那我们应该学习哪一个?首先我们要明白我们的目的:短时间提升我们编码技能,希望在工作能体现出来。从这个角度来看,阅读android系统源码的价值就不是很高。所以对于一个中级工程师来说,要把第三方开源库和完整项目作为主要对象。下面我就讲一下看第三方开源库和完整项目源码的一些方法和技巧。


    前期准备:

    如何高效的Read fuck source code,首先需要解决的是我们用什么工具看代码,推荐使用Sublime Text看第三方开源库,用Android studio看完整项目。第三方开源库无须编译,直接看代码,使用Sublime text代码高亮整洁,看的很爽。效果如下:

    也许你刚开始不适应,不要担心,用不了几天你就离不开它了。那问题又来了,看代码我习惯了这种高亮风格,再也无法忍受Android studio默认的黑白风格了。没关系,很简单,只要设置一下,Android studio就可以和Sublime text 达到同样的效果。先来看看设置后的效果吧。

    只需下载jar包,导入Android studio即可。设置方式详见README文件。


    开始阅读源码:

    如果你是一个阅读源码的新手,那我建议你首先找一些代码量少的,自己感兴趣的来看。可以参考我之前写过的一片文章2016年最值得学习的五大开源项目

    如何阅读第三方开源库

    选择一些当下热门、学习价值高的第三方开源库,我认为最值得学习的第三方开源库是Volly,开源项目解析中也有对Volly的解析。

    热门的第三方开源库,网上会有很多源码解析文章,首先在网上找一些源码解析文章来看看,不要忘记,我们的宗旨之一“高效”,这样就可以快速的对项目的整体框架有一个大体的了解,再去看源码具体实现就很快了。这里很重要的一点是如何找一些有价值的学习资料,我们最常有的就是搜索引擎,今天就主要说说为什么选择Google,以后有机会再总结一下我是如何筛选、找到有价值的学习资料。要想成为高级工程师,需要有个合理的知识收集、分类方法,建立自己的知识体系。因为当今互联网时代不是比你现在会多少东西,而是比的你能不能最短的时间把他搞懂,再经过加工创新,就可以变成更好的东西。对于搜索引擎:Google>bing>baidu.其实我不想黑百度,因为我很想去百度,既然现在还不是一名百度工程师,就说一下事实吧。Google是把你想要的,最有价值的东西呈现在你面前,并且他做到了。Google会把符合搜索结果、点击量最大的、最有价值的东西排在最前,所以你很轻松就会找到你想要的东西,唯一足的地方就是大陆的访问速度太慢(如果你上不了Google可以点这里)。bing和Google差不多,想法一样,但是和Google相比,bing搜索到的有价值结果不是很多,没有Google的理想,还有一些来着百度知道。百度呢,第一眼看到的是广告,一些内容来着百度知道,呈现的搜索结果不是按价值排序,你需要自己慢慢找。我平时是Google和bing结合着用。

    在阅读的过程中总会遇到一些看不懂的代码,你可以先放一放,继续往下看。这样反复几遍,就会对代码的理解不断加深。阅读第三方开源库主要是学习他的设计思想。

    如何阅读开源完整项目

    毋庸置疑使用Android studio阅读完整项目,高效。阅读完整项目涉及的东西比较多,项目的架构不同,使用的第三方库不同,这就要求需要对项目中不熟悉的东西进行学习,也不需要都弄懂了再去看项目,边看边学,遇到不会的就去搜资料学习,这样最快了。

    第一步下载项目,在真机或虚拟机上运行,最直观的体验app的功能。然后熟悉app的架构,mvc、mvp、mvvm,目前项目中mvvp用的比较少。然后打开build.gradle文件看看项目用了哪些网络请求库、图片加载库、其他库。如果有不熟悉的,上网找一些文章学习一下。然后就打开manifasts文件找的入口activity,顺藤摸瓜往下看。同样,不懂的地方放过。看完一遍,再进行下一步,不要指望一遍就可以搞定。这里给大家推荐我的开源项目LookLook(Github地址:https://github.com/xinghongfei/LookLook):mvp架构,RxJava + Retrofit+okhttp,glide。项目结构清晰,代码量不是很大,学习价值高。

    看源代码的大体思想:1、第一遍不要纠结于具体实现,先把程序的整体框架流程搞清楚。2、不需要从头到尾看,可以跳着看,因为程序本来就是模块化的。项目的选择也很重要,代码量由少到多,功能由简单到复杂,入门的项目就是android的官方Demo。方法基本也就这么个方法,剩下就是静下心跟者自己的感觉走,反复反复再反复。

    如果你的项目看多了之后你会发现每个项目可以分为以下几个模块:

    1. UI(activity ,fragment)

    2. adapter

    3. 数据实体

    4. 第三方开源库的使用,网络、图片、其他工具

    5. 一些工具类

    6. 项目配置类

    7. 自定义View

    8. 其他(数据库,activity、fragment的基类,API等)

    任何事情都可以熟能生巧,在看了一些开源项目后,自己最好开发一个。看项目源码是一个很费脑子的事情,不能急于求成,我之前就有点着急,看了很多项目,高强度的进行了20多天后,精力消耗很大,掉头发很严重,大脑严重劳累过度,休息了一个星期才缓解过来。所以建议大家制定一个合理的学习时间,做好打持久战的准备,不要让自己强度太大。最后的感觉就是,看似不可思议的事情,只要自己静下心来,按部就班,坚持下来,最后发现都不过如此嘛。

    最后需要记住的是如果你被庞大的源码打败,不是因为你笨,而是因为你急躁,或是你选择的项目不对。编程就像写小说一样,不仅要多看,还要多练。总有一天你也会成为一个优秀的“作家”。

    小伙伴们开始 赶快Read The Fucking Source Code 吧。

    后记

    针对小伙伴们普遍提出的问题——代码看不下去,说说我自己的看法。

    1.要有决心,要有一个成为高级工程师的决心。这一点谁也帮不了你,完全靠自己。可以提前畅想一下成为高级工程师后的自己,挑女朋友、买HHKB,高清显示屏,人工力学座椅、降噪耳机,漂亮的房子、汽车、人生赢家......

    2.循序渐进,任何事情需要一个过程,由易到难。很多小伙伴一开始不知道看什么开源项目,我这里给大家列顺序。第一阶段android的官方Demo,90%都不难,有一些技术我们不常用到,可以直接略过。第二阶段2016年最值得学习的五大开源项目,可以挑自己感兴趣的看,也可以在完整项目(泡在网上的日子)找一些。首先看项目src文件夹大小,在500kb以下都可以接受。第三阶段第三方热门开源库,Volly,Universal Image loader等。第四阶段看自己感兴趣的,融会贯通,扩充知识广度,最好自己再做一个开源项目,放在Github上。第五个阶段Android系统源码,扩充知识的深度和广度,成为大牛。

    3.计划,给自己设定一个计划,一个自己想完成的计划。如几天之内看完这个项目。我一般会制定周计划、月计划,这个月学些什么内容,这个星期学一些什么内容,不需要太详细,简要的内容就可以,我会把他以便签的形式放在电脑桌面上。一个月下来,学的东西比计划里的东西要多,但是不一定会完成全部计划,计划可以作调整。

    4.其他。根据自己的习惯选择。我的习惯:编程前把手洗干净,干净整洁的桌面,一个舒服的椅子或靠垫护腰,累了再加点轻音乐,不定期跑步、打球,每天傍晚一个人散步。对于我来说一个人去散步很重要,去不会碰就熟人的地方,可以专心致志想很多事情.....。最后剩下的就是日复一日的坚持。

    如果文章对您有帮助,欢迎准高级工程师欢乐打赏....

    相关文章

      网友评论

      • 636c13e80633:最后剩下的就是日复一日的坚持
      • 67798e788591:赞一个!!!
      • bf2770eeec88:不错不错,收藏了。

        推荐下,分库分表中间件 Sharding-JDBC 源码解析 17 篇:http://www.yunai.me/categories/Sharding-JDBC/?jianshu&401


        631d17b59354:赞赞赞
      • 范蓄能:Volly写错了
      • 5997854c43de:使用Sublime阅读源码,是把代码复制粘贴到Sublime,另存为.java ??
        期待1990nice:@Maat红飞 如何跳转?
        Maat红飞: @陌悠末 直接使用sublime打开
      • 3de330007792:膜拜大神
      • glory辉:可以尝试
      • 大天使之剣:好赞 我也要准备看完几个项目后 自己依葫芦画瓢写一个 哈哈
      • PM_陈叨叨:喜欢,多谢分享
      • b578703a6efb:羡慕大神
      • 清风屏:作为新手,学到了很多东西
      • coco猫:不错
      • 吴小龙同學:建议博主建个微信公众号,感觉公众号还是更加顺便传播,而且方便读者
        Maat红飞:@吴小龙同學 非常感谢。平时写的文章比较少,也想把更多的精力放在看代码上。主要现在水平一般没有太多值得输出的东西,以后机会合适就建一个。现在如果有多余的精力看看你的,郭林,洪洋的微信号就挺好了。
      • 朋哥01:你可以通过qq把那几个项目发给我吗?我的上网环境不是很好
        Maat红飞:@9192 424335087
      • 朋哥01:大神,你工作几年了?领悟很高啊,我也想,慢慢来吧😀
        Maat红飞:@9192 :smile: 这个问题不想回答
        朋哥01: @Maat红飞 哦,一年就有这么深刻的领悟,不容易啊,北京上班吗
        Maat红飞:@9192 谢谢你的支持,我一年的开发经验
      • 195d95351de5:买HHKB,这个很强😂😂
      • dongbingliu:使用提供 setting.jar ,虽然颜色相对好看,但有些卡顿
        Maat红飞:@DB_Liu 这个没有理由啊,这只是一些简单的设置
      • 409ef7b62a1b:这个Material-Animation项目缺少个文件,怎么破啊!!!
        409ef7b62a1b:@Maat红飞 大神能给个解答么,这个包应该是databinding底下的,但是并没有啊
        409ef7b62a1b:@Maat红飞就是那个import com.lgvalle.material_animations.databinding.RowSampleBinding;这个文件我没有看到啊
        Maat红飞:@chenlianNever 没有吧
      • 阿灝:写的不错,我试试这个方法
      • Allens_Jiang:兄弟 ,官网的网页 能打开么? 可以给个链接么?
        Maat红飞:@Allens_Jiang 忘了,需要翻墙
        Allens_Jiang:@maat红飞 安卓官网demo.我试了,打不开呀
        Maat红飞:@Allens_Jiang 那个官网?
      • 未来的小玄:谢谢您的分享!
        加油,博主!!!
      • Pan_大宝:马克
      • 23375930c51d:多谢分享经验
      • Prettyxbb:多谢分享经验,迷茫路中的小白在成长,加油。
      • 丶花落谁家:跟随楼主步伐,加油加油
        Maat红飞:@丶花落谁家 :yum: 棒棒哒 :sweat_smile:
      • Afunnyrainman:6666一看就是一个有追求的楼猪
        Maat红飞:@Afunnyrainman 一起加油
      • 0f8ea2033147:mark
        Maat红飞:@深蓝魅影 :smile:
      • 3cfe20df6e9b:支持楼主
        Maat红飞:@earlyme 多谢支持
      • 5c9408df6f54:真的学习了!指明方向,感谢!
        Maat红飞:@5c9408df6f54 多谢支持,我会陆续写一些干货,敬请关注。
      • 捡淑:马克
        Maat红飞:@捡淑 谢谢支持
      • a8fe016ba8f4:代码换风格后,我想切回原来的风格,如何操作
        Maat红飞:@夏夜初雨 https://github.com/xinghongfei/android-studio-setting/issues/1
        a8fe016ba8f4:@maat小红 试过,不好用的,我直接卸载重装了
        Maat红飞:@夏夜初雨 看上面评论,已答
      • 路人葵:你好呀,请问导入你那个主题时出现这个的原因是:Cannot read scheme monokai.icls from '$ROOT_CONFIG$/colors': Unsupported color scheme version: 142
        Maat红飞:@路人葵 因该是版本问题
        Maat红飞:@路人葵 你的android studio 是2.1吗?
        路人葵:@路人葵 版本问题么?
      • cfanr:mvvp应该是mvvm吧?
        Maat红飞:@cfanr 多谢提醒。
      • 格锅:代码区域换肤成功,可是左侧显示项目结构的区域还是原来的白色,这是怎么回事
        8351ae8a3b5e:@格锅 apprerance & behavior-> menus and toolbars可以细调,一般就apperance里面选择darcula Theme就是黑色风格了。
        格锅: @maatai红飞 还是找不到设置入口,可能Mac版和win版as不一样吧
        Maat红飞:@格锅 android studio->preferences,设置黑白风格
      • FlySheep_ly:用你的方法设置了Android Studio高亮后,怎么去除高亮还原到原来的设置呢?
        Maat红飞:@FlySheep_ly android studio->preferences->Editor->Colors&Fonts->选择不同的scheme
      • Maat红飞:加油,博主
        fec66b3ed5ef:@maat红飞 你自己给自己评论 加油博主是什么意思?

      本文标题:阅读源码的经验总结

      本文链接:https://www.haomeiwen.com/subject/ausfettx.html