函数式编程的定义是:

In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids stateand mutable data.
即:函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了引入状态及可变数据。

它更强调函数的应用,而不像命令式编程更强调状态的改变。

无副作用(side effect)

命令式函数可能会改变程序的状态,这就会对其产生副作用。在命令式编程中,在执行程序不同的状态下同一个函数的返回结果会发生改变。例如,下面是一个使用JavaScript写的函数。

1
2
3
4
5
6

var state = true;
var getVal = function () [
return state;
}

1
2
3
4
5

console.log(getVal()); //true
state = false;
console.log(getVal()); // false

Read More

在Haskell的世界中,没有变量赋值,流程跳转,如果要实现一些简单的功能,比如求一个数组中的最大值,都需要借助递归实现。

递归函数的定义:

A function may be partly defined in terms of itself.
即如果一个函数的定义中使用了其自身,这个函数就叫做递归函数。

普通递归(traditional recursion)

我们就写一个简单的对数组求和的函数。

1
2
3
4
5

sum' :: (Num a) => [a] -> a
sum' (x:xs) = x + sum' xs
sum' [] = 0

Read More

第一次接触Selenium 的WebDriver,是在一个Web项目中。该项目使用它来进行功能性测试。当我看到Firefox中的页面内容被一个个自动填充并且自动跳转的时候,感觉真的很神奇。通过这段时间的学习觉得可以将我学的关于WebDriver的知识进行一个总结。

Read More

坦白的说这本书不太适合我。当我看到大段大段的数学符号时,就两眼发蒙。刚开始还感觉跟得上,到后来完全lost了。

但是这并不妨碍我从另一个角度来重新了解了图灵、数学、计算机….去年的时候曾听过Jeff讲过的一个session:《世界及宇宙的终极答案》。我敢确定至少一半的内容都是来自这本书。
图灵在论文中描述了一个想象出来的机器,用来论证数理逻辑中的一个问题,论文题目叫:<论可计算数及其在判定性问题中的应用>(On Computable Numbers, with an Application to the Entscheidungsproblem)。这个想象出来的机器被后人成为图灵机。

Read More

如果你是使用面向对像语言进行编程的程序员,那么你应该去了解掌握一门动态语言。而动态语言的魔力之一就是函数式编程。而要学习了解函数式编程,那么haskell是一个不错的选择。

Haskell是是一门纯函数式编程语言(purely functional programming language)。在其世界中函数是第一等对象。并且在haskell中没有赋值,例如你指派a的值为5,然后你无法再给a分配其它的值。所以你不能像命令式语言那样命令电脑“要做什么”,而是通过函数来描述出问题“是什么”。

作为一个纯的函数式编程语言,它支持惰性求值、模式匹配、列表解析、类型类、类型多态……

别着急,让我们慢慢来解开函数式编程的面纱。

Read More

作为一名合格的ThoughtWorker,每年不读个几十本书都不好意思跟别人打招呼。从读书的角度来说,我还真不算是一名合格的ThoughtWorker。不过没关系,发现了问题就要解决问题。2013年来已经读了2,3本书了,按照这个频率下去今年30本书的目标应该问题不大。但是面对庞大的书籍,那些书是值得一读的那?尤其是技术类书籍,更是种类繁多,参差不齐。作为一个合格的程序员,常常纠结如此。

不用怕,ThoughtWorks考虑到这些问题,特推出了《ThoughtWorks Dev 读书路线图》。感谢Longjun和Zhangyi的贡献。

请注意,这里只是列出了一些推荐书籍,难免有些遗漏。你可以把这些书籍当成一个指引,带领你进入知识的海洋。站在别人的肩上才能看的更远。

点击这里查看大图。

今天整理电脑,偶然翻出一篇写于2007年的演讲稿。那是在一次班级团组织生活上向大家介绍自己学习计算机经验的一些感悟。

如今六年过去了,看到六年前自己的感悟,百般滋味涌上心头。六年的时间,从一个意气奋发的少年成长为孩子眼中的叔叔,不变的是对技术的从一而终的热爱。

看着当初稚嫩的自己进行的总结,某些条款至今让我受用,某些甚至自己至今还没做好。看来进步的pattern就是一个实践+总结+实践… 没有总结光有实践是万万不行的,这就像驴拉一辈子磨也不知道想办法用机器代替一样。

现在将演讲稿的内容贴出来,以后可以继续回味与总结。

Read More

使用场景:
如果你有很多工作目录,需要每天在这些目录中跳来跳去。那么你就应该试试goShell. 一个使用简单、功能恰到好处的terminal下的小工具。
gtShell支持将常用的一些目录保存为bookmark,提供快速跳转功能。这样你就不需要在使用cd后面跟随一长串的目录名称。
它也支持自动完成,你只需要输入开头的几个字母,然后按tab键就可以自动匹配。
目前源码被我host在github上。

Read More

读了《正则表达式必知必会》(Regular Expressions - in 10 minutes)一书,很有收获。这本书不厚,只有120多页。但是其由浅入深的系统的介绍了正则表达式。全书内容详实,配了很多实例,是学习正则表达式的一本很好的入门书籍。

我根据这本书画了个Mind Map,来记录自己学到的东西。

点击这里查看大图。