导航:首页 > 源码编译 > 为啥要阅读源码

为啥要阅读源码

发布时间:2023-02-09 11:03:02

⑴ 如何阅读源代码

一个大项目的源代码,不要过份详细的阅读。大项目,其代码量基本上是可以吓死人的。过份的关注细节,常常会拘泥于细节,而忽略了整体框架。当你能够看清框架的时候,亦花费了太多的时间。
因此,阅读一个大项目的源代码,其目的不在于欣赏代码细节,而在于迅速看清项目整体框架的大概面貌:都有那些模块,这些模块是干嘛的(不关心具体怎么干),模块之间的通讯机制大概是怎样的,然后在考虑子模块,通常只要掌握两级子模块就够了。花上1,2天的时间掌握这一切,就达到了阅读大项目源码的目的。因为一旦你掌握了框架,你就可以按照这个框架实现这个项目,虽然和原项目全然不同,但是完成的需求却是一样的。
在软件中,架构才是本质。
也许你指望详细阅读大项目源代码能看到高质量的代码,但是,大项目通常都是团队的劳动成果,每个人的不同水平造就了代码质量的高高低低,一个人在不同时间不同环境的代码质量也是不同的。要指望在大片源码面前找到高质量,简直是天方夜谭。
也许你要从阅读源码中掌握某项技术细节,比如bsp,又或者换装,那么,最好的建议是查找相关的技术文档以及文档上所附带的sample code,这种sample code一般不会附带任何干扰,简洁得只是为了证明该技术而存在的。如果没有这些东西,而只能从大项目源码中找的话,你提前先了解了框架,能更快的查找和定位到表达该技术的文件。但是通常都会比较不幸,因为你为了明白这一技术,通常要先理解混入其中的另一技术。
最后谈谈怎样才能阅读到高质量的源代码。何谓高质量?是指算法出人一表(比如某种o(1)的排序法)?还是采用了极端深奥的语言特性将某实现完美表达(比如模板的灵活运用)?无论是哪种,最好的来源是书,如《STL详解》,或者《inside XX》这样的东西。书的作者通常就是这些高质量代码的作者,他会带领你探索这些源码背后的真相。

⑵ 一开始学习java有必要看源代码吗诸如Arraylist,Linkedlist的这些源代码

你好,看源码是可以帮助你以后写代码的。如果你是刚开始学,就没有必要看那些东西。但是你要是有能力的话,看看还是很有帮助的,你说的那几个类,等你学习到了,最好还是看看,可以加深你对他们的理解。

⑶ 大牛们是怎么阅读 android 系统源码的

如果只是想看看一些常用类的实现, 在Android包管理器里把源码下载下来, 随便一个IDE配好Source Code的path看就行.
但如果想深入的了解Android系统, 那么可以看下我的一些简单的总结.

知识

Java
Java是AOSP的主要语言之一. 没得说, 必需熟练掌握.
熟练的Android App开发
Linux
Android基于Linux的, 并且AOSP的推荐编译环境是Ubuntu 12.04. 所以熟练的使用并了解Linux这个系统是必不可少的. 如果你想了解偏底层的代码, 那么必需了解基本的Linux环境下的程序开发. 如果再深入到驱动层, 那么Kernel相关的知识也要具备.
Make
AOSP使用Make系统进行编译. 了解基本的Makefile编写会让你更清晰了解AOSP这个庞大的项目是如何构建起来的.
Git
AOSP使用git+repo进行源码管理. 这应该是程序员必备技能吧.
C++
Android系统的一些性能敏感模块及第三方库是用C++实现的, 比如: Input系统, Chromium项目(WebView的底层实现).

硬件

流畅的国际网络
AOSP代码下载需要你拥有一个流畅的国际网络. 如果在下载代码这一步就失去耐心的话, 那你肯定没有耐心去看那乱糟糟的AOSP代码. 另外, 好程序员应该都会需要一个流畅的Google.
一台运行Ubuntu 12.04的PC.
如果只是阅读源码而不做太多修改的话, 其实不需要太高的配置.
一台Nexus设备
AOSP项目默认只支持Nexus系列设备. 没有也没关系, 你依然可以读代码. 但如果你想在大牛之路走的更远, 还是改改代码, 然后刷机调试看看吧.
高品质USB线
要刷机时线坏了, 没有更窝心的事儿了.
软件

Ubuntu 12.04
官方推荐, 没得选.
Oracle Java 1.6
注意不要用OpenJDK. 这是个坑, 官方文档虽然有写, 但还是单独提一下.
安装:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
sudo apt-get install oracle-java6-set-default

Eclipse
估计会有不少人吐槽, 为什么要用这个老古董. 其实原因很简单, 合适. 刚开始搞AOSP时, 为了找到效率最优的工具, 我尝试过Eclipse, IntelliJ IDEA, Vim+Ctags, Sublime Text+Ctags. 最终结果还是Eclipse. 主要优点有:
有语法分析 (快速准确的类, 方法跳转).
支持C++ (IntelliJ的C++支持做的太慢了).
嵌入了DDMS, View Hierarchy等调试工具.
为了提高效率, 花5分钟背下常用快捷键非常非常值得.
调整好你的classpath, 不要导入无用的代码. 因为AOSP项目代码实在是太多了. 当你还不需要看C++代码时, 不要为项目添加C++支持, 建索引过程会让你崩溃.
Intellij IDEA
开发App必备. 当你要调试系统的某个功能是, 常常需要迅速写出一个调试用App, 这个时候老旧的Eclipse就不好用了. Itellij IDEA的xml自动补全非常给力.
巨人的肩膀

AOSP项目官方: https://source.android.com/source/index.html
这个一定要先读. 项目介绍, 代码下载, 环境搭建, 刷机方法, Eclipse配置都在这里. 这是一切的基础.
Android官方Training: https://developer.android.com/training/index.html
这个其实是给App开发者看的. 但是里面也有不少关于系统机制的介绍, 值得细读.
老罗的Android之旅: http://blog.csdn.net/luoshengyang
此老罗非彼老罗. 罗升阳老师的博客非常有营养, 基本可以作为指引你开始阅读AOSP源码的教程. 你可以按照博客的时间顺序一篇篇挑需要的看.但这个系列的博客有些问题:
早期的博客是基于旧版本的Android;
大量的代码流程追踪. 读文章时你一定要清楚你在看的东西在整个系统处于什么样的位置.
Innost的专栏: http://blog.csdn.net/innost
邓凡平老师也是为Android大牛, 博客同样很有营养. 但是不像罗升阳老师的那么系统. 更多的是一些技术点的深入探讨.
Android Issues: http://code.google.com/p/android/issues/list
Android官方Issue列表. 我在开发过程中发现过一些奇怪的bug, 最后发现这里基本都有记录. 当然你可以提一些新的, 有没有人改就是另外一回事了.
Google: https://www.google.com
一定要能流畅的使用这个工具. 大量的相关知识是没有人系统的总结的, 你需要自己搞定.
其它

代码组织
AOSP的编译单元不是和git项目一一对应的, 而是和Android.mk文件一一对应的. 善用mmm命令进行模块编译将节省你大量的时间.
Binder
这是Android最基础的进程间通讯. 在Application和System services之间大量使用. 你不仅要知道AIDL如何使用, 也要知道如何手写Binder接口. 这对你理解Android的Application和System services如何交互有非常重要的作用. Binder如何实现的倒不必着急看.
HAL
除非你对硬件特别感兴趣或者想去方案公司上班, 否则别花太多时间在这一层.
CyanogenMod
这是一个基于AOSP的第三方Rom. 从这个项目的wiki里你能学到很多AOSP官方没有告诉你的东西. 比如如何支持Nexus以外的设备.
DIA
这是一个Linux下画UML的工具, 能够帮你梳理看过的代码.
XDA
http://www.xda-developers.com/
这里有最新资讯和最有趣的论坛.

⑷ 知道源代码有什么好处要源代码用了干什么

一、源代码用途:

生成目标代码,即计算机可以识别的代码。

对软件进行说明,即对软件的编写进行说明。为数不少的初学者,甚至少数有经验的程序员都忽视软件说明的编写,因为这部分虽然不会在生成的程序中直接显示,也不参与编译。但是说明对软件的学习、分享、维护和软件复用都有巨大的好处。因此,书写软件说明在业界被认为是能创造优秀程序的良好习惯,一些公司也硬性规定必须书写。

需要指出的是,源代码的修改不能改变已经生成的目标代码。如果需要目标代码做出相应的修改,必须重新编译。

二、源代码好处:

1、它们能降低企业部署网络和各种服务的成本,如果采用开源方案,你只需要一台服务器,其他的都可以免费,而用windows,你必须花钱购买操作系统(假设没有盗版)。

2、可以在源代码的基础上进行二次开发,完善或丰富现有系统功能。

3、参考学习。通过分析源代码,可以学习开发、了解开发者的思路,学习开发者如何通过巧妙的方式、算法解决业务问题,阅读源代码是提高开发水平的快捷方式。

4、拥有源代码,可以占据主动权。如果开发方在后期对运维或增加功能方面,报价远超市场价,委托方有源代码的话,可以考虑更换开发方,而不会因此造成整套软件重写。

⑸ 怎么阅读spring源码

从HttpServletBean的init()进入,再到initWebApplicationContext(),再到refresh(),再到refreshBeanFactory(),再到finishRefresh(),直到服务器启动成功。不知道读了多少遍,
但是源码的东西实在的太多了,想要完全读懂,完全理清头绪,还差很远啊。所以我只重点关注了两块内容,就是bean的定位加载解析注册、bean的实例化两大块内容,其他地方稍作了解,没有太过深入。
整个容器的启动流程,都在AbstractApplicationContext的refresh()的模板方法中了。

复制代码
1 public void refresh() throws BeansException, IllegalStateException {
2 synchronized (this.startupShutdownMonitor) {
3 // Prepare this context for refreshing.
4 prepareRefresh();
5
6 // Tell the subclass to refresh the internal bean factory.
7 beanFactory = obtainFreshBeanFactory();
8
9 // Prepare the bean factory for use in this context.
10 prepareBeanFactory(beanFactory);
11
12 try {
13 // Allows post-processing of the bean factory in context subclasses.
14 postProcessBeanFactory(beanFactory);
15
16 // Invoke factory processors registered as beans in the context.
17 (beanFactory);
18
19 // Register bean processors that intercept bean creation.
20 registerBeanPostProcessors(beanFactory);
21
22 // Initialize message source for this context.
23 initMessageSource();
24
25 // Initialize event multicaster for this context.
26 ();
27
28 // Initialize other special beans in specific context subclasses.
29 onRefresh();
30
31 // Check for listener beans and register them.
32 registerListeners();
33
34 // Instantiate all remaining (non-lazy-init) singletons.
35 (beanFactory);
36
37 // Last step: publish corresponding event.
38 finishRefresh();
39 }
40
41 catch (BeansException ex) {
42 // Destroy already created singletons to avoid dangling resources.
43 destroyBeans();
44
45 // Reset 'active' flag.
46 cancelRefresh(ex);
47
48 // Propagate exception to caller.
49 throw ex;
50 }
51 }
52 }

其实,我并没有上来就看源码,而是先从看书开始,稍微了解,知道了一些关键点,关键流程,自己产生了一堆疑问,然后带着疑问去读源码,读着读着,发现有些疑问就这么解决了。

⑹ python的源码值得去读吗

python的源码值得去读!
1.无论是有没有其他语言的经验,入门Python都很简单。Python拥有简单直观的语法,方便的语法糖,以及丰富的第三方库。只要一个基础的Python教程,大家基本上都能无障碍的入门。
2.在入门之后,很多人对于进一步学习的建议都是“做项目”、“看源码”,然而这样的建议实际是较难实现的,自己执行的效率会很低。
3.对于初学者而言,Python入门很简单。入门之后只靠基础语法也完全可以做到平时写写脚本,解决自己工作、生活上的重复性劳动。想要什么功能,基本上都能找到方便的库。在只求应用,不求理解的情况下,很快就能实现日常表格处理、文件下载、邮件发送等功能。甚至像图像处理、OCR这样“高端”的功能也有对应的工具库可以使用。
4.但是做到这种程度只是小打小闹,想要真正的在开发工作中使用Python语言,或者是在GitHub上贡献开源代码,都是远远不够的。这时候,初学者的常见问题主要集中在以下四点:
4.1学会了语法,但是不会应用。
仍然是用其他语言的逻辑在写Python代码,不是Pythonic的代码。
4.2Python项目结构不合理。
缺少对更深入主题的研究,例如装饰器、异常处理、多进程多线程、设计模式等。
5.传统建议的解决方案
5.1对于初学者而言,应聘到一个使用Python语言做开发的团队显然是不现实的。那么基本上项目的来源就是自己找的练手课题或者在GitHub上参与开源项目。
5.2自己找个项目进行练手可以说是效果最差的方式了。它实际上还是摸着石头过河,接触不到优秀的源码和实现方法,也没有人指导。最终也只是实现了功能而已,不论是代码设计还是项目结构,都是闭门造车,提升有限。最大的作用也就是提高对语法、基本数据结构和标准库的熟练程度。

⑺ 怎样开始阅读scikit-learn的源码是否值得读

作为scikit-learn的一个小contributor,来简单说下个人看法吧。
首先,我认为这取决于题主本身在Python、机器学习方面的水平。因为题主没有提供这方面信息,我也只能简单介绍一下scikit-learn的现状,让题主自行判断。

如果你理论基础不错,Python基础也扎实,只是想看看那些机器学习算法比较靠谱的实现,那读scikit-learn的代码应该是没错的。虽然不少常用算法,比如decision tree用了cython,svm直接wrap了libsvm,但后期的代码基本原则都是优先Python实现,只有Python实在太慢的时候才会考虑用cython加速。

另,如果真是初学者为了学机器学习的话,与其看别人代码不如自己尝试实现,不一定要效率高,但至少得能用。这样比你一知半解的看完scikit-learn都有用。

⑻ 为什么我们需要阅读优秀开源软件代码

所幸的是,有相当多这类程序都开放了源代码——它们也正是因此才得以在众多聪明头脑的协作下逐步达到今天的高度。开放源代码,这意味着我们可以拆开每一颗螺钉,走近每一个零件,观察每一个动作,触摸每一根链条,转动每一个齿轮(阅读代码,运行,调试)。我们可以像孩子一样拆散它们,然后再拼到一起,可以摆弄它们的位置(修改)。在清楚一些时,我们可以把其中的一些零件用自己制作的替换掉(实验),还可以把零件卸下来安在自己的机器里(复用)。
当然,最初我们很可能会被慎密而复杂的结构搞晕,但一旦开始渐渐理清它们的关系,我们会首先为那些按高品质行业标准打造的标准零件的规范赞不绝口(代码规范,软件包构建,接口设计),接着为那特殊零件赏心悦目的精湛工艺而惊叹(语言技巧,数据结构/算法的设计、选择和实现,细节处理),然后为它们各司其职的明确分工和合理的安排而心服口服(模块化设计,接口设计,代码组织结构),其间我们会不断得到零件上友好简洁的标注的帮助(注释和可读性)。我们甚至会偶然为匠人们的幽默而捧服。有时我们会感到,那些聪明的家伙在对我们微笑,用带着一点挑衅却又友好的语气说道:"嘿,怎么样?我的代码写得不错吧?你能写得更好么?"
后来,我们会发现诸多不完美,其中有些被证明是我们理解的问题,但有些确实需要改进,那么就动手吧,这时,我们可以恭喜一下自己——我们已经跟上了这些聪明黑客的节奏,并且开始融入其中。
如果我们对历史版本进行考古,会有更多发现,我们会看到今天我们面前的强壮青年经历过怎样的幼稚,看到他的成长轨迹。这时将会明白,罗马不是一天建成的,更不是一个人建成的,那些代码中包含的是大量黑客多年积累的努力和智慧,每一次修改和重构都吸取了上一版本的教训。今天宏伟光鲜的罗马城下,压着无数旧代码的尸体,而大师们也是在经历这些风雨后才成为大师。所以,优秀的开源软件代码所示范的手段,是历史之浪淘出的黄金(也有些带有古董的痕迹,但不影响代码的质量)。如果我们不去吸取这些血泪浇灌的营养,或许就免不了重流前人流过的血泪了。
总结一下,通过阅读优秀的开源软件代码,我们能够
可以修改、重写后通过运行、调试进行实验
找到可复用的代码用在自己的项目中
学到代码编写、软件包构建等工程规范
学到语言技巧,数据结构/算法的设计、选择和实现,以及细节处理方法
学到模块化设计方法和良好规范的代码组织方法
学到良好的编程风格和注释规范
理解编程理论和原则
了解软件发展规律,吸取前人经验教训
对它们进行改进当然,还有最不重要,也是最重要的:满足好奇心

⑼ 为什么以及如何阅读源码

对于这些问题,说到底主要是因为经验不够,而经验主要从项目实践中积累,所以招聘单位一般都会限定工作时间大于 3 年,因为这些人的项目经验相对较丰富,项目中遇到的场景相对较多。
工作经验的积累来自于年限与实践,然而看源码可以扩展我们的思路,这是变相增加我们经验的不错方法。虽然不能短时间内通过时间积累经验,但是可以通过学习开源框架、开源项目来获取。
另外进职场后一般都要先熟悉现有系统,如果有文档还好,没文档的话就得自己去翻代码研究。如果大家之前对阅读源码有经验,那么在研究新系统的代码逻辑时就不会那么费劲了。

阅读全文

与为啥要阅读源码相关的资料

热点内容
电影邪恶 浏览:895
爸爸出海之罪孽泰国免费 浏览:201
比较推荐的看片网站 浏览:80
一个老头淘金的电影 浏览:175
谁还有看片网址 浏览:184
熊:出 浏览:176
阿里程序员不加班离职 浏览:45
六级pdf 浏览:855
jsp嵌入java代码 浏览:162
Python中Windows字体颜色 浏览:693
n7笔记app哪个好 浏览:416
kindle用什么app好 浏览:720
方舟加密服务器怎么进 浏览:61
传文件夹太慢 浏览:219
基于单片机的仓库 浏览:378
央企直营朔源码燕窝 浏览:341
日本校园老师电影 浏览:65
买黄金首饰上什么app 浏览:452
共享pdf 浏览:343
老武侠电影,是一个女的用乳房打人,名字 浏览:650