SlideShare a Scribd company logo
1 of 81
编程的糖果 
纯白色燃烧@新浪视频 
2014.10.17
动因和定位
• 扯淡 
• 欢乐 
对日常工作没有指导意义
驯兽—— 行为主义 
浇花—— 构建主义
Alan Turing
图灵测试
图灵机
“可计算性”
哇!
但是...
如何实现一个” IF ” ?
有限状态机
语法糖
第1颗糖 
一起来填
编程是...
搞清楚了一切,终于可以愉快地编程了。
过程(流程)式编程
但是...
我擦!
我擦!!
讨论: 
什么是 
面向对象编程?
讨论: 
你们喜欢 
面向对象编程吗?
那么, 问题来了...
既然有人喜欢,有人不喜欢 
除了喜好,OO有没有别的意义? 
有没有哪种情况下,是非OO不可的?
考虑这样一种情况—— 
现在有字符串”abcdefgh”, 
希望有一个方法substr2(),可以返回前n个字符 
但是要求是连续的 
比如说连续两次调用substr2(2),分别返回 
“ab” 和“cd”
考虑这样一种情况—— 
现在有字符串”abcdefgh”, 
希望有一个方法substr2,可以返回前n个字符 
但是要求是连续的 
比如说连续两次调用substr(2),分别返回 
“ab” 和“cd” 
如果要求可以向前向后,双向读取呢?
如果要求对多个字符串都可以用呢? 
考虑这样一种情况—— 
现在有字符串”abcdefgh”, 
希望有一个方法substr2,可以返回前n个字符 
但是要求是连续的 
比如说连续两次调用substr(2),分别返回 
“ab” 和“cd” 
如果要求可以向前向后,双向读取呢?
更大的麻烦
看看前辈 
OO从何而来?
Smalltalk
Smalltalk 1971~1975 by施乐公司
Smalltalk 1971~1975 by施乐公司 
1979年,凯邀请乔布斯来到施乐公司参观, 
乔布斯对图形界面印象深刻。
Smalltalk 1971~1975 by施乐公司 
1979年,凯邀请乔布斯来到施乐公司参观, 
乔布斯对图形界面印象深刻。 
1973年第一个可视化操作的Alto电脑在施乐公司完成, 
它使用3键鼠标、图形窗口。
来自维基百科 
20世纪70年代施乐研究所发明的Smalltalk语言 
将面向对象程序设计的概念定义为—— 
在基础运算中,对对象和消息的广泛应用。 
艾伦·凯所描绘的Dyna Book主要是帮助小孩学习。 
为了发展Dynabook, 
艾伦甚至发明了Smalltalk编程语言, 
并发展出图形使用者接口,
第2颗糖 
一起来填
编程是...
搞清楚了一切,终于可以愉快地编程了。
到此为止?
函数式编程又是个毛线啊?
讨论: 
函数式编程是什么?
这次我们反过来 
先看一看前辈是怎么做的
Alonzo Church
邱奇原理 
所有具有“可计算性”的工作, 
都能以λ演算的方式完成。 
1933,1935
λ演算 
参数 
(变量) 
函数体 
(λ表达式) 
λx.x 
标点符号
λ演算 
其实就是匿名函数
λ演算 
• 函数和变量是唯一的数据类型 
• λ绑定是唯一的赋值方法
λ演算对编程语言的影响
λ演算对编程语言的影响 
λf.λx.f x 
(lambda (f) (lambda(x) (f x)) 
lambda { |f| lambda { |x| f[x] } } 
->(f) { ->(x) {f.(x) } } 
Lisp 
lambda f: lambda x: (f x) 
ruby 
python
λ演算对编程语言的影响 
几种我最常用的语言 
PHP4 create_function() 
PHP5 $func = function() {} 
sub{ return sub { shift(@_) + 1;}->(shift(@_)) * 3 }->(2); 
PHP 
foo (double a, double b){ 
double square (double z) { return z * z; } 
return square (a) + square (b); 
} 
but… 
Perl 
C
λ演算对编程语言的影响 
λf.λx.f x 
function(f) {return function(x) {return f(x) } } 
(f) -> (x) -> f(x) 
Javascript 
CoffeeScript
考虑这样一种情况—— 
现在有一个数组(1, 2, 3), 
希望把数组里的每一个值先执行方法suba, 
然后做执行方法subb。
map
考虑这样一种情况—— 
现在有一个数组a,包含1000个元素, 
希望把数组里的每一个值先全部乘以2, 
然后求新数组的和。
考虑这样一种情况—— 
现在有一个数组a,包含1000个元素, 
希望把数组里的每一个值先全部乘以2, 
然后求新数组的和。 
如果要求O(1)呢?
reduce
考虑这样一种情况—— 
现在有一个数组,找它的第一个非零值
考虑这样一种情况—— 
现在有一个数组,找它的第一个非零值 
这个函数可分解吗?
更大的麻烦
函数式编程 
到底给了我们什么?
新的粘和函数的方法 
<==> 
新的分解问题的思路
high order function
惰性计算
将子问题的解粘合在⼀起的能⼀ 
<==> 
分解问题的能力
第3颗糖 
一起来填
编程是...
完
剧没有终 
编程还在继续 
看似无法改变的世界 
正在被我们改变
返场小段
编程的糖果
编程的糖果

More Related Content

Viewers also liked

Hubspot Charts Graphs April2010
Hubspot Charts Graphs April2010Hubspot Charts Graphs April2010
Hubspot Charts Graphs April2010SocialOnline
 
The archuved Canadian US Patent Competitive Intelligence Database (2017/2/7)
The archuved Canadian US Patent Competitive Intelligence Database (2017/2/7)The archuved Canadian US Patent Competitive Intelligence Database (2017/2/7)
The archuved Canadian US Patent Competitive Intelligence Database (2017/2/7)Muchiu (Henry) Chang, PhD. Cantab
 
Reconocimientos y premios slade 2011
Reconocimientos y premios slade 2011Reconocimientos y premios slade 2011
Reconocimientos y premios slade 2011Hugo Brunetta
 
The Archived Canadian Patent Competitive Intelligence (2013/9/10)
The Archived Canadian Patent Competitive Intelligence (2013/9/10) The Archived Canadian Patent Competitive Intelligence (2013/9/10)
The Archived Canadian Patent Competitive Intelligence (2013/9/10) Muchiu (Henry) Chang, PhD. Cantab
 
Social Marketing Analyse
Social Marketing AnalyseSocial Marketing Analyse
Social Marketing AnalyseSocialOnline
 
The archived Canadian US Patent Competitive Intelligence Database (2014/10/28)
The archived Canadian US Patent Competitive Intelligence Database (2014/10/28) The archived Canadian US Patent Competitive Intelligence Database (2014/10/28)
The archived Canadian US Patent Competitive Intelligence Database (2014/10/28) Muchiu (Henry) Chang, PhD. Cantab
 
The archived Canadian US Patent Competitive Intelligence Database (2014/12/2)
The archived Canadian US Patent Competitive Intelligence Database (2014/12/2) The archived Canadian US Patent Competitive Intelligence Database (2014/12/2)
The archived Canadian US Patent Competitive Intelligence Database (2014/12/2) Muchiu (Henry) Chang, PhD. Cantab
 
The Archived Canadian Patent Competitive Intelligence (December 14, 2010)
The Archived Canadian Patent Competitive Intelligence (December 14, 2010)The Archived Canadian Patent Competitive Intelligence (December 14, 2010)
The Archived Canadian Patent Competitive Intelligence (December 14, 2010)Muchiu (Henry) Chang, PhD. Cantab
 
Com scoredatapassport 2h10
Com scoredatapassport 2h10Com scoredatapassport 2h10
Com scoredatapassport 2h10SocialOnline
 
The archived Canadian US Patent Competitive Intelligence Database (2017/1/3)
The archived Canadian US Patent Competitive Intelligence Database (2017/1/3)The archived Canadian US Patent Competitive Intelligence Database (2017/1/3)
The archived Canadian US Patent Competitive Intelligence Database (2017/1/3)Muchiu (Henry) Chang, PhD. Cantab
 
Presentation2
Presentation2Presentation2
Presentation2WELLSTAR
 
The archived Canadian US Patent Competitive Intelligence Database (2016/10/25)
The archived Canadian US Patent Competitive Intelligence Database (2016/10/25)The archived Canadian US Patent Competitive Intelligence Database (2016/10/25)
The archived Canadian US Patent Competitive Intelligence Database (2016/10/25)Muchiu (Henry) Chang, PhD. Cantab
 
The archived Canadian US Patent Competitive Intelligence Database (2016/8/9)
The archived Canadian US Patent Competitive Intelligence Database (2016/8/9)The archived Canadian US Patent Competitive Intelligence Database (2016/8/9)
The archived Canadian US Patent Competitive Intelligence Database (2016/8/9)Muchiu (Henry) Chang, PhD. Cantab
 
The Archived Canadian Patent Competitive Intelligence (January 18, 2011)
The Archived Canadian Patent Competitive Intelligence (January 18, 2011)The Archived Canadian Patent Competitive Intelligence (January 18, 2011)
The Archived Canadian Patent Competitive Intelligence (January 18, 2011)Muchiu (Henry) Chang, PhD. Cantab
 
The archived Canadian US Patent Competitive Intelligence Database (2016/5/31)
The archived Canadian US Patent Competitive Intelligence Database (2016/5/31) The archived Canadian US Patent Competitive Intelligence Database (2016/5/31)
The archived Canadian US Patent Competitive Intelligence Database (2016/5/31) Muchiu (Henry) Chang, PhD. Cantab
 
The archived Canadian US Patent Competitive Intelligence Database (2016/5/3)
The archived Canadian US Patent Competitive Intelligence Database (2016/5/3) The archived Canadian US Patent Competitive Intelligence Database (2016/5/3)
The archived Canadian US Patent Competitive Intelligence Database (2016/5/3) Muchiu (Henry) Chang, PhD. Cantab
 

Viewers also liked (18)

Hubspot Charts Graphs April2010
Hubspot Charts Graphs April2010Hubspot Charts Graphs April2010
Hubspot Charts Graphs April2010
 
The archuved Canadian US Patent Competitive Intelligence Database (2017/2/7)
The archuved Canadian US Patent Competitive Intelligence Database (2017/2/7)The archuved Canadian US Patent Competitive Intelligence Database (2017/2/7)
The archuved Canadian US Patent Competitive Intelligence Database (2017/2/7)
 
Reconocimientos y premios slade 2011
Reconocimientos y premios slade 2011Reconocimientos y premios slade 2011
Reconocimientos y premios slade 2011
 
The Archived Canadian Patent Competitive Intelligence (2013/9/10)
The Archived Canadian Patent Competitive Intelligence (2013/9/10) The Archived Canadian Patent Competitive Intelligence (2013/9/10)
The Archived Canadian Patent Competitive Intelligence (2013/9/10)
 
Social Marketing Analyse
Social Marketing AnalyseSocial Marketing Analyse
Social Marketing Analyse
 
The archived Canadian US Patent Competitive Intelligence Database (2014/10/28)
The archived Canadian US Patent Competitive Intelligence Database (2014/10/28) The archived Canadian US Patent Competitive Intelligence Database (2014/10/28)
The archived Canadian US Patent Competitive Intelligence Database (2014/10/28)
 
The archived Canadian US Patent Competitive Intelligence Database (2014/12/2)
The archived Canadian US Patent Competitive Intelligence Database (2014/12/2) The archived Canadian US Patent Competitive Intelligence Database (2014/12/2)
The archived Canadian US Patent Competitive Intelligence Database (2014/12/2)
 
The Archived Canadian Patent Competitive Intelligence (December 14, 2010)
The Archived Canadian Patent Competitive Intelligence (December 14, 2010)The Archived Canadian Patent Competitive Intelligence (December 14, 2010)
The Archived Canadian Patent Competitive Intelligence (December 14, 2010)
 
Com scoredatapassport 2h10
Com scoredatapassport 2h10Com scoredatapassport 2h10
Com scoredatapassport 2h10
 
The archived Canadian US Patent Competitive Intelligence Database (2017/1/3)
The archived Canadian US Patent Competitive Intelligence Database (2017/1/3)The archived Canadian US Patent Competitive Intelligence Database (2017/1/3)
The archived Canadian US Patent Competitive Intelligence Database (2017/1/3)
 
Presentation2
Presentation2Presentation2
Presentation2
 
The archived Canadian US Patent Competitive Intelligence Database (2016/10/25)
The archived Canadian US Patent Competitive Intelligence Database (2016/10/25)The archived Canadian US Patent Competitive Intelligence Database (2016/10/25)
The archived Canadian US Patent Competitive Intelligence Database (2016/10/25)
 
Powerpointclass6
Powerpointclass6Powerpointclass6
Powerpointclass6
 
Sogeti lezing
Sogeti lezingSogeti lezing
Sogeti lezing
 
The archived Canadian US Patent Competitive Intelligence Database (2016/8/9)
The archived Canadian US Patent Competitive Intelligence Database (2016/8/9)The archived Canadian US Patent Competitive Intelligence Database (2016/8/9)
The archived Canadian US Patent Competitive Intelligence Database (2016/8/9)
 
The Archived Canadian Patent Competitive Intelligence (January 18, 2011)
The Archived Canadian Patent Competitive Intelligence (January 18, 2011)The Archived Canadian Patent Competitive Intelligence (January 18, 2011)
The Archived Canadian Patent Competitive Intelligence (January 18, 2011)
 
The archived Canadian US Patent Competitive Intelligence Database (2016/5/31)
The archived Canadian US Patent Competitive Intelligence Database (2016/5/31) The archived Canadian US Patent Competitive Intelligence Database (2016/5/31)
The archived Canadian US Patent Competitive Intelligence Database (2016/5/31)
 
The archived Canadian US Patent Competitive Intelligence Database (2016/5/3)
The archived Canadian US Patent Competitive Intelligence Database (2016/5/3) The archived Canadian US Patent Competitive Intelligence Database (2016/5/3)
The archived Canadian US Patent Competitive Intelligence Database (2016/5/3)
 

More from pluschen

密码学 & DRM & sgx
密码学 & DRM & sgx密码学 & DRM & sgx
密码学 & DRM & sgxpluschen
 
版本管理的四种工作模式
版本管理的四种工作模式版本管理的四种工作模式
版本管理的四种工作模式pluschen
 
easy elliptic curve(椭圆曲线算法解释)
easy elliptic curve(椭圆曲线算法解释)easy elliptic curve(椭圆曲线算法解释)
easy elliptic curve(椭圆曲线算法解释)pluschen
 
码率选择之殇
码率选择之殇码率选择之殇
码率选择之殇pluschen
 
搜索引擎原理略览
搜索引擎原理略览搜索引擎原理略览
搜索引擎原理略览pluschen
 
分布式的七个场景
分布式的七个场景分布式的七个场景
分布式的七个场景pluschen
 
哲学问题的科学解
哲学问题的科学解哲学问题的科学解
哲学问题的科学解pluschen
 
BeijingUbuntuHackathon作品发表
BeijingUbuntuHackathon作品发表BeijingUbuntuHackathon作品发表
BeijingUbuntuHackathon作品发表pluschen
 
产品经理入门
产品经理入门产品经理入门
产品经理入门pluschen
 
视频点播直播新混跑架构
视频点播直播新混跑架构视频点播直播新混跑架构
视频点播直播新混跑架构pluschen
 
分布式和文件系统
分布式和文件系统分布式和文件系统
分布式和文件系统pluschen
 
视频编码原理简介Sohu版
视频编码原理简介Sohu版视频编码原理简介Sohu版
视频编码原理简介Sohu版pluschen
 
GPU和视频编解码
GPU和视频编解码GPU和视频编解码
GPU和视频编解码pluschen
 
走向开源:提交CPAN模块Step by Step
走向开源:提交CPAN模块Step by Step走向开源:提交CPAN模块Step by Step
走向开源:提交CPAN模块Step by Steppluschen
 
Colonel转码集群
Colonel转码集群Colonel转码集群
Colonel转码集群pluschen
 
Colonel——视频转码集群程序
Colonel——视频转码集群程序Colonel——视频转码集群程序
Colonel——视频转码集群程序pluschen
 
视频编码原理简介
视频编码原理简介视频编码原理简介
视频编码原理简介pluschen
 

More from pluschen (18)

密码学 & DRM & sgx
密码学 & DRM & sgx密码学 & DRM & sgx
密码学 & DRM & sgx
 
版本管理的四种工作模式
版本管理的四种工作模式版本管理的四种工作模式
版本管理的四种工作模式
 
easy elliptic curve(椭圆曲线算法解释)
easy elliptic curve(椭圆曲线算法解释)easy elliptic curve(椭圆曲线算法解释)
easy elliptic curve(椭圆曲线算法解释)
 
码率选择之殇
码率选择之殇码率选择之殇
码率选择之殇
 
搜索引擎原理略览
搜索引擎原理略览搜索引擎原理略览
搜索引擎原理略览
 
分布式的七个场景
分布式的七个场景分布式的七个场景
分布式的七个场景
 
哲学问题的科学解
哲学问题的科学解哲学问题的科学解
哲学问题的科学解
 
BeijingUbuntuHackathon作品发表
BeijingUbuntuHackathon作品发表BeijingUbuntuHackathon作品发表
BeijingUbuntuHackathon作品发表
 
产品经理入门
产品经理入门产品经理入门
产品经理入门
 
视频点播直播新混跑架构
视频点播直播新混跑架构视频点播直播新混跑架构
视频点播直播新混跑架构
 
分布式和文件系统
分布式和文件系统分布式和文件系统
分布式和文件系统
 
视频编码原理简介Sohu版
视频编码原理简介Sohu版视频编码原理简介Sohu版
视频编码原理简介Sohu版
 
GPU和视频编解码
GPU和视频编解码GPU和视频编解码
GPU和视频编解码
 
走向开源:提交CPAN模块Step by Step
走向开源:提交CPAN模块Step by Step走向开源:提交CPAN模块Step by Step
走向开源:提交CPAN模块Step by Step
 
Colonel转码集群
Colonel转码集群Colonel转码集群
Colonel转码集群
 
Colonel——视频转码集群程序
Colonel——视频转码集群程序Colonel——视频转码集群程序
Colonel——视频转码集群程序
 
视频编码原理简介
视频编码原理简介视频编码原理简介
视频编码原理简介
 
Perl 4 sa
Perl 4 saPerl 4 sa
Perl 4 sa
 

编程的糖果

Editor's Notes

  1. 马瘦毛长蹄子胖,两口子睡觉争热炕; 老头要在炕里头睡,老婆死叽掰列偏不让; 老头说是我拣的柴,老婆说这是我烧的抗; 老头说偏睡偏睡偏要睡,老婆说不让不让偏不让; 老头抄起了掏灰耙,老婆拿起了赶面杖; 两口子乒噔乓当打到大天亮,挺好的热炕谁也没睡上。
  2. 扯淡 —— 绝对对工作没有指导意义;黑什么,捧什么,都是玩笑话,该用啥用啥 胡抡 —— 想到哪扯到哪,随时打断,不限定固定的方向; 欢乐 —— 尽量给大家今天这个下午呢,和大家一起享受一些欢乐;
  3. 行為主義者認為自由意志只是一種幻覺,並認為人類所有的行為都是由先天與後天環境所決定,也就是先天基因加上後天環境所產生的結果,由人類所經歷過的聯想或者增強所造成。 建构主义认为知识不再是我们通常所认为的课本、文字、图片以及教师的板书和演示等对现实的准确表征,而只是一种理解和假设。 最好的培训就是互动。要掌声。 和今天的主题,编程有什么关系呢?
  4. 如果电脑能在5分钟内回答由人类测试者提出的问题,且其超过30%的回答让测试者误认为是人类所答,则电脑通过测试。 在图灵看来,如果一台机器的行为,让人类无法辨别它是机器还是人类,那么就可以认为,这台机器具有了人类智能。这种只关心外在行为,不关心内在机制的观点,后来形成了一个学派,被称为“行为主义人工智能”,图灵本人自然成为了这个学派的代表人物。
  5. 一切编程都等价于这个盒子,太神奇了。
  6. 我好像被忽悠了。。。
  7. 当我们在IF的时候,硬件上面发生了什么?
  8. program counter 计算机中提供要从存储器中取出的下一个指令地址的寄存器,通常情况下,每一个指令取出后寄存器就自动增加一步。 程序计数器,或PC。
  9. 英国计算机科学家彼得·約翰·蘭達(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。 语法盐 break; —— int num1;float pi=3.14159;num1=pi;
  10. IF 是 je 的语法糖
  11. 但是...
  12. 这玩意儿出现了。
  13. 还有很多人喜欢它。 我顿时困惑了! 这帮鬼在干什么??
  14. 吕超的故事
  15. 艾伦·凯 发明了这个语言,他当初遭遇了什么?让他做出这样的决定? 我们不得而知。但我想尝试猜一下。
  16. OO 是 事件模型/GUI编程 的语法糖
  17. 函数不变变量变 变量不变函数变
  18. 如果程序的某个部分变得混乱或者复杂,程序员应该设法 将其模块化、通用化。高阶函数和惰性计算便是工具箱里两个新的好工具。
  19. 高阶函数 是 流程控制的语法糖
  20. 这个问题我没有答案,期待哪位同学带给我们新的分享。
  21. 好多人,特别是长辈,在中国“一部分人统治另一部分人”就是历史的循环,人性里面的权力欲不可能被改变。 就算我们想要的“民主自由”被实现了,到最后也会是竹篮打水一场空。 他们也许是对的。但让我们从以程序员的视角看一看这件事。 虽然语法糖并没有改变图灵机的本质。但是一步步走来,随着生产效率的不断提升, 回顾我们最初的出发点,编程这件事确实被极大改变了,我们比当初穿孔的程序员不知道幸福了多少。 贪婪和自私这样的人性就算不能被改变,我们追求更好生活做出的那些努力,那也绝不会是徒劳无功。
  22. 中午的问题—— 为什么用C写出来的程序能比C本身还快? 答:机床的机床