冒号课堂

新版《冒号和他的学生们》
冒号课堂§10.2:抽象类型
     摘要: 抽象类型——实中之虚(介绍抽象类型的种类、意义及其用法

• 浅显的比方只是门槛前的台阶,借之或可拾级入门,却无法登堂入室

• 具体类型是创建对象的模板,抽象类型是创建类型的模块

• 抽象数据类型的核心是数据抽象,而抽象类型的核心是多态抽象

• 必先以术养道,而后以道御术

• 以社会身份而非个人身份作为公民之间联系的纽带,正是针对接口而非实现来编程的社会现实版

• 个体身份对应的规范抽象借助封装,以数据抽象的形式出现

• 家庭身份对应的规范抽象借助继承,以类型层级的形式出现

• 社会身份对应的规范抽象借助多态,以多态抽象的形式出现  阅读全文

posted @ 2009-10-28 08:16 郑晖 阅读(3442) | 评论 (0)  编辑

《冒号课堂》上市
     摘要: 公告:《冒号课堂》已正式上市。  阅读全文

posted @ 2009-10-26 12:54 郑晖 阅读(2275) | 评论 (2)  编辑

冒号课堂§10.1:多态类型
     摘要: 多态类型——静中之动(通过实例展示多态类型的三种用法

• 继承是多态的基础,多态是继承的目的

• 多态是动静结合的产物,将静态类型的安全性和动态类型的灵活性融为一体

• 前者(参数多态)是发散式的,让相同的实现代码应用于不同的场合

• 后者(包含多态)是收敛式的,让不同的实现代码应用于相同的场合

• 模板方法模式突出的是稳定坚固的骨架,策略模式突出的是灵活多变的手腕  阅读全文

posted @ 2009-10-20 18:18 郑晖 阅读(3169) | 评论 (0)  编辑

冒号课堂§6.4:后台脚本
     摘要: 后台脚本——敏捷开发的利器(简谈Perl、PHP、Python和Ruby
• 语言的发展趋势一定是动静结合、刚柔并济
• Perl凝练晦涩,Python优雅明晰,Ruby精巧灵动,PHP简明单纯
• 或许优雅正是来自对细节和规范的重视
• (RoR)与Ruby结合之后,便如一只猱身而上灵猫,立刻衬托出Java和.NET大象般的身影  阅读全文

posted @ 2009-03-02 10:05 郑晖 阅读(3767) | 评论 (4)  编辑

冒号课堂§6.3:前台语言
     摘要: 前台语言——视觉与交互的艺术(简谈VB、Delphi和JavaScript
• Delphi让复杂的事情变得简单,VB让简单的事情变得更简单
• 它(JavaScript)宛如一只神奇的魔袋,乍看平淡无奇,却总能变出意想不到的宝贝
• 待友之道,贵在放大其优点而缩小其缺点,对待语言亦当如是
• 大道相通,难者亦易,易者亦难  阅读全文

posted @ 2009-02-22 21:57 郑晖 阅读(3522) | 评论 (4)  编辑

冒号课堂§6.2:平台语言
     摘要: 平台语言——先搭台后唱戏(简谈Java和C#
• Java的目的是让一种语言在多种平台上运行,而C# 的目的是让多种语言在一种平台上运行
• 两个平台语言(Java和C#),一个重在语言,让语言向平台扩散;一个重在平台,让平台来凝聚语言
• C++提供了一马平川的大路,也提供了陷阱密布的小道;Java则在大路上铺设水泥,同时封锁了捷径小道;C#同样填平了大路上的坑坑洼洼,但把一些小道上“此路不通”的牌子悄悄换成了“此路危险”  阅读全文

posted @ 2009-02-15 22:41 郑晖 阅读(3257) | 评论 (3)  编辑

冒号课堂§6.1:系统语言
     摘要: 系统语言——权力的双刃剑(简谈C、C++和D
• 通禅悟道者拈花不语,坐井观天者蛙鸣鼓噪
• Java程序员大多被惯坏了,环保意识要淡薄得多
• (指针)用得好可以是削铁如泥的神兵利器,用得不好则可能是自我毁灭的罪恶渊薮
• OOP又不是金子,含量越高越好。试图把一切都装进OOP的箱子里的想法无异于削足适履
• 它们(系统语言)的理念是:优化机器的时间而不是人的时间,优化机器的记忆而不是人的记忆;假设编译器是愚蠢的而程序员是聪明的,因此赋予程序员更多的权利、义务与责任
• C++是匹无辔无鞍的野马,看似桀骜不驯,若能顺性而御,必能足踏飞燕,行千里而不劳  阅读全文

posted @ 2009-02-08 22:03 郑晖 阅读(3654) | 评论 (1)  编辑

冒号课堂§5.4:语言误区
     摘要: 语言误区——语言的宗教情结(关于编程语言的一些误区
• 如果说编程范式是一种文化,那么编程语言更像是一种宗教——尽管它本不该是
• 语言只有两种:一种怨声载道,一种无人问津
• 对待一门语言的态度应该是:与其抱怨争执,不如扬长避短
• 过分拔高一种语言与抹煞语言之间的差别是两种极端,皆为秕言谬说
• 这些人若有幸拜关公为师,他们最艳羡的一定他的赤兔马和青龙偃月刀,或许还会抹红脸蓄长须什么的,就是不太愿学他的盖世武功
• 理想的架构师应当如文学大师,既有恢弘大气的构思,又有细腻深刻的笔法;应当如统军大帅,既有运筹帷幄的韬略,又有冲锋陷阵的武功  阅读全文

posted @ 2009-01-19 08:46 郑晖 阅读(4571) | 评论 (4)  编辑

冒号课堂§5.3:动态语言
     摘要: 动态语言——披着彩衣飞舞的脚本语言(动态语言简谈
• 程序是为终端用户服务的,而脚本是为程序员服务的
• 动态语言秉承的一个理念是:优化人的时间而不是机器的时间
• 待静态语言披盔戴甲、备马抬枪之际,动态语言已衣袂飘飘,长剑出手了
• 当脚本语言披上动态语言的彩衣,昔日不起眼的毛毛虫便羽化成碟,开始飘舞在众人追逐的目光之中  阅读全文

posted @ 2009-01-14 09:10 郑晖 阅读(3534) | 评论 (0)  编辑

冒号课堂§5.2:数据类型
     摘要: 数据类型——规则与变通(关于数据类型的讨论
• Duck类型的哲学是:名义不重要,重要的是能力
• 将一个会叫会游的家伙放进池塘看起来不算坏主意,但如果一艘轮船趁机也轰隆隆地开了进来,事情恐怕就不那么美妙了
• 静态类型检查类似“疑罪从有”的有罪推定制,动态类型检查类似“疑罪从无”的无罪推定制
• 尽可能守规则,必要时求变通
• 规则如裤带,过于宽松和过于束缚都不好  阅读全文

posted @ 2009-01-08 00:02 郑晖 阅读(3144) | 评论 (0)  编辑

冒号课堂§5.1:教学计划
     摘要: 教学计划——接下来的故事(讨论下一步教学计划
• 编程水平的提升之道是:在实战中演练招法,在招法中领会心法,心法反过来提升招法,进而提高实战水平,如此循环往复呈螺旋式上升过程。正所谓熟能生巧,巧能生通
• 迭代学习法:即在具体知识与抽象理论之间进行折返式学习
• 网页的迷人之处就在于,能够用精美的画皮来包裹冗长低效的代码
• 无论干哪一行,要想胜任愉快,离不开四样东西:才能、兴趣、方法和努力  阅读全文

posted @ 2008-12-30 10:17 郑晖 阅读(2913) | 评论 (1)  编辑

冒号课堂§4.4:情景范式
     摘要: 情景范式——餐馆里的编程范式(编程范式在餐馆中的应用
• 厨师只需提供一种服务:把纸上菜变成盘中菜,至于蒸、煮、炒、炖等具体做法纯属实现细节
• 可以这么理解(闭包):所谓包,指函数与其周围的环境变量捆绑打包;所谓闭,指这些变量是封闭的,只能为该函数所专用
• 合理地使用闭包能使代码更加简洁清晰,散发出函数式特有的优雅气质
• 换盘子有两种方式:一种是服务员主动换,一种是客人要求换。前者是轮询,后者是通知
• 如果把待加工的菜看作数据,技法看作算法,将数据与算法分离,以算法为中心,那是什么范式?  阅读全文

posted @ 2008-12-21 23:18 郑晖 阅读(3096) | 评论 (1)  编辑

冒号课堂§4.3:汇总范式
     摘要: 汇总范式——一张五味俱全的大烙饼(总结编程范式
• 设计模式好比组合套路,能在一些特定场合下克敌制胜;编程范式则好比武功门派,博大精深且自成体系
• 一种编程范式之所以能独树一帜,关键在于它突破了原有的编程方式的某些限制,带来革命性的新思维和新方法,进一步解放了程序员的劳动力
• 因其长而容己,因其短而容他,此万物之理也
• 语言为形,范式为神。若能以神导形、以形传神,则看似平白无趣的程序也能写出诗画般的意境  阅读全文

posted @ 2008-12-15 16:28 郑晖 阅读(2937) | 评论 (0)  编辑

冒号课堂§4.2:逻辑范式
     摘要: 逻辑范式——当算法失去了控制(再谈逻辑式编程
• 评价代码的复杂度,长短只是一个因素。程序员不是打字员,花在思考上的时间和精力远远超过花在键盘上
• 算法=逻辑+控制。其中逻辑是算法的核心,控制主要用于改进算法的效率  阅读全文

posted @ 2008-12-07 23:19 郑晖 阅读(2962) | 评论 (1)  编辑

冒号课堂§4.1:函数范式
     摘要: 函数范式——精巧的数学思维(再谈函数式编程
• 单靠记忆只能触及知识之表,单靠练习只能深入知识之里,唯有培养方能渗透知识之根
• 学会适度地容忍无知
• 不仅需要强调钻劲和深度的“钉子精神”,还需要强调磨功和广度的“刨子精神”
• 编程语言的语法、语义等都是从编程范式的树根衍生而出的枝叶,把握了这种脉络和节奏,代码才会如音乐舞蹈般韵律有致
• 每种范式擅长的问题领域不尽相同,只有博闻广识,方可扬长避短,程序才会如行云流水般流畅自然
• 程序员更习惯机器风格的过程式思维和现实风格的OOP思维,不容易接纳数学风格的函数式思维  阅读全文

posted @ 2008-11-30 22:27 郑晖 阅读(3210) | 评论 (3)  编辑

冒号课堂§3.4:事件驱动
     摘要: 事件驱动——有事我叫你,没事别烦我(事件驱动式编程简谈
• 它们(同步回调和异步回调)都使调用者不再依赖被调者,将二者从代码上解耦,异步调用更将二者从时间上解耦
• 它们(控制反转、依赖反转和依赖注射)的主题是控制与依赖,目的是解耦,方法是反转,而实现这一切的关键是抽象接口
• “回调”强调的是行为方式——底层反调高层,而“抽象接口”强调的是实现方式——正是由于接口具有抽象性,底层才能在调用它时无需虑及高层的具体细节,从而实现控制反转
• 控制反转导致了事件驱动式编程的被动性
• 事件驱动式还具有异步性的特征,这是由事件的不可预测性与随机性决定的
• 独立是异步的前提,耗时是异步的理由
• 出版/订阅模式正是观察者模式的别名,一方面可看作简化或退化的事件驱动式,另一方面可看作事件驱动式的核心思想  阅读全文

posted @ 2008-11-24 08:37 郑晖 阅读(4039) | 评论 (5)  编辑

冒号课堂§3.3:切面范式
     摘要: 切面范式——多角度看问题(AOP简谈
• 从宏观角度看,太阳底下没有新鲜事——AOP无非是SoC原理和DRY原则的一种应用
• 从微观角度看,太阳每天都是新的——AOP虽自OOP的土壤中长出,却脱离藩篱自成一体
• 抽象是前提,分解是方式,模块化是结果
• 在常人眼中复杂的牛体,庖丁经过抽象,已目无全牛,及至提刀分解,自是游刃有余。待牛如土委地,模块化既成
• 两条(抽象与分解的原则):单一化,正交化。每个模块职责明确专一,模块之间相互独立,即高聚合低耦合
• 对程序员来说,英语也是一门计算机语言,而且是必修的语言
• OOP只能沿着继承树的纵向方向重用,而AOP则弥补了OOP的不足,可以在横向方向重用
• 如果一个程序是一个管道系统,AOP就是在管道上钻一些孔,在每个孔中注入新的代码流  阅读全文

posted @ 2008-11-17 08:35 郑晖 阅读(3148) | 评论 (0)  编辑

冒号课堂§3.2:超级范式
     摘要: 超级范式——提升语言的级别(元编程简谈
• 元编程作为超级范式的一个体现是,它能提升语言的级别
• 如果说OOP的关键在于构造对象的概念,那么LOP的关键在于构造语言的语法
• 离开IDE就无法编写、编译或调试的程序员,如同卸盔下马后便失去战斗力的武士,是残缺和孱弱的
• 既然有重复的代码,不能从语法上提炼,不妨退一步从文字上提炼
• 元程序将程序作为数据来对待,能自我发现、自我赋权和自我升级,有着其他程序所不具备的自觉性、自适应性和智能性,可以说是一种最高级的程序  阅读全文

posted @ 2008-11-10 23:40 郑晖 阅读(2316) | 评论 (0)  编辑

冒号课堂§3.1:泛型范式
     摘要: 泛型范式——抽象你的算法(泛型式编程简谈)
• 算法串联数据,如脊贯肉;数据实化算法,如肉附脊
• 泛型编程是算法导向的,即以算法为起点和中心点,逐渐将其所涉及的概念内涵模糊化、外延扩大化,将其所涉及的运算抽象化、一般化,从而扩展算法的适用范围
• 思想是鸡,结论是蛋  阅读全文

posted @ 2008-11-05 23:35 郑晖 阅读(2850) | 评论 (1)  编辑

冒号课堂§2.4:并发范式
     摘要: 并发范式——合作与竞争(并发式编程简谈
• 有谁愿意驾驶一辆启动后不能刹车、不能倒车、不能变速、油尽方停的汽车呢?
• 并发式编程以进程为导向、以任务为中心将系统模块化
• 并发式编程以资源共享与竞争为主线  阅读全文

posted @ 2008-11-04 00:33 郑晖 阅读(1236) | 评论 (2)  编辑

冒号课堂§2.3:对象范式
     摘要: 对象范式——民主制社会的编程法则(OOP简谈
• 如果把整个流程看作一颗倒长的大树,过程式编程自树根向下,逐渐分支,直到每片树叶,类似数学证明中的分析法,即执果索因的逆推法;OOP则从每片树叶开始,逐渐合并,直到树根,类似数学证明中的综合法,即执因索果的正推法
• 与其说OOP更具重用性,不如说更具易用性
• 函数是被动的实体,对象是主动的实体
• 过程式程序的世界是君主制的;OO程序的世界是民主制的  阅读全文

posted @ 2008-11-04 00:20 郑晖 阅读(1417) | 评论 (3)  编辑

冒号课堂§2.2:声明范式
     摘要: 声明范式——目标决定行动(声明式编程简谈
• 命令式编程是行动导向的,因而算法是显性而目标是隐性的;声明式编程是目标驱动的,因而目标是显性而算法是隐性的
• 声明式编程重目标、轻过程,专注问题的分析和表达而不致陷入算法的迷宫,其代码也更加简洁清晰、易于修改和维护
• 归根结底,编程是寻求一种机制,将指定的输入转化为指定的输出  阅读全文

posted @ 2008-11-03 23:27 郑晖 阅读(2591) | 评论 (0)  编辑

冒号课堂§2.1:命令范式
     摘要: 命令范式——一切行动听指挥(命令式编程简谈
• (命令式编程)其世界观是:程序是由若干行动指令组成的有序列表;其方法论是:用变量来储存数据,用语句来执行指令
• (结构化编程)在微观上,主张循规守矩;在宏观上,主张分而治之
• 一个按结构化编程思想设计的流程图,每个模块大小适中、模块之间关系简明、模块内部线路清晰,单从视觉上就会给人一种美感  阅读全文

posted @ 2008-11-03 23:16 郑晖 阅读(2898) | 评论 (2)  编辑

冒号课堂§1.0:开班导言
     摘要: 开班导言
1开班发言——程序员的四层境界
• 学会不如会学,会学不如会用,会用不如被用
• 知识之上是思想,思想之上是精神
2首轮提问——什么语言好?
• 没有激情作氧气,灵感的火花注定转瞬即灭
3语言选择——合适的就是好的
• 评判语言优劣,如同争论兵器高下,倘若撇开使用的主体和对象,皆为空泛之谈
• 西门吹雪的西来一剑,那是C语言;李寻欢的小李飞刀,那是汇编语言;陆小凤的灵犀一指,那是机器语言
4初识范式——程序王国中的世界观与方法论
• 当你编程之时,便进入到自己创造的世界之中。这是你的世界,只有注入你的想象力、创造力和激情,它才有勃勃生机。你编写的岂止是代码,分明还有乐曲;你敲击的岂止是键盘,分明还有琴键;你运行的岂止是程序,分明还有世界。当优美的旋律奏起,整个世界都随之翩然起舞,一种莫可名状的满足是否会充溢你的全身?
5软件技术——实用还是时髦?
• 知识的学习有几种方式:一种靠记忆,一种靠练习,一种靠培养
• 学习编程范式能增强编程语言的语感  阅读全文

posted @ 2008-10-14 09:37 郑晖 阅读(4741) | 评论 (18)  编辑

导航

统计

公告

博客搬家:http://blog.zhenghui.org
《冒号课堂》一书于2009年10月上市,详情请见
冒号课堂

留言簿(17)

随笔分类(61)

随笔档案(61)

文章分类(1)

文章档案(1)

最新随笔

积分与排名

最新评论

阅读排行榜

评论排行榜