回答
这取决于你的兴趣,但我曾与Quake III codebase,这是写得很好,很好的合作。它写在C.
我会推荐Scott Hanselman的weekly source code articles,他确实提出了你的建议,即阅读更多的源代码以获得更好的效果。这是值得的阅读。
你会发现很多例子。但吉姆巴克说,这取决于你的兴趣。我从SharpDevelop的来源获悉了一系列的“东西”。
如果有人拥有Code Reading by Diomidis Spinellis的副本,他在那里写了哪些开源项目?
@Avinash:如果您想了解一般更多的节目,我将建议代码阅读和代码质量的Spinellis。我相信,他们有来自不同项目的代码样本,所有FOSS,所以你不仅可以阅读它们,而且可以阅读本书和最新版本中讨论的版本,从中阅读更多代码并学习。
Linux kernel是一个很好的学习方式。
我知道,由于多架构结构和大量的代码可能很难深入研究,但有一些很好的文章可以慢慢进入,如this one from Tim Jones。
我通过查看特定主题(如FAT驱动程序实现和文件系统抽象)了解了很多。
我可以推荐Simon Tatham's puzzle collection。这是一系列可用于Windows,OS X和Linux(以及Java小程序)的益智游戏(扫雷,数独,十五)。这个架构非常简单:有三个实现(每个平台一个)的前端接口,每个游戏实现一个实现的后端接口(我给出了三个示例)和一个让他们一起谈话的中端,做序列化和其他整洁的东西。
基本上,这是很好的面向对象。用C写。很容易做出贡献(我实现了灌装和范围游戏),因为它有很好的文档记录,并且很容易阅读。
相对较小,但有足够的复杂性,以便能够从中吸取教训,我的投票去:
Apache的Log4Net日志框架。
它的源代码非常易读,并且可以在跨平台的C#开发课程中学到很有价值的“跨平台”[可编译为.NET 1.0,1.1,2.0,CF,MONO ...]。 ...
我发现的最清晰简洁的源代码之一是jQuery源代码。无论您是否喜欢Javascript,对于“代码作为文档”的支持者来说,这都是一个很好的例子。
有很多评论,但它不是ascii艺术品,你可以看到明确的推理 - 评论让你知道到底是什么试图实现。
一个例子(full source):
(function(){
var
// Will speed up references to window, and allows munging its name.
window = this,
// Will speed up references to undefined, and allows munging its name.
undefined,
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
jQuery = window.jQuery = window.$ = function(selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context);
},
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
// Is it a simple selector
isSimple = /^.[^:#\[\.,]*$/;
jQuery.fn = jQuery.prototype = {
init: function(selector, context) {
// Make sure that a selection was provided
selector = selector || document;
// Handle $(DOMElement)
if (selector.nodeType) {
this[0] = selector;
this.length = 1;
this.context = selector;
return this;
}
// Handle HTML strings
if (typeof selector === "string") {
// Are we dealing with HTML string or an ID?
var match = quickExpr.exec(selector);
// Verify a match, and that no context was specified for #id
if (match && (match[1] || !context)) {
// HANDLE: $(html) -> $(array)
if (match[1])
selector = jQuery.clean([ match[1] ], context);
// HANDLE: $("#id")
else {
var elem = document.getElementById(match[3]);
// Handle the case where IE and Opera return items
// by name instead of ID
if (elem && elem.id != match[3])
return jQuery().find(selector);
...
Disruptor的代码是示范性的,也是我们可以从它做什么,以实现在现代硬件极致性能来学习。
值得一读的是其架构的Martin Fowler's explanation,the technical paper (PDF)和the QCon presentation。此外,开发者博客包含很多很好的阅读内容 - 尤其是Mechanical Sympathy Blog,它教授许多关于现代CPU和内存的工作原理。
- 1. 什么是一个很好的开源django项目来学习?
- 2. 开源项目学习asp.net mvc 3
- 3. Java EE开源项目学习?
- 4. 寻找VB.NET开源项目来学习
- 5. 哪些开源的ASP.Net项目值得学习努力?
- 6. 用于学习重构的良好的开源代码库
- 7. 作为c#中的学习源的Asp.net开源项目#
- 8. Android开源项目(AOSP)的学习资源
- 9. 学习pyqt的好资源?
- 10. 什么是学习OpenCL的好项目?
- 11. 一个很好的Swing项目,用于学习最佳实践
- 12. 学习资源范围内的项目
- 13. 开源Ruby项目对于初学者
- 14. 由于好奇心学习Android开发
- 15. 学习“实用”OOP的好资源?
- 16. 用.net学习多线程的好源?
- 17. 强大的开源Node.js基础项目学习?
- 18. 好的html5开源项目
- 19. 如何学习编写项目规格?
- 20. 分享点2010学习项目学习
- 21. 使用Visual Studio 2010学习专业软件开发的好源?
- 22. 从开源代码学习
- 23. OpenGL学习基于开放式gl 2.0的项目的建议
- 24. 是否有必要学习Java来贡献开源项目?
- 25. 良好的学习来源学习ERD和ORM
- 26. 学习Django - 良好的初学者项目
- 27. 用于学习Java和Solr的良好Java资源
- 28. 用于学习如何更好地读取代码的资源
- 29. C++新手:用于学习流的良好资源(书籍)?
- 30. 学习Spring MVC对于web项目
大部分意见都可以避免。 “代码是文档”不是乱七八糟的代码,真的。当我读到评论是代码味道的时候,马丁福勒启发了我。 – rpattabi 2010-05-21 22:17:33