用OurCoder监督自己的学习

尼克徐 发布于 2014年03月25日 | 更新于 2014年07月17日
tinyfool sycx multilinguist 等7人欣赏。

为了克服自己的懒惰和思路发散,从今天开始,在ourcoder网站的监督下学习(已征得@tinyfool 的同意,感谢!)。

具体办法是:

1,首先向@tinyfool 打款50元,作为付给网站方的服务费。学习计划完成后,再向网站方打款100元,以示感谢。

2,本次学习目标:compilers (网址:https://class.coursera.org/compilers-004)

3,学习周期:3个月,到6月26日截止。

4, 具体量化目标: 每周完成compilers里布置的作业,并参与最后的考核,成绩达标。 每周要把完成作业的贴图贴到本帖下,以供大家监督。

5,惩罚措施: 如果某一周没有完成该周任务,则罚款50元。

此次学习计划从今天开始。

共82条回复
tinyfool 回复于 2014年03月25日

好吧,我的支付宝是 tinyfool#gmail.com

鲁大师 回复于 2014年03月25日

罚款50太少了,500才有些杀伤力

尼克徐 回复于 2014年03月25日

1楼 @tinyfool 请问你有没有国际PayPal ,我如果向支付宝付款好像得通过第三方

cnsoft 回复于 2014年03月26日

我有paypal 别客气 50$ 来吧。有监督的义务么?

尼克徐 回复于 2014年03月26日

折腾一早上了,也没找到靠谱办法从国际paypal转账给支付宝,被气晕

tinyfool 回复于 2014年03月26日

我的paypal是tinydust#gmail.com

尼克徐 回复于 2014年03月26日

6楼 @tinyfool 已支付tinydust#gmail.com ,请查收。

tinyfool 回复于 2014年03月26日

7楼 @尼克徐 收到,哈哈

alt text

scorpiozj 回复于 2014年03月26日

囧 有时间折腾还不如去学习了

guofengcn 回复于 2014年03月26日

9楼 @scorpiozj 囧,你这个应该算是“神回复”了

尼克徐 回复于 2014年03月26日

9楼 @scorpiozj

1,学习是长跑。不是一天半天的事情。

2,第一次肯定麻烦,以后就轻松了,分分钟的事情。

3,建立一个有益于学习的氛围和规则,对促进学习特别有利。

scorpiozj 回复于 2014年03月26日

11楼 @尼克徐 哈哈,我可不是打击你哦

尼克徐 回复于 2014年03月26日

12楼 @scorpiozj 好的,谢谢支持。:-)

油箱已加满油,今晚要奋斗了!

akunamotata 回复于 2014年03月26日

6楼 @tinyfool 说好的节操呢?

tinyfool 回复于 2014年03月26日

14楼 @akunamotata 节操值多少钱?

尼克徐 回复于 2014年03月26日

14楼 @akunamotata @tinyfool 不偷不抢劳动致富,节操满满的 :-)

tinyfool 回复于 2014年03月26日

16楼 @尼克徐 你们要是真想玩的话,我觉得可以做一个赌池,比如,你扔50元进入赌池,如果你做成功了一件事情,网站还你55元。你失败了,一分钱不还。哈哈

尼克徐 回复于 2014年03月26日

17楼 @tinyfool 这次学习计划暂时这样了吧。

下次的事情可以啊。很有趣。但网站最好有些赢利。赌博公司可是赚钱的很。

尼克徐 回复于 2014年03月27日

看完导论,开始学Compilers的第一周第一次课。

这次课开始学一门语言,叫做"Cool"语言,以后的课程就是要编一个Cool语言的编译器。

Cool语言是一门教学语言( Classroom Object Oriented Language),它很简单,专门用于编译原理的教学,所以它的编译器非常多,据说几百个,都是学生写的...

1,虚拟机下载和运行,见链接: link text

2,写了个程序:hello_world.cl

class Main inherits IO {
   main(): SELF_TYPE {
    out_string("Hello, World.\n")
   };
};

编译: coolc hello_world.cl

编译成 hello_world.s

执行: spim hello_world.s

输出:Hello, World.

alt text

尼克徐 回复于 2014年03月31日

上周末,继续学习Cool语言,几个小程序: 求阶乘的:

class Main inherits A2I {
    main() : Object {
        (new IO).out_string(i2a(fact(a2i((new IO).in_string()))).concat("n"))
    };

    fact(i: Int) : Int {
        if (i = 0) then 1 else i * fact(i-1) fi
    };
};

以及另一写法:

class Main inherits IO {
    main(): Object {{
        out_string("Enter an integer greater-than or equal-to 0:");

        let input: Int <- in_int() in
            if input < 0 then
                out_string("ERROR: Number must be greater-than or equal-to 0n")
            else {
                out_string("The factorial of ").out_int(input);
                out_string(" is ").out_int(factorial(input));
            }
            fi;
        }};

    factorial(num: Int):Int {
        if num = 0 then 1 else num * factorial(num - 1) fi
    };
};

还有几个,关于Cool的数据结构的,不贴上了。

尼克徐 回复于 2014年03月31日

后来又学了正则表达式及其实现原理,确定状态自动机DFA(Deterministic finite automaton),不确定状态自动机(Nondeterministic finite automaton),及其实现(总共是两周的课程量)。

作业留的很多,其中一个是以Flex为辅助工具写词法分析器代码(C++),并能作为词法分析模块嵌入到以前的Compiler项目中去运行而不出错。

另一些是对某些字符串,根据状态机原理做推理和变换等。

为了做完这些作业,老师列了一堆的参考资料,近百页英文。

4月9日是作业提交截止日期。时间紧张啊...

alt text

尼克徐 回复于 2014年04月05日

这两天继续学习Flex/Bison,不学好这个,没法完成作业了。

Flex/Bison很好玩,几十行代码,规定了TOKEN的正则表达式和语法推理的规则,就能做一个简单的语言解释器,的例如我做了个计算器解释器的练习,源代码:

fb1-4.l

/* rocognize tokens for the calculator */
%{
#include "fb1-5.tab.h"
%}

%%
"+" {return ADD; }
"-" {return SUB; }
"*" {return MUL; }
"/" {return DIV; }
"|" {return ABS; }
"(" {return OP; }
")" {return CP; }
"//".* /* ignore comments */
[0-9]+ { yylval = atoi(yytext); return NUMBER; }
n  {return EOL; }
[ t] { /* ignore whitespace */ }
.    { printf("Mystery character %c\n", *yytext); }
%%

fb1-5.y:

/* simplest version of calculator */
%{
#include <stdio.h>
%}

/* declare tokens */
%token NUMBER
%token OP CP
%token ADD SUB MUL DIV ABS
%token EOL

%%

calclist: /* nothing */
    | calclist exp EOL {printf(" = %d\n",$2);}
    ;

exp: factor /* default $$=$1 */
    | exp ADD factor { $$ = $1 + $3; }
    | exp SUB factor { $$ = $1 - $3; }
    ;

factor: term /*default $$ = $1 */
    | factor MUL term { $$ = $1 * $3; }
    | factor DIV term { $$ = $1 / $3; }
    ;

term: NUMBER /* default $$ = $1 */
    | ABS term { $$ = $2 >= 0 ? $2 : -$2;}
    | OP exp CP { $$ = $2; } //New rule
    ;
%%
int main(int argc, char **argv)
{
    yyparse();
    return 0;
}

int yyerror(char *s)
{
    fprintf(stderr, "error: %s\n", s);
    return 0;
}

int yywrap(void)
{
    return 1;
}

生成解释器源代码用的命令行:

flex fb1-4.l
bison -d fb1-5.y

此时会生成lex.yy.c, fb1-5.h, fb1-5.c几个源代码,然后编译(我用的是WINXP的32位环境,所以编译时加参数-m32)

gcc -m32 fb1-5.tab.c lex.yy.c -o calc.exe

此处生成的calc.exe就是个计算器了。运行后结果:

C:flexbison>calc
4+3*(5-2)
 = 13
5+3*4
 = 17
brambles 回复于 2014年04月05日

原来我已经赞过了,不能再赞了!

对一切热爱学习的人点赞!

尼克徐 回复于 2014年04月05日

23楼 @brambles 谢谢!我们一起努力学习吧!

初心泽 回复于 2014年04月06日

看起来好难的样子

尼克徐 回复于 2014年04月06日

25楼 @初心泽 嗯的确不容易

所以,”困知勉行"

尼克徐 回复于 2014年04月08日

起了个大早儿,连滚带爬在Deadline前完成了这期的Compilers作业。

选择题太难了,12分只得了6.5分。推理证明题挺容易,都做出来了。

后天要交源代码的作业了,还没动手做呢,参考资料还没啃完...然后老板吼着这周要加班! alt text alt text alt text

尼克徐 回复于 2014年04月08日

唉,本次作业没有完成好,选择题不及格。

属于没有完成好本次学习任务。罚款50元。@tinyfool ,晚上我交罚款。

尼克徐 回复于 2014年04月10日

哭啊,熬夜做完的词法分析器编译成功了但有一大堆错误,来不及检查了又到Deadline了。一会还得上班去。真不想工作了!

含泪继续被罚款50元...

早上得多吃点。宁可发胖也要安慰受伤的心。 alt text

tinyfool 回复于 2014年04月10日

28楼 @尼克徐 看样子我能发财的样子

尼克徐 回复于 2014年04月10日

30楼 @tinyfool 看来我得更努力了,不能让@tinyfool 得逞!

cocorosiekz 回复于 2014年04月10日

有兴趣可以加群qq375940541,就是讨论这门课的,人数100+了,有潜伏的大牛。

尼克徐 回复于 2014年04月10日

32楼 @cocorosiekz 谢谢!

刚进群看了一眼,不错啊,有大牛!

tinyfool 回复于 2014年04月10日

31楼 @尼克徐 看你的进展我感觉不错,加油吧,争取别让我发财

尼克徐 回复于 2014年04月10日

34楼 @tinyfool 谢谢鼓励!会继续努力得!

Fight!

sharkaz 回复于 2014年04月10日

35楼 @尼克徐 加油!

尼克徐 回复于 2014年04月10日

36楼 @sharkaz 谢谢!

smallbaby_dns 回复于 2014年04月10日

加油。。佩服毅力..

尼克徐 回复于 2014年04月11日

38楼 @smallbaby_dns 感谢鼓励!

@tinyfool 罚款已支付。

tinyfool 回复于 2014年04月11日

39楼 @尼克徐 心情大好

尼克徐 回复于 2014年04月11日

40楼 @tinyfool :-)

我现在每天最想做的事情就是:回家做作业,打败@tinyfool

tinyfool 回复于 2014年04月11日

41楼 @尼克徐 我感觉我要发财

尼克徐 回复于 2014年04月11日

42楼 @tinyfool 咬牙切齿中...

oraclescjx 回复于 2014年04月11日

佩服,我现在在看软考的《系统分析师》和重新看一遍《java编程思想》,效果是属于有时间看但是效率低。

changyu496 回复于 2014年04月11日

41楼 @尼克徐 才刚刚看到这个贴子,佩服你的毅力,加油!

netdigger 回复于 2014年04月11日

坚持。让@tinyfool天天看着你的钱,拿不到,干着急

tinyfool 回复于 2014年04月11日

46楼 @netdigger 我已经拿到3笔了

尼克徐 回复于 2014年04月11日

44楼 @oraclescjx 加油!学习是艰苦的,尤其是工作后。

45楼 @changyu496 谢谢!

46楼 @netdigger 那是,必须的!(((༼•̫͡•༽)))

goodsong 回复于 2014年04月11日

加油,向你学习

尼克徐 回复于 2014年04月11日

47楼 @tinyfool 为不再被罚更多而奋斗!

49楼 @goodsong 谢谢!作为码农每天必须学习新东西,咱们一起努力!

dowei 回复于 2014年04月11日

其实我想说, 如果你某周果断放弃,50就没了 如果你学完了,150就没了。

然后拉到后面发现已经罚了几笔了……

加油啊……

尼克徐 回复于 2014年04月11日

51楼 @dowei 罚的我很心疼啊,好几顿好吃的没了。

这个周末果断做作业去。

dowei 回复于 2014年04月11日

52楼 @尼克徐 不止几顿饭吧 "含泪继续被罚款50元...早上得多吃点。宁可发胖也要安慰受伤的心”,还有因被罚而伤心大吃多花的几顿饭钱,双重损失……

尼克徐 回复于 2014年04月11日

53楼 @dowei

嗯。但是比起学到的东西,就算罚款也认了。至少这罚款让我痛苦和清醒,让懒散的我学习动力满满。

忙碌工作了一周,想懒散的度过周末?好,周一交罚款吧!要为懒惰买单。现在的我面临的就是这个情况。

程序员是个终身学习的岗位。如果有方法能够帮助提升学习效率,例如提高20%,我们的机会会更多,进步会更快。

我有多少本没看过而想看的书,有多少门想学到的东西啊!以及多少个因能力不行而错过的机会...

现在不放过自己,是为了未来能躺在沙滩椅子上无所事事的叹咖啡看美女...

goodsong 回复于 2014年04月11日

受到你的激励,今天看了几段课程视频,我也计划学编译原理好久好久了

尼克徐 回复于 2014年04月11日

55楼 @goodsong 那还等什么!今天就开始学吧!

李大葱 回复于 2014年04月11日

这一两百块钱,真没有杀伤力。应该立志,如果一天不学习,就自己砍自己一个脚指。

看看过两个月还有没有脚指了,如果没有的话,就不用学习了。

以我学习的经验来看,养成一个习惯大概两个月就了,不用那么费心。

尼克徐 回复于 2014年04月11日

57楼 @李大葱 很搞...

alexcheng 回复于 2014年04月12日

看起来很励志的样子

尼克徐 回复于 2014年04月15日

最近在学Parser和Top Down Parser.

理解了语法定义时的一些问题。

例如,运算符的优先级的实现,不是表面那么简单,是通过多余的语法项的定义来实现的。

以及左递归的问题。

alt text

alt text

终于在Deadline之前完成了这一期的作业,成绩险险的及格了,不用被罚款了,汗一个。

作业依旧很难,尤其是选择题,有些是连蒙带猜。

没想到编译器原理里,有那么多的类似数学的东西,很难懂。

就这个状态,我不知道怎么通过期中考试...

alt text

alt text

alt text

stopro 回复于 2014年04月15日

加油加油啊。

尼克徐 回复于 2014年04月15日

61楼 @stopro 谢谢!

cnsoft 回复于 2014年04月15日

62楼 @尼克徐 我家娃这周咳嗽转肺炎 去医院输液 我自己的项目一周都没干什么 没什么进展.. 羡慕没有娃的XD. 时间真是大把. 我期望到月底或者5月中出一个原型的demo. ios的实时联网的小游戏.

尼克徐 回复于 2014年04月15日

63楼 @cnsoft 其实我也有娃,只不过有人照顾好一些。

平时我时间也比较紧张,工作不断加班,最近又搬到另一个办公地点,比之前的地点,一天要平均多两个小时的路程。

例如这次作业,其中一半在地铁里写的,麻烦啊。

别太累多注意身体吧。工作和学习是无止境地

cnsoft 回复于 2014年04月15日

64楼 @尼克徐 共勉. 你猜我几个娃...

尼克徐 回复于 2014年04月15日

65楼 @cnsoft 我猜有两个?

cnsoft 回复于 2014年04月15日

66楼 @尼克徐 双胞胎姐妹。。然后一生病 还是一起.. 愁人. 一上幼儿园就容易病的样子.

尼克徐 回复于 2014年04月15日

67楼 @cnsoft 嗯,是这样的。我的孩子也是,在北京上幼儿园容易生病。

但是去岳母家所在的农村住,却不生病,很健康,吃的也多。

goodsong 回复于 2014年04月21日

只看视频不做题,讲得不错

尼克徐 回复于 2014年04月21日

69楼 @goodsong 这两天作业多,又赶上加班,牙疼,课程有不懂的地方....愁啊。

尼克徐 回复于 2014年04月22日

因各种原因吧,到今天有两期作业到了期限而没做...

罚款100元。@tinyfool 应该已收到。

功课越来越难的时候,学习时间却越来越少。

也有我计划安排不周和拖延的地方。

不管怎样,继续努力!

尼克徐 回复于 2014年04月30日

本以为五一期间可以做作业的,但明天还要加班,周末基本确定了要继续加班!

几周以来,晚上一直是10点11点到家。

@tinyfool ,我需申请暂停此次学习了。

还会交一些罚款给@tinyfool ,作为此次作业未完成的罚金。

我会继续学,并在这里发布进展,但是不会把作业跟的这么紧了,也请谅解,不以此作为考核和罚款了。

tinyfool 回复于 2014年04月30日

72楼 @尼克徐 理解,我赚了不少了

尼克徐 回复于 2014年04月30日

73楼 @tinyfool 你肯定有机会赚更多的。

下次这门课开课我会继续在这里,用同样的方式跟。:-)

总结一下学这门课,到目前为止的收获:

1, 对确定有限状态机和非确定有限状态机的原理和转换有了更深入的理解,知道了为什么和怎么做以及怎么优化。这对以后我学Automata提供了很好的基础。

2, 搞明白了正则表达式的实现,正在用c写一个轻量级正则表达式解析器(用于tokenizer),正好可以把上一条的收获全用上。

3, 对从语法的定义,到生成语法树的算法理解更深入了,计划写一两个可插拔的语法树解析算法,来验证所学到的东西。

4, 初步学会了flex/bison的使用。

dantangfan 回复于 2014年05月01日

74楼 @尼克徐 其实老大可以把您学习的东西放到这里一起讨论~,说不定会有意外的收获~~

尼克徐 回复于 2014年05月01日

75楼 @dantangfan 是的,正有意这么做呢。会在github贴出来。

cnsoft 回复于 2014年05月01日

76楼 @尼克徐 gist 坚持就是胜利. 5.1我在家看娃... 最近总结起来 还是早起才能做点事. 晚上早点睡. 不然就是垃圾时间了.

sadcat 回复于 2014年07月14日

太牛了,顶。

geckotest 回复于 2014年07月16日

楼主现在学的怎么样了?

尼克徐 回复于 2014年07月16日

79楼 @geckotest 由于公司项目的9-9-6的工作状态,中断了。

cnsoft 回复于 2014年07月16日

@尼克徐 容我叫你一声 老徐. 我是看了这贴 才下了决心出坑的。

虽然目前还没有成果, 但仍在坚持. 这次 我最喜欢的德国队终于夺冠了, 又给我增加了很多信心, 让时间来证明我的决定是正确的吧。

加油! 兄弟们.

尼克徐 回复于 2014年07月17日

81楼 @cnsoft 加油同行!

本帖有82个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
[顶 楼]
|
|
[底 楼]
|
|
[首 页]