V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iammutex
V2EX  ›  程序员

CodeWa - 读懂每一行代码!

  •  
  •   iammutex · 2014-01-06 20:32:08 +08:00 · 22810 次点击
    这是一个创建于 3734 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    不错 用了一下 挺方便
    jandan
        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   ·   我们的愿景   ·   实用小工具   ·   3094 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 12:44 · PVG 20:44 · LAX 05:44 · JFK 08:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.