冒号课堂§2.4:并发范式

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

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

冒号课堂§2.3:对象范式

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

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

冒号课堂§2.2:声明范式

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

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

冒号课堂§2.1:命令范式

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

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

冒号课堂§1.0:开班导言

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

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

冒号和他的学生们(连载27)——接口服务

     摘要: 软件接口服务的主客双方应遵循的准则
叹号幡然反省:“以前我们做OOP编程时,总是专注于如何利用其他类来解决问题,而较少考虑自己设计的类对其他类的影响。”。。。

作为服务的提供者,最重要的是讲诚信。首先,服务要有可靠性,不能阳奉阴违——即接口必须履行它的承诺;其次,服务要有稳定性,不能朝令夕改——即接口一经公开,不得随意变更。。。

此外,高质量的服务还要有纯粹性和完备性。Unix有一个哲学:‘一个程序只做一件事,但要做好’。用在OOP上,则是:‘一个类只提供一套服务,但要完善’。。。

关键不在于服务数量的多寡,而在于服务的一致性和关联性。。。

作为服务的享受者,最重要的是讲规矩。。。

以违背服务初衷的方式享受的服务,如同盛夏的豆腐——即使没有变质,也是不能持久的。。。  阅读全文

posted @ 2008-08-07 19:31 郑晖 阅读(2186) | 评论 (2)编辑 收藏

冒号和他的学生们(连载26)——访问控制

     摘要: OOP中的访问控制
问号提问:“信息隐藏是否专指用private来控制访问?”。。。

初级程序员的理想是为所欲为——能用编程解决一切问题;中级程序员的理想是尽善而为——追求最佳解决方案;高级程序员的理想是有所为有所不为——重在整体设计的选择,能抵制局部技巧的诱惑;最高理想是无为而无不为——无论宏观设计还是微观实现,均非刻意选择,却自然合度。。。

从软件应变的角度来看,访问控制是对修改所带来的副作用的控制。。。

客户意识对一个程序员的重要性,丝毫不亚于对一个企业的重要性。。。

千万不要为追求廉价的重用而轻易扩大接口范围,莫以自身之便而致客户之不便,莫以一时之便而致长期之不便。。。  阅读全文

posted @ 2008-08-03 18:39 郑晖 阅读(1929) | 评论 (1)编辑 收藏

冒号和他的学生们(连载25)——软件应变

     摘要: 适应变化的能力是衡量软件质量的重要标准
第七课刚一开堂,冒号就提了一个问题:“如果把一个Java程序中所有的private关键字换成public,请问该程序还能工作吗?”。。。

软件的难点有二:其一是逻辑的复杂,其二是需求的变化。许多程序员看重前者而看轻后者,大部分时间花在寻求解决方案上,而不是在选择解决方案上。。。

软件之软,体现在适应变化的能力。。。

软件的变化大致分两种:一种是出于内在需求而作的结构性变化,通常以改善软件质量为目的,即所谓的重构(refactoring);一种是出于外在需求而作的功能性变化,通常以满足客户需要为目的。。。

信息隐藏虽能将抽象接口与具体实现分离,但仍然封装在同一类中。桥梁模式则让二者彻底解耦(decouple),增强了对变化的适应力,具有更大的灵活性和可扩展性。。。  阅读全文

posted @ 2008-07-29 00:20 郑晖 阅读(1944) | 评论 (3)编辑 收藏

冒号和他的学生们(连载24)——对象封装

     摘要: OOP中的封装与信息隐藏
“用广东话说,真是有型有料又有性格啊!”叹号啧啧连声,“这哪里是在设计软件,分明是在设计心仪的对象嘛。”。。。

广义的封装仅仅只是一种打包,即package或bundle,是密封的但可以是透明的。。。
狭义的封装是在打包的基础上加上访问控制(access control),以实现信息隐藏。。。

抽象意味着用户可以从高层的接口来看待或使用一类对象,而不用关心它底层的实现,而黑盒封装意味着用户无权访问底层的实现。。。

访问控制不仅是一种语法限制,也是一种语义规范。。。

“通,则大处圆融合一而小处各具其妙;不通,则大处千变万化而小处无所分别。”冒号又打起了禅语 ,“领会OOP的精髓绝非一年半载之功,但若以抽象与封装为钥,必可早日开启通达之门。。。”  阅读全文

posted @ 2008-07-20 16:27 郑晖 阅读(2831) | 评论 (3)编辑 收藏

冒号和他的学生们(连载23)——数据抽象

     摘要: 介绍抽象数据类型
问号抢着说:“我知道了:过程抽象的结果是函数,数据抽象的结果应该是数据类型。”。。。

数据结构强调具体实现,侧重应用;抽象数据类型强调抽象接口,侧重设计。。。

接口是纲,实现是目。纲若不举,目无以张。。。

人们多采取‘整体设计以数据为中心,局部实现以算法为中心’的方针,以增强系统的可维护性。。。

数据类型的接口与实现的分离,有利于开发时间的分离以及开发人员的分离。。。

抽象——接口与实现相分离;数据——以数据为中心组织逻辑;类型——单纯而定义良好的概念。。。

抽象——尤其是数据抽象——才是OOP的核心和起源,尽管它们并非OOP的专利。。。

只有贯彻ADT思想,设计出来的类才会是‘万人迷’:有优雅的外形——抽象,有丰富的内涵——数据,有鲜明的个性——类型。。。  阅读全文

posted @ 2008-07-16 12:32 郑晖 阅读(2231) | 评论 (6)编辑 收藏

冒号和他的学生们(连载22)——抽象思维

     摘要: 软件设计中的抽象思维
冒号健步走进教室,学员们立刻正襟危坐,进入战备状态。。。

语言是形,范式是神,这次我们将二者融合,争取做到形神兼备。。。

我们的重心不在知识的枝节,而在知识的本源。因此无论讨论Java还是OOP,我们不追求系统和全面,但力求从不同的选点、角度和深度来展示知识的活性。。。

那么什么是抽象呢?不妨概括为:去粗取精以化繁为简;由表及里以异中求同。再精炼些,抽象就是作减法和除法。。。

软件设计者的任务是将复杂混沌的现实世界映射到精确严格的虚拟世界,要完成这种多对一的映射,抽象无疑是必由之路。。。

这种通过规范使代码的功能与实现相分离的方法称为规范抽象。。。  阅读全文

posted @ 2008-07-11 05:03 郑晖 阅读(2350) | 评论 (3)编辑 收藏

冒号和他的学生们(连载21)——后台脚本

     摘要: 讨论Perl、PHP、Python和Ruby 语言
“剩下四种动态语言,我们将之归为后台脚本语言。”冒号说着画了张图表。。。

Perl凝练晦涩,Python优雅明晰,Ruby精巧灵动,PHP简明单纯。。。

叹号——没有最好的语言,只有最合适的语言。
逗号——没有糟糕的语言,只有糟糕的程序员。
问号——没有一种语言是万能的,只会一种语言是万万不能的。
引号——废除对语言的宗教信仰,建立对语言的哲学思维。
句号——编程就是在人脑和电脑之间寻找最佳平衡点的过程。。。  阅读全文

posted @ 2008-06-24 03:14 郑晖 阅读(2869) | 评论 (6)编辑 收藏

冒号和他的学生们(连载20)——前台语言

     摘要: 讨论VB、Delphi和JavaScript
稍事休息后,冒号切换了话题:“接下来简单聊聊Visual Basic和Delphi。”。。。

在以网络为中心的企业解决方案中,作为平台语言的Java和C#是两棵比肩而立的大树,在它们周围生长着郁郁葱葱的动态语言的小草。。。

待友之道,贵在放大其优点而缩小其缺点,对待语言亦当如此。其实JavaScript的强大和优雅是超乎想象的,它如一只神奇的魔袋,乍看平淡无奇,却总能变出意想不到的宝贝。。。

前台编程涉及面专,绚丽花哨的界面更容易让初涉编程者产生成就感;后台编程涉及面广,需要深厚的技术积累和缜密的设计思维;底层编程涉及面深,给人神秘莫测之感。然大道相通,难者亦易,易者亦难。。。  阅读全文

posted @ 2008-06-16 23:52 郑晖 阅读(2279) | 评论 (6)编辑 收藏

冒号和他的学生们(连载19)——平台语言

     摘要: 讨论Java和C#
逗号提出:“现在应该到了Java时间吧。”
冒号顺水推舟:“下面谈论的重心从刚才的系统语言转到平台语言——Java和C#。”。。。

这既是程序员之幸——语言之间可以互相取长补短,共同进步;也是程序员之不幸——往往不得不在众多语言中作艰难选择,或者多花精力学更多的语言。。。

以前人们试图在语言的威力(power)和生产率(productivity)中寻求最佳平衡点,现在似乎更想鱼与熊掌兼得。。。

Java的目的是让一种语言在多种平台上运行,而C# 的目的是让多种语言在一种平台上运行。
两个平台语言,一个重在语言,让语言向平台扩散;一个重在平台,让平台来凝聚语言。。。

编程语言绝非象牙塔中之物,实乃技术和商业合力推动的结果。。。

C++提供了一马平川的大路,也提供了陷阱密布的小道;Java则在大路上铺设水泥,同时封锁了捷径小道;C#同样填平了大路上的坑坑洼洼,但把一些小道上‘此路不通’的牌子偷偷改成了‘此路危险’。  阅读全文

posted @ 2008-06-11 19:27 郑晖 阅读(2727) | 评论 (4)编辑 收藏

冒号和他的学生们(连载18)——系统语言

     摘要: 讨论C语言 , C++ 和D语言
问号忙问:“您打算比较哪些主流语言呢?”。。。

关于C语言,前面多次提到。这是一把历久弥新的宝剑,一旦出鞘,依旧寒光逼人,锋利无俦。有了它,便如战将有了佩剑,平添一分独闯敌营的胆气。。。

能力越大,责任越大,风险越大。此话既适用于编程语言,也适用于程序员。。。

指责C++不是100%OOP的说法更是荒谬之极。OOP又不是金子,含量越高越好。试图把一切都装进OOP的箱子里的想法无异于削足适履。。。

C与C++同为系统语言,决定了它们的理念是:优化机器的时间而不是人的时间,优化机器的记忆而不是人的记忆;假设编译器是愚蠢的而程序员是聪明的,因此赋予程序员更多的权利、义务与责任。。。

C++是匹无辔无鞍的野马,看似桀骜不驯,若能顺性而御,必能足踏飞燕,行千里而不劳。。。  阅读全文

posted @ 2008-06-05 13:05 郑晖 阅读(3137) | 评论 (27)编辑 收藏

冒号和他的学生们(连载17)——语言讨论

     摘要: 关于编程语言的讨论
教室里,学员们正热火朝天地讨论着流行的编程语言。。。

通禅悟道者拈花不语,坐井观天者蛙鸣鼓噪。。。

如果说编程范式是一种文化,那么编程语言更像是一种宗教——尽管它本不该是。。。

对待一门语言的态度应该是:与其抱怨争执,不如扬长避短。。。

对一种语言最大的批判是发明一种与此语言有类似功用的新语言;从另一个角度看,发明一种语言也是对先前语言的一种最高的赞美。。。

过分拔高一种语言与抹煞语言之间的差别是两种极端,皆为秕言谬说。。。

语言为本,余者为末。许多人偏偏本末倒置,常常为在IDE、框架、设计工具等中挖掘到某一新功能而欣喜不已,或者津津乐道于各种语言的优劣高下,却对正在使用的语言中大量的宝藏视而不见。这些人若有幸拜关公为师,他们最艳羡的一定他的赤兔马和青龙偃月刀,或许还会抹红脸蓄长须什么的,就是不太愿学他的盖世武功。。。  阅读全文

posted @ 2008-06-01 13:09 郑晖 阅读(2436) | 评论 (5)编辑 收藏

冒号和他的学生们(连载16)——动态语言

     摘要: 动态语言简谈
叹号急不可耐地问:“现在可以谈动态语言了吧?”
冒号感言:“曾几何时,动态语言还只是陪太子读书的角色,那时候它们的名字是‘脚本语言’。近来却迅速崛起,俨然有与静态语言分庭抗礼之势。”。。。

程序是为终端用户服务的,而脚本是为程序员服务的。。。

动态语言秉承的一个理念是:优化人的时间而不是机器的时间,因此为提高人的生产率而不惜牺牲部分程序的性能。。。

两类语言的风格的确大相异趣:待静态语言披盔戴甲、备马抬枪之际,动态语言已衣袂飘飘,长剑出手了。。。

当脚本语言穿上动态语言的彩衣,昔日不起眼的毛毛虫便羽化成碟,开始飘舞在众人追逐的目光之中。但静态语言也绝不会淡出人们的视线,它如矫健的苍鹰,依然有搏击长空的雄力。程序员只要保持严谨的作风和开放的心态,既有稳如泰山的马步,又有一跃凌空的飞腿,静如处子,动如脱兔,如履平地般游走于高高的梅花桩上,绝无跌落之虞。。。  阅读全文

posted @ 2008-05-28 14:40 郑晖 阅读(2407) | 评论 (1)编辑 收藏

冒号和他的学生们(连载15)——数据类型

     摘要: 关于数据类型
待教室平静下来,冒号再度开腔:“在谈论动态语言之前,最好先澄清一下它与动态类型语言之间的区别。”。。。

数据类型既有针对机器的物理意义,又有针对人的逻辑意义。。。

静态类型检查类似‘疑罪从有’的有罪推定制——在被证明合法之前是非法的,动态类型检查类似‘疑罪从无’的无罪推定制——在被证明非法之前是合法的。。。  阅读全文

posted @ 2008-05-25 19:27 郑晖 阅读(2478) | 评论 (3)编辑 收藏

冒号和他的学生们(连载14)——教学计划

     摘要: 讨论下一步教学计划
一阵商讨之后,众人似乎未能达成共识。冒号见状,便让他们一一道来。。。

网页的迷人之处就在于,能够用精美的画皮来包裹冗长低效的代码。。。

无论干哪一行,要胜任愉快,离不开四样东西:才能 、兴趣 、方法和努力。没有才能则难以胜任;没有兴趣则难以愉快;没有方法则事倍功半;没有努力则一事无成。。。  阅读全文

posted @ 2008-05-23 13:35 郑晖 阅读(2347) | 评论 (5)编辑 收藏

《关于信息系统组织方式的一个提案》的评论与反评

     摘要: 评论网友Plusy对《关于信息系统组织方式的一个提案》的评论  阅读全文

posted @ 2008-05-20 12:23 郑晖 阅读(2404) | 评论 (5)编辑 收藏

仅列出标题
共3页: 上一页 1 2 3 下一页 

导航

统计

公告

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

留言簿(17)

随笔分类(61)

随笔档案(61)

文章分类(1)

文章档案(1)

最新随笔

积分与排名

最新评论

阅读排行榜

评论排行榜