当锤子遇到钉子
此文标题党。更切题的标题应该叫做《如何用统计科学来黑星座》或者是《积极注册Facehub,促进统计科学蓬勃发展》
锤子 JS Promise
最近对JS社区里的Promises/A+规范产生了很浓的兴趣,感觉Promise这套东西确实蛮不错的,给异步算法的编写者和异步算法的消费者之间提供了一套统一的沟通手段,也为异步算法的消费者提供了更悦目易读的代码组织方式。
自己把它实现了一遍:https://www.npmjs.com/package/RWPromise
然后在武汉办公室run了3次workshop:http://cuipengfei.me/blog/2016/05/15/promise/。
手里有了这么一把锤子就总想找个钉子敲一敲。总在想能去哪里找N多异步操作来让我来组织一下呢?
钉子 《异类》
无巧不成书,刚好最近在豆瓣上买了一本叫做《异类》的书在看: https://read.douban.com/ebook/10580943/
书中一开篇就提到了加拿大冰球运动员选拔机制中很有趣的一件轶事:
职业青年队绝大多数球员的生日集中在1月、2月和3月,这实在有点不可思议
加拿大冰球队按年龄分组所依据的分界线是1月1日,即从1月1日到当年12月31日之间出生的球员将会被分在同一组。也就是说,一个1月1日出生的选手,是在跟许多年纪比他小的队友争夺晋级权——在青春期到来之前,由于有将近12个月的年龄差距,球员之间在生理成熟度上将会表现出巨大的差异。
正如冰球队员的成长经历一样,因年龄大几个月而显现的微弱优势会在孩子的成长过程中不断积累,最终引导孩子走向成功或不成功,自信或不自信的轨道中,其影响会延伸许多年。
能否进入加拿大职业青年冰球队竟然和出生月份有关系,实在是太有趣了。
假想如果你运动天赋非常好,但是不幸出生在12月,于是不得不从小和大你将近一岁的少年运动员一起训练。
表现难免显得不那么出色,不受教练待见,得不到正面反馈,出场坐冷板凳……逐渐逐渐,伤仲永。
由此就联想到了,到TW来工作的人其出生月份是否也存在什么神奇的规律呢?
Facehub
生日信息哪家强?
Facehub帮你忙,它可以查到每个注册用户的生日(只有月日,没有年)。
(注:Facehub是ThoughtWorks公司内部的一个社交网站,只对员工开放注册。用户可以在该网站了解其他同事的信息。)
作为一个内部推广的网站,FaceHub在公司内邮件组里总是铺天盖地、见缝插针地作广告宣传,每次看到觉得审美都疲劳了,不过到了需要的时候第一个就想到了它。
广告的作用,诚不我欺。
我先目测,Facehub用户不会超过500人。
并且用户的id是连续的自增数字,这就很好办了,我只要构造N多获取用户数据的GET请求就好了。
这N多的GET请求,肯定不能一个一个慢慢发送,那就需要异步请求了,这就是钉子啊!
这就是大量的需要被组织的异步操作啊!
钉锤终于有机会合体了。
于是我就写了这么个脚本: https://github.com/cuipengfei/Spikes/blob/master/js/birth/birth.js
其中使用Promise把大量的异步Http请求组织起来,然后统计其结果。
(注:如果需要自己跑这个脚本,需要把第七行的token替换成你自己的合法值,如果您没有账号的话就无需尝试了哦)
以下是统计结果,获取到用户数量348:
由此可以看到,来TW工作的人,11月,10月,8月出生的最多,5月出生的最少。
由于样本量不够大(只有348人),所以统计数据的含义还不太好说。
下面是我胡乱猜测的、不科学的、不严谨的理论
我们小学入学时卡生日印象中是用8月卡的,那么这就和加拿大的冰球挑队员卡1月类似。
那这样,小学入学后,优势的积累就应该会倾向于8,9,10这几月的学生(类比冰球青年职业队队员集中分布在1,2,3这几个月)。
这几个月生日的小学生从小积累优势,并在成年后把优势携带到了求职之中去。
那为什么我们统计出来是8,10,11月份的人份额多呢?怎么不是8,9,10这几个月呢?统计出来的数据为什么把9月给跳过去了呢?可怜的9月得罪谁了呢?
我猜是由于9月这群人会成为某种星座的几率实在是太高了,被命运之神无情的给镇压掉了。:(抱歉
既然已经有了这份代码,可以统计出生月份,索性再统计些其他侧面的数据:
可见天秤和狮子座的最多,金牛座的最少。和上面的月份排名差异不大。
仔细看下的话,发现我只得罪了7.4%的人,好欣慰:)
看入职日期,大学毕业和跳槽的高峰期很凸显。9,10月最少,这倒不算什么惊人的发现。
最后
由于只统计了348人的信息,所以以上猜测仅供娱乐,请勿当真。
请大家积极注册Facehub,并填写真实的生日信息,以促进统计科学的繁荣发展。
(如果您无法注册,可以考虑投一份简历,然后再来促进统计科学的繁荣发展哦)