库里,汤普森教我打球和javascript,我自己教我跑步-半吊子程序员的年度总结

开个玩笑,做为开头。这里的库里和汤普森实际是四个人。史蒂芬.库里,史蒂芬.汤普森是NBA金州勇士队的球星(姓史蒂芬的都这么厉害?乔布斯,鲍尔默,霍金。是不是有统计学意义?😁)。curry是函数式编程里的柯里化,Kely.Tompson是《你不知道的javascript》的作者。这么写完全是噱头而已,我自己教我跑步可不是噱头了,实打实的数据。

为什么弄个这个古怪的名字呢?其实很简单,我自己的头脑就是这么古怪,在家里人的眼中我现在就是一个怪人,已经和这个世界完全脱节了。但是没有关系,别人眼中的怪物是别人眼中的。我自己对自己是什么看法呢?
废话少说,直接开始写吧(talk is cheap,show me the code!)。

写个年终总结,看看这一年做了什么。

这一年从的生活实际上是从2016年1月17开始的。为什么不是从1月1号开始的呢?1月17号发生了一件匪夷所思的事情,无缘无故丢了些东西,于是乎原先的一些工作和想法就中断了,进入了一年的学习阶段,没有任何收入。可能如果再年轻十岁我会对这件事情非常的懊恼,会身背负担很长时间。但是这次竟然没有,我似乎感觉到上帝这么安排是有用意的,既然失去的就不要再多想了。这一年在这种想法的指引下似乎很多问题都想开了。在家里人眼中似乎我过的非常难受,可是他们错了。换了个角度,生活态度完全不同了。一个人的生活道路有多种可能性,没有那一条道路是注定是你的方向,所以不要为以前发生的事情所懊悔,以前发生的好事可能会导致不好的结果,反之亦然,正所谓塞翁失马焉知非福。我们每个人都是社会的一份子,没有那个人是世界上必不可少的,你的失败可能成就了别人的成功,如果即使你失败但是仍然能推动社会的进步,那你的失败就死值得的,每个人的生命在历史上是微不足道的,争取在有限短暂的时间内做一点有意义的事情,生命短暂一点有什么影响,正所谓朝闻道,夕可死。一个人多活十年二十年,相对于宇宙的160亿年的历史,没有任何痕迹啊。争取做些有意义的事情。

永远不要相信成功学

很多程序员,尤其是从事电子商务的程序员都梦想成为和马云一样成功的人。可是这是一种目前非常误导人的所谓成功学。马云的成功是一项伟大的规模庞大的社会学实验的一部分。这么说是不是有点夸大其词?在我看来并不是。如果说马云是一项实验的成功样本,那么必然少不了其他实验品。在电子商务上面国内国外失败的人太多了,需要你注意的是你了解到的失败例子还只是离成功差了一步的,那些胎死腹中的公司在中国还不知道有多少。 马云成功的函数是什么?参数是什么?我们按照他的函数和参数能成功吗?也许吧!但是大多数情况下不可能重复了。古代希腊哲学家几千年以前都已经讲过了,人不可能踏进同一条河流。
马云的成功是偶然中的偶然。如果你看过马云的记录片,你就会理解我所说的这一点。马云的数学成绩很差,只能上英语专业。当时偏科还可以,如果放现在他根本就没有上大学的可能。马云长得丑,于是乎找工作时面试了三十多家企业没有被录用。想想看,如果马云长得和马化腾一样潇洒,或许他就在杭州一家小公司终老一生了。马云生在杭州,哇!得天独厚的机会,这样马云才可以在周末骑着自行车免费给外国人当向导,从而使自己的英语水平大大提高了。你看从那时候起马云就是免费经济的受益者,通过这种免费服务获得了很大的回报。由于英语好马云才可以到商务部工作,由于到商务部工作,马云才有机会出国,有了出国的机会,马云才有机会接触到电子邮件和电子商务。有了这些还不够,得有长时间不拿工资的十八罗汉鼎力相助。这个偶然因素和必然因素太多了,想通过一个成功学函数把他归纳下来,那是根本不可能的。
有一次在家里看荒野求生节目,贝尔正在钻木取火,由于草比较潮湿没有办法引燃,后来找到了干燥的草才成功。人类对火的使用导致了食物的摄入效率提高,大大的加速了进化过程。我大哥说古代人钻木取火是相信木头里有火,才会去钻。 我偶然想到,可能宇宙上有无数的行星上有和我们祖先一样的人正在钻木取火,但是由于草太潮湿而没有办法成功,如今还过着茹毛饮血的生活。成功就是信念加偶然因素的组合,没有捷径。

那我们再往回退一步,我们人类的发展中是不是也错过了类似其他行星错过钻木取火的机会呢?比如说核聚变的实现方式是不是已经有人发现了,但是还没有被认识到价值呢?

信念可能很容易提出,但是偶然因素呢?需要靠庞大的社会实验来实现。所以这个需要多样的思维方式。培养多样性的思维方式需要多样性的生活方式和多样性的教育方式。没有那种对,那种错。唯一需要的就是多样性。美国的车库可以出贝佐斯,中国的单元房也可以出马云。

我总结这是社会进化论.现代的教育系统片面的把多样性的衡量标准简化为分数就扼杀了社会的多样性,假如面对社会文明的变革,没有多样性的思想,那就比较可怕了。当然我这种思想也是片面的片面,如果目前的教育方式是对的呢?
到底应该怎么做呢? 一个人的生命历程在宇宙中无不足道,一个地球6000年的文明史会比一个人的历程显著多少呢?
没有对与错,只能一直保持思考。或许我们的这个宇宙是嵌套在某个人的思想中呢。哈哈,写下这句话我想笑。javascript中的内部函数,闭包。呵呵。

总结一下,不要相信成功学,要有个性的思维方式。保持社会思维的多样性。

2016年函数的构造函数

//使用了javascript组合模式
  var myJavascript = function(jsgrammar, react, jspattern) {js学习构造函数
  this.jsgrammar = jsgrammar;//语法
  this.react = react;                   //react生态系统
  this.jspattern = jspattern;    //js模式设计
}
var myRunning = function(running) { //跑步构造函数
  this.running = running;
};
//组合函数
var year2016Class = function(jsgrammar, react, jspattern, running) {
  this.one = new myJavascirpt(jsgrammar, react, jspattern);
  this.two = new myRunning(running);
};

好吧,有点啰嗦。最近生活里全都是javascript的模式了。
整年的生活其实就是这两个函数。

下面开始代码注释了

  1. myJavascript函数。

2015年8月份接触到appcan的培训,在网上搜索资料的时候看到关于react/react-native的资料才开始有系统学习javascript的想法。我自己都觉得很尴尬的是在参加appcan培训时,问过老师某某函数的回调函数(callback)是什么。说实在的当时根本就不知道自己在说什么。尽管之前也接触过javascript,但是认识实在是很浅薄,根本就没有对js的优秀特性有任何了解,js中最厉害的闭包当时也根本没有任何的认识。
去年十月份的时候,国庆节利用了几天的时间看了node.js的书,感觉对node.js有了一些认识,但是还是缺乏深刻的理解。问题是卡在一是对于javascript的基础知识的理解,比如函数作用域,闭包,甚至是对象字面量。另一个就是对于js编程中的一些模式理解,比如中间件的思想。 但是收获之一是基本理解的js中单线程时间循环的原理。并且按照这个原理写了一篇餐馆单个服务员的服务模式的简单文章。这算是开端,对于js的异步逻辑的认识有了一点认识。在看过《了不起的node.js》以后才算是明白这个是怎么一回事了。

对于javascript的对象的理解,开始启蒙是从二月分开始,在阅读 js定时器的相关文章的时候才明白setInterval,setTImeout这两个函数是挂载在window全局对象上的。这个像是《黑客帝国》里的Neo,开始有点思想启蒙了。

三月份在淘宝买了六本书,《你不知道的javascript》,《javascript忍者秘籍》,《node.js与express开发》,《node.js实战》1,2,3.
前两本是js基础知识学的的绝对干货。一本就是开篇提到的kely.Tompson写的《你不知道的javascript》。一本是jQuery作者写的《javascript忍者秘籍》。这两本书都非常.你看这个好我是打引号的。我觉得这两本书好实际是到了今年十月份才开始的,之前没有类似的认识,慢慢加深的认识。
《你不知道的javascript》这本书其实没有讲多少内容。但是实际都是js的关键内容。有个网友问我要怎么学js,我推荐这本书,但是有很忐忑,生怕误导别人。 这一点其实是写这篇文章的目的。 这本书的价值是毋容置疑的,作者在书里也提到了,包括他本人在内,很多程序员用了很长时间的javascript,就是感觉我爱女神,女神不爱我。什么原因呢?没有掌握javascript的实质,尤其是已经有了其他面向对象编程知识的程序员受到影响会更大。javascript的思路和java,php是完全不同的,很容的受到原先的思想的束缚。
第一个难点就是作用域,这里不考虑ES6的let用法。 js的函数作用域是理解关键概念闭包的关键。😁,不理解函数作用域就无法理解闭包的工作原理。如果不理解函数作用域,借用《窈窕淑女》里的台词,你就看个50遍。书中的作用域气泡的图我画了几遍,总算是没有白费心机,硬骨头被啃了下来了(这句流行语是不是有逻辑错误,岂不是形容自己是🐶?)。作用域有两个比较绕的地方,一个是挂载在全局对象上的函数的作用域,这个由于没有明确的说明所以很容易忽略。另一个就是嵌套的函数中内函数的作用域嵌套的内部函数捕获外部函数的变量说的就是闭包。 所以在学习javascript时遇到嵌套函数的时候要格外留心他的变量的获取方式,还有就是问问为什么非要把一个函数放到另一个函数内部呢?时刻注意这一点,慢慢的就会理解闭包的妙处。这个过程,就我来看是要花一些时间的,开始学习的时候不懂不要紧,不要放弃,逐渐就明白了。

对于闭包这个话题,据有些书说,stackflow上有25%的帖子是讨论闭包的。闭包是学习javascript绕不过去的话题,闭包是学习javascript的分水岭,不夸张的说闭包就是javascript.
怎么认识闭包呢?首先要认识到闭包是用来干什么的。不能为了闭包而闭包。
对于重复引用闭包在内存开辟新的作用域空间这个地方是很难理解的,需要留心差异。
关于闭包的话题,不想多说,在简书写了几篇闭包的短文,可以找来看看。
我写这些文章的优势是,我以前几乎没有任何编程背景,所以初学者可能比较能接受一点。

javascrit是一门动态面向对象的语言,灵活性极大。以前看书,看作者这么说,但是并不是非常明白是什么意思。 但是看完了几本javascript的模式设计的书以后,这种概念终于理解了。

javascript基于几乎一切对象,高阶函数的使用,对象字面量的使用使javascrip在实现一些模式的时候非常简单。javascript也可以模仿其他语言来实现这些模式,但是使用js独有的特征以后,编程变得出奇的简单。
可以参考《javascript设计模式与开发实践》这本书,这本书里面的模式先用传统的方法来实现,然后使用纯javascript来实现,绝大多数情况下javascript的模式更简单,可以仔细看看。

javascript的面向对象的方法和其他语言也显著不同,js也可以模仿出其他语言的面向对象的方法,但是js的原型继承的模式似乎对于web编程灵活性更好一点。

React/React-native/redux
这个框架的学习贯穿了整个一年的学习过程。原来预计是7月份全部学完的。但是途中又遇到了redux的阻击,包括react的帮凶:redux-saga,immutable.js,normalizr.js,realm等。
学完了以后发现facebook给我们学习react/rn/redux的学习者挖了这么大的一个坑。
怎么爬到这个坑的沿上的,可以看看我的几篇react/redux的短文。
回头一看坑也没有那么深,还是我变高了?

javascript模式设计的学习是在年尾11月,12月最大的收获。 书架还有一本php的模式设计的书没有勇气看,因为在当时买了之后,发现根本就不是道在说什么。 11月份偶然在图书馆发现了一本js模式设计的书,一翻尽然看懂了。接下来这段时间把能找到的四本有关javascript模式设计的书基本都看了一遍。
总结一个字:“畅快淋漓”。 以前在球场乱踢,没有任何章法,现在有教练了,教练总是说:“你看原先你这么踢是可以的,但是你改进一下这么踢不是更好?”
这部分我根据看过的书籍写了一些读书笔记,可以参考一下。可能有错误,如果觉得欠妥直接跳至原书。 现在直接名字就是javascript模式设计的书应该有五本。其中四本读过,都是非常不错的书。只要有坚持学习javascript的愿望,建议买下来,肯定值回票价。

好了myJavascript这个函数就讲这么多。这只是伪代码。细节不可能完全展现出来。 需要时间,耐心,勇气这些内部状态的支撑才能完成。

myRunning函数

有人看到这个函数,估计会说,你个傻逼,说编程,跑题到跑步了。

其实编程就只是编程吗?javascript现在比较流行,但是五年,十年以后呢?
十年以后我要学新的编程语言吗?没有好身体,能不能熬得到十年以后都不好说,现在的程序员啊😁。

我都不知道是怎么开始的,反正是积累的一些数据,先看看这个函数返回的结果吧。

 10公里: 1小时20分->44分
 20公里: 2小时30分->1小时49分
 1公里:  7分35秒->4分35秒
 总里程:  600公里->3405公里
 体重:    68公斤->59公斤

我为什么要贴这些数据呢?如果你觉得这些数据还挺可观的,就接着往下看吧。

一个目的纯粹是为了炫耀,在虎扑跑步排行榜中从4000多名一直杀到300多名,还不值得炫耀吗?在这种炫耀中我获得了极大的满足感,这个感觉是身体和心理同时改变的。《跑步圣经》里就是这么说的,当我跑起来,我觉得自己是一个圣人。当我在排行榜上超越每一个人,当我再跑道上超越每一个跑步者,甚至是屡次套圈的时候,那心里的感觉和驾驶一辆高级跑车没有区别。就像是站在世界之巅。

另一个目的在读《对伪大数据说不》的时候凝练成的。读这本书的目的不是随便浏览。而是基于前面的一些想法。这个我后面再说。
《对伪大数据说不》是一本非常不错的书。 里面其实主题是一个,统计数字其实是会欺骗人的,唯一骗不了的还是人自己。有了统计直觉就不会被数字蒙蔽。怎么理解这句话? 其实上面我贴的我的跑步统计数据对于现在看这篇文章的人是没有任何意义的。
这个统计数据的背后是:身体的强壮,学习注意力的提高,睡眠质量的提高,心理的愉悦感,健康生活方式等等改变,而这个改变除了我自己以外别人是无法体会到的。
如果认识到这一点还不够。范围还可以在扩大一点。考虑到自己的知识背景,我考虑到是不是以后可以做一个科学编辑或者科学app。怎么办?没写过文章。
于是乎有了在简书写文章的想法。 不管后面结果怎么样,先写个100-200片文章吧。 这样的话即使当不了科学编辑,写作水平估计也能提高很多吧。看到这个想法你是不是觉得很眼熟? 哈哈!王健林说过同样的话:“先赚他1亿再说”。
我也抱定这个念头,先写他100篇再说。这话不仅王健林说过。有位老先生在45岁学英语的时候也说过。这个老人名叫:钟道隆,写了一本《逆向学英语》。当时还年轻的老先生给自己定了一个小目标:50根圆珠笔芯,写完以后如果英语还学不会就不学了。结果圆珠笔芯用了一半,老先生英语就学会了。但是不要忘了一个细节。老先生每天学英语听写记录是10-20张A4纸写满为止。 于是乎老先生又写了一本书《学习贵在开窍》。怎么个开窍法? 把英语学习转换为圆珠笔芯的数量和A4纸的数量。 25根圆珠笔芯和20张A4纸对于我们来说只是数字,但是对于老先生来说就是统计直觉。这就是数字背后的东西。

看到这里你会说:“绕了半天,你到底想说明什么问题呢?”

起因是想给马上要高考的小侄女提供一个大学学习定量化的思路。其实一切只要和坚持,难度挂钩的内容都把他转为数据来衡量,会不会是一个好的思路?在我看来大数据仅仅是解决问题的手段而已,数据最终还要用于一定的用途。所以说编程不仅仅是编程。

这也是最近在看大数据和统计学内容的初衷。 跑步没有白跑,终于绕了一大圈还是绕到编程上来了。 scala,spark我来了,scala里面也有函数式编程,对象和闭包,javascript的学习对scala的学习有什么帮助呢?

NEO看到了矩阵。我在这个2016函数中看到了什么呢?

看到到是2017年的技术啊,js/react继续的修行,大数据的应用学习(scala,spark),跑步。
2017年的函数就是这三个函数的组合了。

写这篇文章的总体想法是早就有了,前天个网友看到我在简书写的文章,问我javascript应该怎么学,我简短的介绍了一下,我个人还处于初学者阶段,有点怕误导,所以这里算是补充下,掺杂了一点个人生活的感悟,算是2016年的总结吧。

柯理化:其实想写个愚人节的笑话,javascript委员会为了纪念斯蒂芬.库里的篮球水平,为他命名了一个函数 。纯粹的自娱自乐。😁

    原文作者:smartphp
    原文地址: https://www.jianshu.com/p/5b2a56923b0b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞