Start to learn Haskell 02

闲话

昨天去了一趟医院,然后就回家休息了,顺便帮着解决一些工作的事,以为小伙伴们应该也会像往前一样十点多十一点那样就撤了,直到今天早晨才知道,他们昨天竟然一直工作到凌晨一点多,太辛苦了,可怜的孩子们,今天我也要一起加班,不知道几点能撤,不过我手上的事倒是做完了,可以写写博客什么的,估计今天晚上会回得比较晚,不知道有没有时间看书。

元组(tuple)

昨天就学了关于元组的一节,元组跟列表有些相似,使用圆括号声明,如(1, "Toby", "M"),通过这个语句已经可以看出其与列表的一些区别,列表中只能保存一种数据类型,而元组可以保存多种不同类型,所以,元组应该更适用于保存一组有意义的档案,每一个元组都可以当做数据表中的一条记录来使用。

那么,如果我们保存的一组数据都是相同的数据类型,比如一组二维坐标点[[1,2], [2,3], 3,4]],这样看起来似乎不会有问题,列表中的每一个列表都是一个坐标,一切都是那么完美,可是一个意外出现了,某位连续加班一个星期的程序猿手一抖,这个就把这个列表写成了[[1,2],[2,3,3],[3,4]],程序正常的完成了编译,于是就把程序放上了线,结果,程序无法按照这些坐标画出期望的线。如果使用元组进行定义会是怎样哪?同个个程序猿又犯了同样的错误,写出来这样一个元组的列表[(1,2),(2,3,3),(3,4)],编译,出了错误提示,编译不通过,然后就直接按照错误提示找到出错的地方。

Start to learn Haskell 01

惯例闲话

昨天加班到比较晚,回家后基本上就11点多了,洗漱完毕基本上也就十二点了,不过还是坚持了一下,看了几页书,今天再接着写写。这次学的主要内容就是部分列表相关的操作,和区间以及列表推导式。由于每次都是睡觉前看上几页书并测试一下代码第二天才写BLOG,所以可能难免有些错误和遗漏,但是我仍然认为这样做是合理的,经过一段时间的理解和遗忘再加上回忆并记录下来,这可能更有利于掌握吧。

列表函数

  • null [1,2,3] 检查列表是否为空,返回TrueFalse
  • take 2 [1,2,3] 获取前n个元素组成的列表,当n为0时返回空列表,当n大于列表长度时返回整个列表
  • drop 2 [1,2,3] 删除前n个元素,并返回剩余元素组成的列表,当n等于0时返回整个列表,当n大于列表长度时返回空
  • maximum [1,4,7,3,6] 返回列表中最大的元素
  • minimum [1,4,7,3,6] 返回列表中最小的元素
  • sum [3,6,9] 对列表中的元素进行求和
  • product [3,6,9] 对列表中的元素求积
  • elem 3 [5,4,3,2,1] 检查给定数据是否为列表中的元素,返回TrueFalse

区间

简单区间

所谓区间,实际上是利用列表元素的规律以简单的方式生成较大列表的一种方法。例如,按之间所学习的,如果要定义一个从1到10所有整数的列表,就需要这样[1,2,3,4,5,6,7,8,9,10],但是如果使用区间则可以简化成[1..10],当然了,如果要生成字母A-Z的列表,同样可以使用类似的方法['A'..'Z']

Start to learn Haskell 00

闲话几句

很丢人,说好的开始写千字文的,但是因为工作原因,最近太忙,每天回到家里都已经很晚了,也就没有胆量开始写一篇文章,一是因为开始写之前需要思考,整理要写的内容,这些都需要花时间,而这会导致的后果就是睡得太晚,影响第二天的工作;二是因为一时间实在想不出要写什么,每天的工作生活千篇一律,工作就是写代码讨论解决方案,然后就是抽一点时间去吃饭,而且吃饭的花样都没什么太大的变化,然后其它的时间都是在上班或回家的路上。所以为了便于坚持,也为了增加点什么,打算现在今天开始学Haskell,然后把学习的过程整理出来,这也算是坚持写作了,然后再在偶尔有灵感的时候写点技术之外的感悟啊之类的,既然不能产出高质量的思想,那就整点也许对一些人有用的干货吧。

关于Haskell

话说Haskell是一种函数式语言,在此之前我接触过Common Lisp,而在我的印象中,属于函数式语言的也只有Lisp及其各种方言,如Clojure、Scheme。当然也曾听说过Haskell语言,不过当时对于这属于哪种类型的语言并不明确,在来到新公司之后,由一同事推荐之后才对这门语言产生了兴趣。

函数式语言对于我的意义,我想更多的应该是在于可以改变一下对于程序的思路,或许换个角度看问题,难题可能也就变成了随手可解的题目了吧。当然,如果能用这语言解决一些实际工作中的问题那就更好了。

关于阅读和买书

闲话几句

最近在简书上读了几篇关于写作和文章,其中有谈到关于如何提高写作能力的训练方法,其中有提到最重要的还是多写,于是在上面又看到了那篇译作《每天一篇千字文》。

这要说起来,写出千字的文章难度并不算大,但是每天写出一篇来这就很有挑战性了。我觉得,要是只是每天写出一篇千字文也许是可以凑出来,不就是千字吗,光写每天的流水帐也差不多可以整得差不多了,但是这样的文章写出来有意义吗?之所以写文章,要么就是表达思想、价值观,要么输出知识,如果只是每天千篇一律的生活流水帐,那还真不如不写。所以,每天一篇千字文的最大难度应该是每天能输出有价值的东西,这才是难度所在。

事物总是有两面的,回过头再想想,如果我真的能坚持这么写下去,总有一天,现有的知识会输出光,这时候为了坚持下去,会不会促使我去学习吸收新的知识哪?

最终还是没忍住HHKB的诱惑

刚打开BLOG看了一下,发现上次发文已经是N个月之前的事了,实在是不应该啊,这次趁着新键盘到手的契机,顺便写写最近的一些情况以庆祝。

上一份工作

为什么说是上一份工作哪?原因是,我换工作了,这应该是持续时间最短的一份工作了。

现在想来,上一份工作似乎没做多少事,从3月份到11月份,八个月的时间,真正由我来做的其实就只有两件事,而其中一件还只是进行了设计以及初步的定义相关的编码。

首先是队列系统,主要是用来解决高并发状态时的压力问题,这个项目通过在世界杯项目中的使用,基本上证实了思路的正确,并且在使用中也确实是起到了非常明显的作用,实现了设计目标。

然后是一个数据层系统,设计中这个数据层会解决数据的持久化及缓存的管理及合并,并且向下游用户提供良好的使用接口,实现MySQL协议以降低现有系统数据的迁移难度,就我看来,这个设计是合适的,但是由于公司内部的一些变动,没办法让我把精力放在这个系统的开发上,然后,就没再坚持下去。

新工作

现在的这份工作是在朋友创业公司,这朋友还是王爷介绍认识的(能认识王爷以及几个新朋友是我这次回北京最大的收获),现在是接着做游戏后端相关的工作。

目前来看,现在的工作对我来说又是一个巨大的收获。在项目开始时我就有幸参与进来了,因为时间足够,在后端的设计初期花了大量的时间进行系统的设计,这些设计目前来说还是比较合理的,至少使后期的开发工作极其的便利,关于项目的设计部分以后再专门讨论。

现在这个游戏项目已经到了后期,目前处于跟发行商谈判以及根据发行商要求进行修改的阶段,再有两个月左右的时间应该就可以跟大家见面。

键盘

虽然早就对机械键盘有所了解,但是真正接触的时间并不长,先是用了一把CHERRY的茶轴,然后在对HHKB进行了大量的了解之后,实在没忍住就入了一把,虽然价格上贵了些,拿到手上就对其爱不释手了,这篇博客就是用这个键盘写的第一篇文章,用到现在我只有一个感觉,那就是舒服。

现在看来我真是不会细节描写,除了说舒服我就找不出更合适的词来形容这个键盘了。

在买这个键盘之前我还担心不适应其独特的键盘布局,但是现在看来这个担心是完全没有必要了。原因应该有那么三个吧,一、我把2、3跳线打开了,其它都是默认的,2号是把键盘设置成Mac模式,3号是把BACKSPACE切换成习惯的方式,其它的跟用普通键盘没啥区别。二、我用习惯了Mac,用CTRL配合光标移动对我来说也很熟悉,再加上vi/emacs对我来说更是最常用的编辑器。三、没了。

最后,对于程序员来说,我觉得HHKB确实是值得拥有的一把利器。