CodeWa - 读懂每一行代码! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
iammutex
V2EX    程序员

CodeWa - 读懂每一行代码!

  •  
  •   iammutex 2014-01-06 20:32:08 +08:00 24291 次点击
    这是一个创建于 4295 天前的主题,其中的信息可能已经有所发展或是发生改变。
    CodeWa( http://codewa.com )是我2013年的个人任务之一,很幸运能够在2013年年底之前完成,目前自己试跑了一段时间,也算是最简可用版本出炉。

    CodeWa的口号是:“读懂每一行代码!”,这个口号其实来自一个比较无奈的现实。这个现实就是,我们身为程序员,用代码混饭吃,但是很多人每天都只在机械地coding,能够主动去读优秀代码的人其实非常之少。就我身边的朋友来说,每天和各种开源软件打着交道,但是对WebServer的运作、HTTP协议的实现、数据库缓存的内部实现等等完全没有概念,而了解这些最方便有效系统的方法,莫过于读源码。

    为什么大家不去读源码?而答案也很简单,水平有限,门槛过高,难于坚持。实际上归结到一个字上,就是“难”。那如果我们能够做一些事,让读源码的难度降低下来,是不是会有更多人愿意去读优秀的源码,提高自己的水平呢?我想这个答案是肯定的。

    于是有了CodeWa,在CodeWa,每个人都可以对每一行代码添加自己的批注,每一个人也可以看到其他人添加的批注,当你看不懂一段代码时,其他人的批注没准就能够帮你理解。经过时间的沉淀,可能对每一行代码,我们都能积累很多不同角度的优秀批注,帮助新加入的朋友更容易的进行学习。

    CodeWa现在还很简陋,但是让他运作起来的核心功能已经有了,现在,就等你加入了。

    http://codewa.com
    第 1 条附言    2014-01-15 23:43:16 +08:00
    更新一下近期工作:
    firefox无法滚动的问题解决
    firefox行号对内容错位问题解决
    添加修改昵称功能,避免暴露邮箱地址的隐私
    添加helloworld沙盘演练项目,方便大家试用CodeWa
    及一系列内部改造

    同时完成了个人的Nginx源码阅读计划的一小部分,对Nginx内存池管理部分源码进行了较完整的批注。见:http://v2ex.com/t/97180
    158 条回复    2015-04-30 18:09:39 +08:00
    1  2  
    ilingbar
        1
    ilingbar  
       2014-01-06 20:37:52 +08:00
    加入。。。。
    dimpurr
        2
    dimpurr  
       2014-01-06 20:40:26 +08:00 via Android
    构思挺好的,就是要让用户有心去贡献批注这点很难啊 …… 没有考虑到这方面的激励机制么
    iammutex
        3
    iammutex  
    OP
       2014-01-06 20:43:49 +08:00
    @dimpurr
    嗯,实话说,能在知名的开源项目的源码库上,留下自己的一点注解,能够帮到其他读源码的人,就我个人而言,这应该就算是一种激励了。希望不是太过理想化 :)
    xuanjianfeng
        4
    xuanjianfeng  
       2014-01-06 20:45:23 +08:00
    创意很好。大家贡献对代码的理解。
    dongbeta
        5
    dongbeta  
       2014-01-06 20:46:44 +08:00
    版本升级怎么办?
    stupil
        6
    stupil  
       2014-01-06 20:46:45 +08:00   1
    该相册会员已进行防盗链。
    zzNucker
        7
    zzNucker  
       2014-01-06 21:01:16 +08:00
    这个想法挺好啊。
    bengol
        8
    bengol  
       2014-01-06 21:03:38 +08:00
    great idea :)
    isayme
        9
    isayme  
       2014-01-06 21:17:06 +08:00
    来个lua?
    zenozeng
        10
    zenozeng  
       2014-01-06 21:17:20 +08:00
    很有趣
    iammutex
        11
    iammutex  
    OP
       2014-01-06 21:20:24 +08:00
    @dongbeta 版本升级这个问题是我最早想过的,我觉得,读源码的过程更多的是在学习,从中学到编程的思想和知识就够了,并不一定要跟进每个版本。相信你精通一个版本后应该能够很容易就读懂跟进的内容,CodeWa目前能帮助到这里已经很满足了。
    yangff
        12
    yangff  
       2014-01-06 21:21:13 +08:00   2
    「际上归结到一个字上,就是“难”。」
    拉到吧,其实是“懒”。
    PotatoBrother
        13
    PotatoBrother  
       2014-01-06 21:21:31 +08:00
    想法很不错啊,支持ing
    iammutex
        14
    iammutex  
    OP
       2014-01-06 21:22:06 +08:00
    @isayme lua是我2013年的读码计划之一,可惜没有达成,下一个确实可能是lua。
    一个webserver(Nginx),一个存储产品(Redis),一门语言(Lua),都是最优秀的开源项目,好像是一个很好的开始。
    lsmgeb89
        15
    lsmgeb89  
       2014-01-06 21:22:40 +08:00
    以前有过相同的想法,试了下,Firefox 怎么页面都滚动不了啊!
    iammutex
        16
    iammutex  
    OP
       2014-01-06 21:23:46 +08:00
    @ilingbar
    @xuanjianfeng
    @PotatoBrother
    @bengol
    @zzNucker

    感谢各位,希望能在CodeWa见到大家,能与大家一起参与贡献。
    sapjax
        17
    sapjax  
       2014-01-06 21:24:11 +08:00   1
    想法不错,以前的《django book》也是这种标注的形式,不过是教程,不是源码 http://djangobook.py3k.cn/2.0/chapter03/
    iammutex
        18
    iammutex  
    OP
       2014-01-06 21:25:08 +08:00
    @lsmgeb89
    兼容性问题请原谅,后续会花时间处理,目前还只是一个beta到不能beta的能跑起来的版本而已。
    先建议用Chrome吧。
    lazygunner
        19
    lazygunner  
       2014-01-06 21:30:05 +08:00
    不错 用了一下 挺方便
        20
    jandan  
       2014-01-06 21:30:39 +08:00
    很不错啊 试试
    hhrmatata
        21
    hhrmatata  
       2014-01-06 21:33:28 +08:00 via Android
    想法挺好,很纳闷为什么github不开发这种功能。对于github的追赶着来说,确实一个好特性。
    iammutex
        22
    iammutex  
    OP
       2014-01-06 21:37:15 +08:00
    @hhrmatata
    希望通过CodeWa能有更多人有能力读源码,喜欢上读源码,学到更多东西,到github做更大的贡献。
    yetone
        23
    yetone  
       2014-01-06 21:38:20 +08:00
    很不错,支持!
    mahone3297
        24
    mahone3297  
       2014-01-06 21:43:08 +08:00
    很赞!不过好像每行代码都注释的话,有些地方有感觉 有点累赘(可能说的不太准确,应该说是粒度问题)。
    Jat001
        25
    Jat001  
       2014-01-06 21:46:14 +08:00
    @hhrmatata github 有这功能,只不过只能在 commit 中评论。
    lsj5031
        26
    lsj5031  
       2014-01-06 21:49:05 +08:00
    开源吗,一直想知道类似django books 那样的侧边批注怎么实现的,自己想过几个思路都太繁琐了……
    iammutex
        27
    iammutex  
    OP
       2014-01-06 21:52:30 +08:00
    @mahone3297 是的,粒度问题确实开始感觉别扭。比如我们想注释的可能是一个函数或者一个类或者一个数据结构。但是这里只能在一行。开始我也苦恼过。
    但是换一种方式想,我们在代码里加注释,其实也是选择在某两行之间写下若干说明,我这样一想就觉得给每一行加注释变得理所当然了。比如这一行可以是一个表达式,可以是一个函数调用,可以是一个函数定义的开头,可以是一个类定义的开头。
    iammutex
        28
    iammutex  
    OP
       2014-01-06 21:56:37 +08:00
    @lsj5031 前端的东西看看源码就能看明白了吧。后端的东西貌似也很简单,存一下每一行加的批注就好了。
    blueandhack
        29
    blueandhack  
       2014-01-06 22:02:24 +08:00

    防盗链是?
    ultragtx
        30
    ultragtx  
       2014-01-06 22:04:33 +08:00
    不错 支持一下

    PS. 为什么大家不去读源码?而答案也很简单,水平有限,门槛过高,难于坚持。实际上归结到一个字上,就是“难”

    不是"懒"么
    iammutex
        31
    iammutex  
    OP
       2014-01-06 22:05:54 +08:00 via iPhone
    @blueandhack 额,貌似是又拍的问题,我尽快解决。感谢提醒!
    iammutex
        32
    iammutex  
    OP
       2014-01-06 22:07:32 +08:00 via iPhone
    @ultragtx
    @yangff
    好吧,希望能帮懒人勤快起来。
    Mcatt
        33
    Mcatt  
       2014-01-06 22:08:16 +08:00
    很赞的想法!
    Tankpt
        34
    Tankpt  
       2014-01-06 22:12:49 +08:00
    必须一个个开始读么?里面的库有哪些呢
    hhrmatata
        35
    hhrmatata  
       2014-01-06 22:20:43 +08:00
    建议提供api,方便开发第三方的编辑器插件。感觉还是用编辑器阅读比较舒服。
    MingZhe
        36
    MingZhe  
       2014-01-06 22:21:46 +08:00
    已经绑定进来。。。水平有限,还不敢乱写
    hhrmatata
        37
    hhrmatata  
       2014-01-06 22:22:17 +08:00
    怎么样申请增加开源项目?
    iammutex
        38
    iammutex  
    OP
       2014-01-06 22:22:45 +08:00
    @Tankpt
    目前只放开了Nginx和Redis的两份源码,后续上多了会放更多上去。也会考虑让大家自己上传的方式。但目前,确实只有这两个。
    allan888
        39
    allan888  
       2014-01-06 22:25:59 +08:00
    踢偏全部挂了,防盗链
    allan888
        40
    allan888  
       2014-01-06 22:26:24 +08:00
    @allan888 “图片”全挂了,打错
    ceclinux
        41
    ceclinux  
       2014-01-06 22:30:05 +08:00
    好东西啊,支持~
    iammutex
        42
    iammutex  
    OP
       2014-01-06 22:32:04 +08:00
    @allan888
    @blueandhack
    图片被防盗链的同学,能否帮助提供一下ip,感谢。( http://ip.cn/
    timothyye
        43
    timothyye  
       2014-01-06 22:34:21 +08:00 via Android
    不错的创意,就是貌似图床有问题,满页的防盗链
    cute
        44
    cute  
       2014-01-06 22:36:10 +08:00
    不错的想法。
    2exco
        45
    2exco  
       2014-01-06 22:43:41 +08:00
    有创新,加油!
    iammutex
        46
    iammutex  
    OP
       2014-01-06 22:45:24 +08:00
    @timothyye
    @allan888
    @blueandhack
    不好意思,是用了又拍的付费图片服务,好像某些地区CDN的图片防盗链规则没有更新,已经联系他们解决。并先将图片放到自己本机先提供服务了。
    fdsfsdfsdf3334
        47
    fdsfsdfsdf3334  
       2014-01-06 22:47:08 +08:00
    为什么没有python方面的 另外, 注册了个帐户,为什么用户名 显示的直接是 我的邮箱前缀 还有隐私可言吗
    iammutex
        48
    iammutex  
    OP
       2014-01-06 23:10:34 +08:00
    @fdsfsdfsdf3334
    python方面的暂时没有。
    昵称这个确实抱歉,直接用了邮箱前缀,是有一定隐私问题。
    现在CodeWa还比较简陋,不仅昵称设置功能,很多功能都还没有,会尽快考虑大家的各种需求进行迭代。
    PotatoBrother
        49
    PotatoBrother  
       2014-01-06 23:14:04 +08:00 via iPad
    希望加入tornado的源码啊
    ChiangDi
        50
    ChiangDi  
       2014-01-06 23:14:14 +08:00
    好东东~~
    cbsw
        51
    cbsw  
       2014-01-06 23:45:13 +08:00
    LZ能把代码开源出来不,你一个人要实现大家提出的要求貌似太困难了吧,比如Firefox的不兼容问题,开源出来相信大家很快会帮助解决的
    mahone3297
        52
    mahone3297  
       2014-01-06 23:56:45 +08:00
    @iammutex 但是换一种方式想,我们在代码里加注释,其实也是选择在某两行之间写下若干说明,我这样一想就觉得给每一行加注释变得理所当然了。比如这一行可以是一个表达式,可以是一个函数调用,可以是一个函数定义的开头,可以是一个类定义的开头。
    嗯,你这样说也有点道理。但是可能展现形式要稍微考虑下。不是每次点一行,出来一个注释。
    可能不点,把每行注释直接显示出来,不需要多点一下,可能这样的形式会比较好。
    ps:看到你说你好像用的时又拍云。你时付费的吗?还是多少量以内时免费的?
    iammutex
        53
    iammutex  
    OP
       2014-01-07 00:02:27 +08:00
    @mahone3297
    也纠结过不用点就出来的模式,最后放弃的原因是,还是希望能够尽量读,读不明白再点注释看。这样可能能学到更多东西?毕竟我们读的是代码,而不是注释,就像那种英文下面就是中文的文章,很难真的学到英文。当然,这个可以再等实践检验一下:)
    又拍是付费的,我当时做 NoSQLFan.COM 时买的~我用量不大,一直都没用完。
    iammutex
        54
    iammutex  
    OP
       2014-01-07 00:03:52 +08:00
    @fdsfsdfsdf3334
    已经添加一个简陋的修改昵称功能,隐私问题确实是大问题。有需要的同学可以点CodeWa导航栏上的“设置”去修改昵称。
    iammutex
        55
    iammutex  
    OP
       2014-01-07 00:07:07 +08:00
    @cbsw
    多谢建议,现在刚有雏形,开源的话,应该是在产品形态基本确定后会考虑的东西。
    maddot
        56
    maddot  
       2014-01-07 00:15:37 +08:00
    有意思,为什么不走国际路线做成英文的呢
    shellcodecow
        57
    shellcodecow  
       2014-01-07 00:42:48 +08:00
    代码考虑开源不?
    SR1
        58
    SR1  
       2014-01-07 00:47:03 +08:00


    很不错的想法,支持楼主~
    挑个文字上小错误,见上图
    xigua1
        59
    xigua1  
       2014-01-07 04:05:33 +08:00
    牛逼!! 很给力
    lsj5031
        60
    lsj5031  
       2014-01-07 04:50:37 +08:00
    @iammutex
    哦……这我想过的,不过觉得粒度不太灵活的……
    我是想把这样的形式做进博客里……
    但是如果这么弄不管批注是按行走还是按段走都很麻烦……

    第一文章要打散之后存储,然后万一修改一下也很有可能伤筋动骨……
    bakac
        61
    bakac  
       2014-01-07 07:12:45 +08:00 via iPad
    ios不能滚动代码
    yolio2003
        62
    yolio2003  
       2014-01-07 08:15:37 +08:00
    太棒了, lua +1 支持
    iammutex
        63
    iammutex  
    OP
       2014-01-07 08:34:22 +08:00
    @SR1 fixed,多谢
    iammutex
        64
    iammutex  
    OP
       2014-01-07 08:36:41 +08:00
    @bakac iPad可能还考虑一下兼容性,iPhone真心还没想到好的信息组织方法,就算样式功能上按PC版兼容了其实也是不可用。想到好的组织方法再考虑动手:)
    shizhz
        65
    shizhz  
       2014-01-07 08:38:43 +08:00
    太好了,我给自己2014年的目标就是认真读代码,以前总是抱着书看,最近发现自己的动手能力真的很差,其中没有读过优秀代码也是主要的原因之一。我主要做java开发想从spring开始读,比较低端不知道有没有童鞋有兴趣:(
    很希望参与楼主这个计划。
    allenforrest
        66
    allenforrest  
       2014-01-07 08:57:39 +08:00
    Safari 支持的很好:
    1、如果能选择一段代码做 comment 就更好了。
    2、如果有一个顶部或侧边的导航,能一眼看到当前代码文件有多少注释点了,并且能快捷移动到每一个注释点,就更好了。
    book118
        67
    book118  
       2014-01-07 09:00:23 +08:00
    想法不错,要是网站做得好,稳定,就有发展。I think
    bakac
        68
    bakac  
       2014-01-07 09:03:45 +08:00
    @iammutex 有注释的行 应该整行与没有注释的不同 这样才能让别人更容易知道 这里有注释可以看
    ygmpkk
        69
    ygmpkk  
       2014-01-07 09:04:07 +08:00
    这个很好,我以前有这方面的想法,做这样一个东西。强烈支持
    linuxer
        70
    linuxer  
       2014-01-07 09:08:04 +08:00
    支持一个,就是Firefox用不了。
    iammutex
        71
    iammutex  
    OP
       2014-01-07 09:08:22 +08:00 via iPhone
    @allenforrest 谢谢建议
    按段做批注不易于查看方式的统一,目前还没有想到好的做法,在代码块开始的位置来写可能更容易让人理解一点
    第二点,能告诉我一下你为什么会有这种需求吗?在我看来批注点是一个附属信息,主体还是对源码的阅读。现在在读到有批注的行,行号的颜色会更深一点作为标识,不知道这个是否满足你的需求。
    iammutex
        72
    iammutex  
    OP
       2014-01-07 09:11:49 +08:00 via iPhone
    @bakac 其实现在就是这样的,有批注的行,行号会加深。不过现在批注还很少,大家可能没看到。
    另外,文件列表中,文件名后面的数字就标识此文件有多少批注,可以找个批注多的文件点进去感受一下。
    bakac
        73
    bakac  
       2014-01-07 09:12:34 +08:00
    @iammutex 我一开始找了很久 才发现在行号那......
    v2ex_user001
        74
    v2ex_user001  
       2014-01-07 09:14:57 +08:00
    很不错的想法。不知道LZ是怎么解决版本升级的问题,到时候行号对不上之前的批注是不是都对不上了?
    jingwentian
        75
    jingwentian  
       2014-01-07 09:16:26 +08:00
    很赞的创意, 其实早就有类似的想法...
    sqbing
        76
    sqbing  
       2014-01-07 09:18:01 +08:00
    确实不错
    iammutex
        77
    iammutex  
    OP
       2014-01-07 09:38:02 +08:00
    @v2ex_user001 版本升级这个请看11楼的回复~
    suckli
        78
    suckli  
       2014-01-07 09:42:49 +08:00
    能够跳转函数或变量就更好了
    mahone3297
        79
    mahone3297  
       2014-01-07 09:43:13 +08:00
    @iammutex 嗯,说的也有点道理。
    nosqlfan居然是你做的?。。。赞!关注你。。。
    carlhan
        80
    carlhan  
       2014-01-07 09:51:47 +08:00
    想法太棒了。。。
    ibillxia
        81
    ibillxia  
       2014-01-07 09:59:54 +08:00
    idea不错,不过目前的设计和实现的功能缺失还太naive了,继续加油!
    yayanet
        82
    yayanet  
       2014-01-07 10:16:04 +08:00
    赞啊!!太棒了
    collar
        83
    collar  
       2014-01-07 10:22:08 +08:00
    Coooooool!!!!!
    提个小建议,对每个地方得注释可以做成帖子的形式,方便讨论,也能方便引入用户积分等机制
    iammutex
        84
    iammutex  
    OP
       2014-01-07 10:23:49 +08:00
    @collar
    嗯,所见略同,这是计划中的工作。
    iammutex
        85
    iammutex  
    OP
       2014-01-07 10:26:33 +08:00
    @collar
    讨论可能是下一期要加的几个功能之一。
    积分这个我没考虑做一个综合的等级分,比较倾向于直接对贡献做量化,比如 collar发表了100条批注,被点赞200次。
    chinvo
        86
    chinvo  
       2014-01-07 10:30:26 +08:00
    不改用昵是怎麽……提示“用名只能是……”
    collar
        87
    collar  
       2014-01-07 10:44:45 +08:00
    @iammutex
    嗯,这样也有助于区分批注的质量。很不错,加油~
    chinvo
        88
    chinvo  
       2014-01-07 10:51:52 +08:00
    好吧……只是不用字作而已。。。

    提小建,於“帖子形式”,我人感可以直接做成嵌套的形式,只展示某,其就要“more”看。
    qiongqi
        89
    qiongqi  
       2014-01-07 11:00:22 +08:00
    赞!
    nesuk
        90
    nesuk  
       2014-01-07 11:25:13 +08:00
    出发点很赞!朴素的实现也很好!
    banxi1988
        91
    banxi1988  
       2014-01-07 11:59:53 +08:00
    我之前也有这个想法来着,哈哈,被你实现了.支持,已经加入.
    同名gmail
    iammutex
        92
    iammutex  
    OP
       2014-01-07 12:04:34 +08:00
    @chinvo 谢谢建议,展现形式这个我好好考虑,目前想的就是添加对批注的评论就行了。
    imbahom
        93
    imbahom  
       2014-01-07 12:06:23 +08:00
    支持,lua+1
    ariestiger
        94
    ariestiger  
       2014-01-07 12:41:35 +08:00
    以前读spring源码的时候有过相似的想法,不过没去做,哎!
    对了,这里面似乎没法自己添加代码,如果能以指定maven artifact,或者github地址方式来添加代码,那就挺好了
    darasion
        95
    darasion  
       2014-01-07 12:46:19 +08:00
    赞,不明觉厉。
    flydream
        96
    flydream  
       2014-01-07 13:23:44 +08:00
    创意不错,赞一个
    teddy1004
        97
    teddy1004  
       2014-01-07 13:25:45 +08:00
    赞,很好的东西!
    chenyg32
        98
    chenyg32  
       2014-01-07 13:25:57 +08:00
    @yangff 懒是天性。如果能降低学习的难度,那自然是好的。能够用最懒的方式学到相同的东西,那我愿意。有时候一些东西学起来太难,其实就是教材不好或基础不够,倒不是懒不懒的问题。
    Numbcoder
        99
    Numbcoder  
       2014-01-07 13:36:03 +08:00
    Good idea!
    支持!
    pirex
        100
    pirex  
       2014-01-07 14:06:28 +08:00
    我还以为是让机器来解读代码。。
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5589 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 58ms UTC 07:52 PVG 15:52 LAX 00:52 JFK 03:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86