程序员的玄学与佛学
# 程序员的玄学与佛学
# 道家思想与编程思想
有道无术,术尚可求,有术无道,止于术。--道德经
简单来说:道是思想,术是方法。
# 什么是编程思想
编程思想其实是解决问题时的思考方式。
关于编程的思想有很多:
- 面向过程编程思想
- 面向对象编程思想
- 面向接口编程思想
- 面向服务编程思想
- ...
这里以面向对象编程思想为例说明:
- 核心思想:万物皆对象
- 三大特性:
封装、继承、多态
- 封装:将对象的"属性”和“行为”抽象出来并包装成一个类。
- 继承:将具有相同的"属性”和“行为”对象抽象出来并包装成一个父类。
- 多态:多种形态,相同的“属性”和“行为”,却有不同的表现方式。
案例:猫、狗、动物。编程体现略。
# 有道无术,术尚可求
有了思想,我们就可以选择方法。思想是实践总结出来的智慧,而方法却有很多。编程思想在任何语言中都是适用的,例如Java、C++、Python等等,有了编程思想,我们面对的是对不同语言(工具)的选择,不同的是他们的语法(使用说明书)。
# 有术无道,止于术
如果我们有了方法,却没有指导思想,个人境界往往停留在会工具使用的层面,很难应对以后要的变化。俗语说道:知其所然,而不知其所以然。
总的来说,我们在学习的时候,道先行,术实践。道是思想,术是方法,用思想去指导方法的选择。在学习编程的时,不能仅仅停留在不同编程语言的使用的掌握,而是要挖掘编程语言背后的思想。
# 批判性思维学编程
最有效的教育方法不是告述人们答案,而是向他们提问。--苏格拉底
学习到一个新的知识点或技能,不仅要能够向他人提出疑问,还要达到回答别人的疑问。
# 什么是批判性思维?
批判性思维是一种思维习惯,是“对思考的思考”。而不是怼别人。
什么是对“对思考的思考”?当别人对你传授某种知识的时候,通常是他人对这个知识的思考和终结,这个时候我们要去思考"为什么他会这样理解的(他对问题的思考)?他理解的对不对?"
案例:
- 老师教授
”jsp的知识点,列出了1、2、3点...
- 首先我们接触到的信息,是经过老师思考过的信息:
"他是这样理解jsp的,有这些知识点..."
,往往我们学习的时候,仅仅停留在这一步,几乎是全盘接受别人的思考,盲目地去“消化、理解”,学习是被动的。 - 如果假如批判性思维就会想:
他说的jsp知识点有哪些?(理解一下)
为什么学jsp?他说的1、2、3点对不对?我是否同意他的观点,有什么理有支撑我的想法?
- ...
- 其实这就是
"对别人的思考的思考"
。
说简单点就是:要把别人说的过一遍脑子
,而我们生活中经常就会触犯一个思考误区:不过脑子地“怼别人"。思考不过脑子,人云亦云。
案例:
diu,JSP啊,垃圾东西,早过时了,学他干嘛?
为什么过时了?
我不知道啊,大家都这样说
。
这种就是没有批判性思维,长期以往,会形成不好的思维习惯。
# 什么是思维习惯?
说到思维习惯,首先我们要知道什么是习惯,习惯是指积久养成的生活方式。
习惯大体分三种,难度梯度是递进的
:
- 行为习惯
- 身体习惯
- 思维习惯
我们经常听过“21天养成一个好习惯”,其实是行为习惯。这种习惯通常是比较简单,不费脑的习惯,比如早起喝杯水、晚上刷牙这些。
身体习惯养成的时间通常要三个月左右,比如晨跑、健身,这些习惯容易被打断,他们的特点通常需要付出较多的时间、毅力去坚持。
思维习惯三种习惯中最难养成的,通常是需要一两年,甚至两三年
,这种习惯通常是比较抽象的,是看不见摸不着的。像批判性思维,需要我们在理解了别人的信息的时候,进一步去思考,挖掘信息,形成自己对知识的理解。
批判性思维案例:
什么是面向接口编程 ? 接口是为了处理各个对象之间的协作关系,是系统设计的关键组成部分,主要作用是为了将“定义”
与“实现”
分离,从而实现系统“解耦”
的目的。
如何面向接口编程? 在系统设计之初,要为抽象类建立行为模型。
脑海:
- 什么是“定义”、"实现”,“解耦”?
- 为什么要这样?
- ...
是因为面向对象设计原则提供了方法和准则(七大原则):
- 开:面向扩展开,面向修改关闭
- 口:接口隔离原则
- 合:组合/聚合原则
- 里:里氏替换原则
- 最:最少知识原则(迪米特法则)
- 单:单一职责原则
- 依:依赖倒置原则
# 佛家思想与产品思维
看山是山,看山不是山,看山还是山。--禅宗人生三重境界
- 看山是山:看的是山的本身,是现象。
- 腾讯QQ:ICQ->OICQ->QQ->腾讯QQ
学会借用
- 看山不是山:看的是山背后的道理,是本质。
- 微信:高速邮箱软件
学会遗忘
- 看山还是山:看的是现象和本质的统一,是融会贯通。
- 微信:即时通讯 + 高速邮箱
学会学习
# 总结
道家思想修今生,用于技术学习
佛家思想修来世,用于产品迭代