我的编程学习之路(推荐书单)16/5/5更新

说说我自学编程的事吧,大概是从2014年10月开始折腾。个人是个知乎严重患者,学编程是被知乎带下的坑,自然学的语言也要符合知乎的逼格。就python吧谁叫人生苦短呢!怎么开始呢

网上找资料,对于没有任何编程基础+没有什么英语基础,完全理解不能!!!

有事怎么不问问神奇的知乎呢

我找到了《与孩子一起学编程》入门神书,书名虽说是 与孩子 ,但没有编程经验就是孩子。现在还出了新版加了字典更加完善。这本书我折腾了一个月虽说后面的pygame没有完成但python让我对程序的概念和python的基础语法有了初步的了解s4518521

接着为了进一步巩固python基础语法的认识我找了这本书《笨办法学python》也是比较基础的一本   好书,有编程基础的同学可以直接从这本学习python ,无基础的同学不读上面的那本直接买这本是会很吃力的。当然不排除天赋异禀s27836847这本我也看了一个月

看完上面俩本我对于python的基础语法有了一些认识接着我找了两本大部头《python核心编程》《python基础教程》s3140466s4387251《python基础教程》烂书中战斗机评价满分五星给他1.5星不能再多。超烂的字体会让你有时错觉自己是在看英文,超烂的翻译会让你有时错觉自己不会中文。内容对于新手太难,对于老手太菜。还有一些根本看不懂。《python核心编程》600多页和高达70元的价格,字典书。里面对python的语法库讲的很全面,但别把他当成该看完的书读。这本书应该当作字典而不是当作读过的书。

期间可以读读程序人文书增加编程兴趣s4669554听说好多程序员看了这本书都去创业了

学习了基础的语法和第三方库,应该学习实用项目学习python web后台框架Flasks27906700薄薄的200页,别小看这200页初次接触web和学习时间一般不下3个月。

有了初步的构建网站后台能力,现在我们要学一些编程的“内功”,有了内功你就可以和别人约架时自信的说“看我jj比你大”6609c93d70cf3bc741a61a53d100baa1cc112aef《计算机程序的构造和解释》用萧大的话说“这是软件工程的精华所在”我看了头俩章,它让我深刻的理解了递归接触了函数式编程语言scheme,还有个我自以为对我引起的作用 让我更想去学习底层的东西,对于web、爬虫、app我完全提不起兴趣,所以我才会想去搞编译器

接下来要学学硬件方面的知识b8014a90f603738d2559416cb11bb051f819ec69这本是非常通俗的讲了计算机的底层知识,虽然我现在暂时还没看完

来来看了《计算机程序的构造和解释》之后我们得学学C语言《C编程语言》s26387712,这本书非常适合看了《计算机程序构造和解释》后查看,里面会讲一些基本的算法。

现在想搞底层了,就学习编译原理吧《编译器设计》8601a18b87d6277f12208f472a381f30e924fc9b

16/5/5
学习编译原理光上面一本《编译器设计》显然不够,我们还得辅助一本对大环境的介绍的《程序设计语言–实践之路》

实践之路这本书辅助上面一本编译器设计看会让你啃编译器知识更加容易,当然我后面还要看龙虎鲸三部头,但经典得先把编译原理摸出个大概后再进行啃咬,不然会严重怀疑自己智商。有了上面俩本的理论方面知识的辅助现在我们需要实践练一练

自制编程语言

这本自制编程语言里实现了两门语言第一门是个解释器,第二门加了个虚拟机。虽然作者代码略蛋疼,但是俩门按照R大所说一门是类js一门类java的语言。怎么样是不是有点小激动,闲暇之余我们可以看看

计算机系统

《计算机系统要素》这本书从头到尾介绍了如何自己实现一台计算机读者能够获得关于硬件体系结构、操作系统、编程语言、编译器、数据结构、算法以及软件工程的详实知识,这本书我还在啃前五章介绍了简单的汇编语言及机器语言,也补充了再硬件方面的欠缺,待续么么大。

未完

转+译 Deep Learning for NLP Best Practices

这篇文章翻译自:原文,已取得作者授权.

介绍
本文收集了关于深度学习用于自然语言处理领域的最佳实践集合,将随着新观点的出现定期进行更新,从而不断提升我们对用于 NLP 的深度学习的理解.

在NLP社区有一个”running joke”就是,LSTM with attention 能在任何任务上实现当前最佳的表现。尽管在过去两年中这种情况一直如此,但nlp社区正在逐渐从现在的标准基线转向更有趣的模型。

然而,我们作为一个社区不希望在接下来的两年中独立(重新)发现下一个LSTM with attention.我们不想重塑已经显示可行的技巧或方法。尽管现存的深度学习库已经从整体上编码了神经网络的最佳实践,比如初始化方案,但许多其他细节,尤其是特定任务或特定领域还有待从业者解决。

本文并不打算盘点当前最佳,而是为了收集与广泛任务相关的最佳实践。换言之,本文并不描述某个特定架构,而是旨在收集那些构建成功框架的特征。其中的很多特征对于推动当前最佳是最有用的,因此我希望对于它们的更广泛了解将会带来更强的评估、更有意义的基线对比,以及更多灵感,帮助我们觉察那些可能奏效的方法。

我假设你对神经网络应用于 NLP 的情况已经很熟悉(如果不熟悉,我建议你看一下 Yoav Goldberg 写的A Primer on Neural Network Modelsfor Natural Language Processing),并大体上对 NLP 或某个特定任务感兴趣。本文的主要目标是使你快速掌握相关的最佳实践,从而尽快做出有意义的贡献。

年轻人什么不能碰?是快乐。

好久没有写博客了,今天重新写一下记录一下自己这两个月的收获。这两个月虽然在学业上毫无长进,但还是增长了一些人生的经验。

过去我一直是一个很有上进心得人,曾狂言“没有上进心的人我不会和他做朋友”,但在这前两个月里我变了我的上进心就像被拐走了一样了无音讯,同样变化的是一向喜欢孤独的我,变得害怕孤独了,还有跑步跑了至多3公里就让我无法继续下去(不是生理而是心理)。这种变化让我无比害怕,害怕的不是孤独,不是上进心丧失。而是看不见的未来。

就在昨晚我终于找到了问题的所在,是快乐导致我变成这样的,准确的说是被动的高刺激快乐,很多人害怕孤独、独处,其实并不是这个人外向而是,他习惯了高刺激的被动快乐,而无法自己主动获取快乐,以及享受低刺激的快乐。什么是被动高刺激的快乐呢?比如说,读书你会快乐,做爱你也会快乐。刷数学题你会快乐,看电影你也会快乐。这些快乐有何不同呢?差别在于后者都是高刺激的被动快乐,如抽烟,喝酒,打游戏,游玩。而读书,长跑,写作。这些算低刺激的快乐。一旦长期习惯了高刺激的快乐,后面这些低刺激的快乐对你来说就索然无味了。所以我们才会看到为什么许多作家喜欢长跑,为什么许多伟人喜欢写日记,都是为了让自己能够保持享受低刺激的快乐。这其实也就可以说明很多人打游戏会上瘾的原因了,明明知道大多数游戏对我们的人生毫无意义,却义无反顾。也一样能解释为什么孤独对有些人来说是享受,对有些人来说却是煎熬。同样失恋为什么对大多数人来说能么难熬呢,就是在恋爱(广义上的)时双方都保持着长期高刺激的被动快乐而一旦失去这些快乐就无法忍受了,庆幸这些道理能在我还年轻时就能理解,也将是我的一笔宝贵的财富。

不靠谱的建议:

不得不说,有些时候如果内心有问题,与其去找心理学的书,还不如找哲学书。

关于近期的一些决定

我最近想是搬出去的,关于这个决定我也纠结了些许久。最终还是定了下来,归根结底还是在于我心里的一些毛病和矫情。搬出去的旅程可以说是找到自己的旅程,在群体生活中的我会或多或少的改变着自己让自己更加符合适合在人群生活,这样就让我越来越不像我,无法辨别两者(两张我)之间的优劣,也无道德准则的批判有的只有我内心深处的无奈,有的人可以在人群中和独处是始终如一但是我没有这个能力,这个能力让我尤为羡慕,或许也有和我一样的人感觉还是因为心底里太需要群体的认同,所以在用一些标准来调整自己。这些调整会让我原来一直奉为圭臬的东西都会改变,这是我一直以来不愿意看到的,所以只能用一个弱者的办法逃离。

找到自己的旅程是痛苦的,可以说是要放弃一些东西,也是我最近所意识到的。普通人想要得到一些东西必须得放弃一些东西,因为时间是有限的普通人想得到一些东西必须付出大量的时间,所以自然有一些东西会被无法顾及。这些文字可能是我的无病呻吟,甚至在我所写的时候我都有些许觉得,但是我最近的一些决定都是我想了很久的结果,绝对毫无一时冲动的可能。也不是彰显自己所谓的个性,个性这种东西我很喜欢,有时候我以为我有那么点特立独行的个性时会开心的像一个下了蛋的公鸡一般,可是现在看来完全没有。没有的东西想让他变有,需要做一些不一样的事,这很符合个性的设定。可是如果自己不知道自己想要什么的话冲忙的逃离群体生活可以说是没有意义的,所以对这些决定在我心里是有充足的理由的,只是用文字表现出来略显矫情。而具体缘由又无法在博客中表达,只能用略显抽象的寻找自己来说明。

2017年的计划

今年的计划是git contribution全亮,

QQ截图20170127011343明年绿油油的一片,以及扇贝单词的打卡达到400天,本来想列书单计划但是,感觉列书单一来不知道自己的智商是否能把理论的书全部看完,二来是列书单会让自己变得非常的功利,以至于书面内容还未消化理解,便冲冲往下翻这样便不好,不符合读书的初衷,到头来也只是一排书单而已。

自己动手写tokenizer

寒假闭关几天,回想这个学期真的堕落啊,什么都没写。直接用lex,yacc写个语言项目又太大没个半年肯定写不完,肯定得烂尾。

直接写个tokenizer和parser吧。

首先去git上爬了一些源码下来,研究然后看了一下这篇文章http://blog.csdn.net/kingoverthecloud/article/details/41621557

终于差不多能写个tokenizer,从正则中缀到后缀到nfa的转换.

https://github.com/jetou/C-tokenizer

一个中二病的日常记录

好久没有更新博客,没有几个人看但是还是想记录一下自己的思考过程。以便将来回头看时,不会无乐可图,耻笑自己一番。或也会成为一种乐趣。

前几天课堂中看了《我们的孩子足够坚强吗》简单说就是中英教育的差异,老师在上面讲课学生们只管听互动不用很多,爱学的自然会读不爱学的自然不会, 我认为这也是我国将来贫富差距会越来越大的很主要的原因,因为这种模式下影响学习成绩的很大因素将不是老师而是父母,为什么呢?是钱吗?是教育资源吗?这些都是次要。其中一点是重视教育程度,有个巨巨说他只要一有放弃留学读PhD的想法,全家都请假给他作思想工作,重视程度着实让我有点吃惊。所以基本上越长大越认为,如果不是富二代父母留给子女的财产远不及让子女考上一个好大学重要,还有一点就是在普通家庭很难看到的一个东西——读书的理由,为什么要读书这个疑惑一直伴随着我的青春期,普通家庭是无法解答的因为父母们也不知道,父母只能依据大家所说的口头上的描述觉得读书很好就拼命让孩子读,有些父母懂但是他无法让孩子懂,也就是缺乏例子。简短截说就是你爹妈都有钱 从小带你迪士尼出国玩 你当然知道读书有好处,如果你在农村 你家里穷 父母跟你说好好读书改变命运 你信吗? 

其实我国的教育模式在我现在看来是有道理的,因为以我现在入门编译原理来看,只要涉及到科学的部分必将涉及数学和英语,而且对此的依赖不只是一点半点,如果高中有良好的基础简直是雪中送炭,可是如何让孩子懂就是个问题了,这样也就不会有问数学学了有什么用买菜又用不到之类的naive问题了,当然这个问题在很多国家都是有的。

接下来吐槽专业,为什么现在优秀的程序员的薪水能那么高,除了需求量大外,我之前一直以为是信息不对称导致的。后来看到有人说才发现一个非常非常重要的因素就是天赋门槛,不得不承认计算机科学技术这门学科,学技术部分不难但是只要涉及到科学的那一部分就太难了,需要非常大量时间的钻研,所付出是惊人的,常说的1w小时也只能成为常人口中的大神,可是自己应该也知道是才入门而已。但往往一个程序员优秀与否往往就是看他的科学部分学的怎么样,只要一涉及到科学这两个字眼就知其难度是怎样的,而计算机科学与传统科学不同的是他可以把科学提炼到生活中,所以薪水就这么上去了。这也就是为什么说条条大路通CS,物理数学的学生都拼命往CS这跑。

最后挂一下巨巨们当做入门书我这种人当成山的书《算法导论》

也理解“算法导论其实很浅显”,是数学底子薄弱导致我无法感受到它的浅显。

不说滚去看书就这样。

约瑟夫问题的解决方法

有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从 1 开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王。
现在告诉你 n 和 m,请帮忙求出哪一只猴子能当大王。

这种问题如果模拟链表或数组很容易会让问题的超时复杂度O(m,n),所以还是有一种数学的方法降低复杂度到O(n)

递推公式
f[1]=0;
f=(f+m) mod i; (i>1);
问题解法
QQ截图20160907093024

UVA227 谜题

有一个55的网格,其中恰好有一个格子是空的,其他格子各有一个字母,一共有四种指令:A,B,L,R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(分别以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出”This puzzle has no final configuration.

没什么好说的题目不难但是注意输出格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include
#include
#define maxn 20
#define command 10001
#define tex
char a[maxn][maxn];
char s[maxn][command];
int main()
{
#ifdef text
freopen("data.in","r",stdin);
freopen("datas.out","w",stdout);
#endif
int blank_x,blank_y;
int flag ,puzzle=1;
int i,j,len2;

while(1)
{
blank_x=0,blank_y=0;
flag=1;
fgets(a[0],7,stdin);
if(strlen(a[0])<3&&a[0][0]=='Z') break;
fgets(a[1],7,stdin);
fgets(a[2],7,stdin);
fgets(a[3],7,stdin);
fgets(a[4],7,stdin);

for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(a[i][j]==' '){
blank_x=j;
blank_y=i;
/*printf("%d %d",i,j);*/
}
}
}
int q=0;
for(;;){
fgets(s[q],command,stdin);
int len = strlen(s[q]);
if(s[q][len-2]-'0'!=0)
{
q++;
}else{
break;
}
}

for(i=0;i<=q;i++)
{
len2=strlen(s[i]);
for(j=0;j<len2;j++) { if(s[i][j]=='0'|| s[i][j]=='A' || s[i][j]=='B' || s[i][j]=='L' || s[i][j]=='R') { if(s[i][j]== 'A' && blank_y!=0) { a[blank_y][blank_x]=a[blank_y-1][blank_x]; a[--blank_y][blank_x]=' '; } else if(s[i][j]=='B'&& blank_y!=4) { a[blank_y][blank_x]=a[blank_y+1][blank_x]; a[++blank_y][blank_x]=' '; } else if(s[i][j]=='L'&&blank_x!=0) { a[blank_y][blank_x]=a[blank_y][blank_x-1]; a[blank_y][--blank_x]=' '; } else if(s[i][j]=='R'&&blank_x!=4) { a[blank_y][blank_x]=a[blank_y][blank_x+1]; a[blank_y][++blank_x]=' '; } else if(s[i][j]=='0') { break; } else{ flag = 0; } } } } if(puzzle>1)
{
printf("\n");
}
if(flag)
{
printf("Puzzle #%d:\n",puzzle++);
for(i=0;i<5;i++)
{
printf("%c %c %c %c %c\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4]);
}
}
else{
printf("Puzzle #%d:\n",puzzle++);
printf("This puzzle has no final configuration.\n");
}
}
return 0;
}