Free browsing:如何阅读源代码/项目:Editor.md

项目发现

Editor.md

一个可内嵌的实现Markdown编辑器的。。。东西??
原来CSDN的就是用这个做的。。。

好奇的点

如何实现双屏同步滚动?
-抛锚?

Quid:如何阅读源代码

Summary

follow开发者给出的:
手册(Getting Started等);例子(Example)
写注释,理解函数作用的对象和效果。
使用IDE软件,帮助理解函数之间的嵌套调用。
善用工具:ctags

Ans:流程图

  1. 画出整个程序的流程图,…  
  2. 对流程各节点(函数或过程)的理解。流程的每一节点是构成整个流程的不可缺少的部份。   
  3. 再把流程和流程各节点串起来理解整个程序,可能的话最好写出读书笔记。  
  4. 如果想深刻的学习到源代码的精髓所在,请写一个相近的程序进行操练。当你理解了这个程序并不表明你掌握了这个程序,只有在你操练一个相近的程序时,你才知道你到底理解了多少,掌握了多少。
    作者:夏梦竹
    链接:https://www.zhihu.com/question/19637879/answer/13542394
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

-

Ans: Overview of projects worth reading

江疆

(前面有人提到了 Redis、Lua 和 nginx,这些我也推荐)

读代码可能有两种原因,一是对这个东西某处不满意想改,二是想学习其中的设计实现思路,前者动力更直接一些,如 @陆亦斌 所说,后者则不好选,因为纯粹泛泛地看跟你实际环境关系不大的代码,其实不太容易学到东西。而且现代软件设计其实也充满了许多妥协和折衷,大家最常用的软件,往往不是代码最干净的,而是做了许多妥协折衷的。

比如最明显的有 Linux Kernel,有很多风格不一致的代码 (但这并不减弱它的学习价值);mplayer 的代码是我见过的最丑陋但又非常实用的,在这样的代码基础上为啥能够活跃发展到今天,也很值得研究;vim 代码打满了各种 #ifdef,你看了也会很惊讶为啥一个人能维护如此错综复杂的代码这么多年。我们有句老话,叫做水至清则无鱼,软件设计其实很多时候是在受限的条件下解决问题的本事。 Beautiful Code [1] 介绍了很多精彩的代码,Beautiful Architecture [2] 介绍了很多值得学习的架构。下面还可以补充一些:

git
FreeType
fontconfig
cairo
NetBSD 的用户空间代码
DTrace
WebKit
Mac OS X 的 launchd

从扩展思路的角度来说,一个程序员应该好好读过这样一些代码:

一个操作系统内核
一个编译器
一个解释器
一个数据库
一个 Web 服务器
一个 Web 浏览器
一个编辑器

因为这些都是几十年来被频繁地反复实现的代码,无数天才的程序员在这些领域发挥智慧,所以在它们各自领域“state of the art”的代码,可想而知质量是很高的。

[1] http://oreilly.com/catalog/9780596510046
[2] http://oreilly.com/catalog/9780596517984

https://www.zhihu.com/people/jjgod/answers

作为编译器方面的我建议看 Larceny 项目,这是一个高效的 Scheme 编译器,生成 x86 和 SPARC 机器代码、C 代码或者 CIL 用于 .net。作者是 William D. Clinger,Scheme 标准组成员。

Ans: 单元测试&示例代码&架构文档

姜宁
专职参与Apache旗下多个开源项目 Camel, CXF, ServiceMix, ActiveMQ 开发的攻城师一枚。

我很认同庄表伟总结的 “学习开源,就尽可能在代码里找答案,而不是在代码之外找答案,那些都是二手的,而且很可能是不准确的。” 但是如何读好,读懂代码,我这边还是有不同的认识。

  1. 需要从代码管理库下载完整的源代码,而不是简单的源代码文件包或者source.jar.
    这样做有很多好处,一个是你可以获取代码的修改记录,还有你可以获取到完整的测试代码,当你要提交patch的时候,你可以借助版本管理工具生成针对不同版本的patch。

  2. 示例代码与单元测试
    示例代码可以帮助你学会使用相关开源项目的API。很多朋友在使用开源项目的时候遇到一个小问题就发信给开发者要这样或者那样的示例代码,其实他们没有发现大部分的开源项目在开发的过程中,为了验证其实现的功能,都会写很多单元测试代码。这些代码其实是非常好的示例代码。可能下源码,建工程会花费你几个小时的时间,但是如果你想深入了解开源项目的话,这点投资还是很有价值的。
    其实读单元测试的好处太多了,这里简单给大家列一下:

    • 由于一个单元测试一般也就是几个小时的开发工作量,你很容易就能读懂相关的代码。
    • 每个单元测试都是可以独立运行的,这样节省你跟踪调试的时间。
    • 单元测试在很大程度定义了软件的功能,可以帮助你快速掌握项目的相关API。
    • 如果你修改的开源项目的代码,你可以通过修改单元测试来验证你的修改是否正确。
    • 单元测试里面也蕴含架构的技巧,如果被测试对象没有很好解耦你是很难写出精简的测试代码的。
  3. 架构文档
    其实大部分的开源项目都会对其架构有一定的描述,这些描述可能会有点过时,但是通读一下会让你项目有一个比较深入的认识。这样做好比是让你对北京的二环,三环,四环,五环有个大体的认识。这样在你要对代码的某块内容进行详细研究的时候(例如找中关村的位置的时候,知道西北四环)就能很快定位了。

Quid:什么是Git

http://blog.a0z.me/2014/05/21/GitBeginning/

卧了个大槽

我才发现学校有这么个好东西啊!!!!!
尼玛一年半学白上了啊!!!真他妈白上了啊!!!
(虽然这学期开学以来我已经有过很多次我白白荒废了一年半大学生涯的挫败感了/(ㄒoㄒ)/

“知识库”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值