05 2008 档案
摘要:
动态语言简谈
叹号急不可耐地问:“现在可以谈动态语言了吧?”
冒号感言:“曾几何时,动态语言还只是陪太子读书的角色,那时候它们的名字是‘脚本语言’。近来却迅速崛起,俨然有与静态语言分庭抗礼之势。”。。。
程序是为终端用户服务的,而脚本是为程序员服务的。。。
动态语言秉承的一个理念是:优化人的时间而不是机器的时间,因此为提高人的生产率而不惜牺牲部分程序的性能。。。
两类语言的风格的确大相异趣:待静态语言披盔戴甲、备马抬枪之际,动态语言已衣袂飘飘,长剑出手了。。。
当脚本语言穿上动态语言的彩衣,昔日不起眼的毛毛虫便羽化成碟,开始飘舞在众人追逐的目光之中。但静态语言也绝不会淡出人们的视线,它如矫健的苍鹰,依然有搏击长空的雄力。程序员只要保持严谨的作风和开放的心态,既有稳如泰山的马步,又有一跃凌空的飞腿,静如处子,动如脱兔,如履平地般游走于高高的梅花桩上,绝无跌落之虞。。。
阅读全文
摘要:
关于数据类型
待教室平静下来,冒号再度开腔:“在谈论动态语言之前,最好先澄清一下它与动态类型语言之间的区别。”。。。
数据类型既有针对机器的物理意义,又有针对人的逻辑意义。。。
静态类型检查类似‘疑罪从有’的有罪推定制——在被证明合法之前是非法的,动态类型检查类似‘疑罪从无’的无罪推定制——在被证明非法之前是合法的。。。
阅读全文
摘要:
讨论下一步教学计划
一阵商讨之后,众人似乎未能达成共识。冒号见状,便让他们一一道来。。。
网页的迷人之处就在于,能够用精美的画皮来包裹冗长低效的代码。。。
无论干哪一行,要胜任愉快,离不开四样东西:才能 、兴趣 、方法和努力。没有才能则难以胜任;没有兴趣则难以愉快;没有方法则事倍功半;没有努力则一事无成。。。
阅读全文
摘要: 评论网友Plusy对《关于信息系统组织方式的一个提案》的评论
阅读全文
摘要: 昨日整理Gmail信箱之时,觉有不便之处,于是进入“Suggest a feature for Gmail”的页面,准备提些建议。不意一只灵感的小虫悄悄爬上脑梢,急欲捕之而后快。遂作“A Proposal on Organization of Information System”一文,以备Gmail参考之用。甘冒不谦之嫌,窃以为该提案是对包括文件系统、邮件系统等在内的信息系统的组织方式的一种创新。。。
阅读全文
摘要:
关于信息系统组织方式的一个改进方案
Information itself is great, but storing and retrieving information sucks.
From a user’s view, most information systems are essentially organized in hierarchical structure. The major flaw of this kind of structure is that it only provides a single path to the target information. Aiming at this, this article proposes a practical solution by borrowing some ideas from Gmail system.
阅读全文
摘要: 在这样一个非常时期,任何激情均无以挣脱悲情,创作的灵感也随之芳踪难觅。与此同时,《冒号和他的学生们》系列也到了下一个驿站。。。
如果说这个系列是一粒种子,BlogJava便是肥沃的土壤,关注的目光便是和煦的阳光,真诚的留言便是滋润的雨露。。。
阅读全文
摘要:
编程范式总结
众人落座之后,冒号开始了第四课的讲授:“我们已经涉及了不少编程范式,虽只是走马观花,亦可管窥一斑。现用表格归纳如下——”。。。
编程水平的提升之道是:在实战中演练招法,在招法中领会心法,心法反过来提升招法,进而提高实战水平,如此循环往复呈螺旋式上升过程。正所谓熟能生巧,巧能生通。。。
软件工程中有个迭代开发法,本班则采用迭代学习法:即在具体知识与抽象理论之间进行折返式学习。当然这种迭代不是机械式的重复,而是增量式的循环。。。
阅读全文
摘要:
餐馆里的编程范式
叹号摘下眼镜,揉了揉眼:“范式再好,多了也难免有些审美疲劳。”
逗号也搓着太阳穴:“现在脑子被灌得沉甸甸的。”
“彼此彼此!你们的脑袋闹涝灾,我的喉咙闹旱灾。”冒号说着,拿起矿泉水瓶一饮而尽。
大伙听着怪别扭的,这不是拐着弯说我们脑子进水了吗?
冒号清了清嗓子:“为尊重民意,也为避免消化不良,大家先放松一下。下面我们来个情景编程。”。。。
阅读全文
摘要:
AOP简谈
引号重开话题:“OOP方兴未艾,AOP又开始崭露头角。AOP算是OOP的一种分支、一种补充还是一种超越?”。。。
“准确地说,抽象是前提,分解是方式,模块化是结果。”冒号很讲究精确,“大家记得庖丁解牛的故事吧?在常人眼中复杂的牛体,庖丁经过抽象,已目无全牛,及至提刀分解,自是游刃有余。待牛如土委地,模块化既成。”。。。
问号提问:“抽象与分解的原则是什么?”
冒号作了个V字:“两条:单一化,正交化。每个模块职责明确专一,模块之间相互独立,即高聚合低耦合。。。
何谓横切关注点?顾名思义,乃是与程序的纵向主流执行方向横向正交的关注焦点。。。
对程序员来说,英语也是一门计算机语言。。。
阅读全文
摘要:
元编程简谈
引号忽然想起一事,问道:“有一本名为《C++模版元编程》的书,既然提到了模板,想来也属于泛型编程吧?”。。。
“元程序将程序作为数据来对待,能自我发现和自我赋权,有着其他程序所不具备的自觉性、自适应性和智能性,可以说是一种最高级的程序。它要求编程者超越常规的编程思维,在一种崭新的高度上理解编程。想象一下,”冒号激情勃发,“如果有一天机器人能自我学习、自我完善,甚至能生产机器人,实现‘智能繁衍’,是不是很美妙?”。。。
阅读全文
摘要:
泛型式编程简谈
冒号重新开讲:“你们会不会经常遇到这种情景:一遍又一遍地写着相似的代码,有心将其归并,却因种种原因无法践行。”
逗号心有戚戚焉道:“是啊,有时明明两个函数的实现几乎一模一样的,就因为某些参数不匹配,无法合而为一。”
“有一种编程范式可以解决这个问题,它打破了不同数据结构之间的壁垒,让你的代码不再臃肿,这——就是泛型编程。”冒号的语调和说辞不免令人联想到电视上的减肥广告。。。
算法串联数据,如脊贯肉;数据实化算法,如肉附脊。。。
泛型编程是算法导向(Algorithm-Oriented)的,即以算法为起点和中心点,逐渐将其所涉及的数据结构内涵模糊化、外延扩大化,从而扩展算法的适用范围。。。
在数学家眼里,思想是鸡,结论是蛋。。。
阅读全文
摘要:
并发式编程简谈
逗号好奇地问:“还有其他类型的编程范式吗?”
“不但有,而且有很多。”冒号喝了一口水,悠悠地说,“并发式编程就是其中之一。”。。。
并发式编程以进程为导向(Process-Oriented),以资源共享与竞争为主线——与当今世界形势何其相似乃尔!这意味着程序设计将围绕进程的划分与调度、进程之间的通讯与同步等等来展开。。。
如果将程序系统视作公司,那么并发式系统是产品型公司,每个进程是一名工人,其职责是执行单一任务;对象式系统是服务型公司,每个对象是一名服务员,其职责是提供系列服务。。。
阅读全文
摘要:
OOP简谈
短憩之后,引号迫不及待地问:“面向对象的范式应该是一种特殊的命令式吧?”。。。
与其说OOP更具重用性,不如说更具易用性。。。
如果把整个流程看作一颗倒长的大树,过程式编程自树根向下,逐渐分支,直到每片树叶,类似数学证明中的分析法,即执果索因的逆推法;OOP则从每片树叶开始,逐渐合并,直到树根,类似数学证明中的综合法,即执因索果的正推法。。。
函数是被动的实体,对象是主动的实体。过程式程序的世界是君主制的,主函数是国王,其他函数是臣民,等级分明,所有臣民在听命于上级的同时也对下级发号施令,最终为国王服务;OO程序的世界是民主制的,所有对象都是独立而平等的公民,有权力保护自己的财产和隐私并向他人寻求服务,同时有义务为他人提供承诺的服务,公民之间通过信息交流来协作完成各种任务。。。
阅读全文
摘要:
命令式编程与声明式编程简介
第二课伊始,冒号开门见山:“首先介绍的是最基本的两种编程范式:命令式和声明式,其中命令式又称过程式。。。”
命令式编程是行动导向(Action-Oriented)的,因而算法是显性而目标是隐性的;声明式编程是目标驱动(Goal-Driven)的,因而目标是显性而算法是隐性的。。。
归根结底,编程是寻求一种机制,将指定的输入转化为指定的输出。三种范式对此提供了迥然不同的解决方案:命令式把程序看作一个自动机,输入是初始状态,输出是最终状态,编程就是设计一系列指令,通过自动机执行以完成状态转变;函数式把程序看作一个数学函数,输入是自变量,输出是因变量,编程就是设计一系列函数,通过表达式变换以完成计算;逻辑式把程序看作一个逻辑证明,输入是题设,输出是结论,编程就是设计一系列命题,通过逻辑推理以完成证明。。。
阅读全文
摘要:
关于框架、设计模式、架构和编程范式的讨论
“现在我们具体介绍一下编程范式。”冒号忽然顿住,隐觉一抹失望从众人脸上掠过,问号更是欲言又止,便鼓励他开口。
问号略显迟疑:“您说编程范式是一种心法,那框架、设计模式还有架构呢?”。。。
“自以为懂的未必真的懂,自以为不懂的未必真的不懂。” 冒号玩起了玄学,“有些概念和技术即使背得烂熟,甚至用得烂熟,那也不代表真正掌握;有些概念和技术看起来很新奇,却不过是新瓶装旧酒。”。。。
框架与工具包最大的差别在截然相反的设计理念上:库和工具包是为程序员带来自由的,框架是为程序员带来约束的。。。
设计模式是软件的战术思想,架构是软件的战略决策。。。
知识的学习有几种方式:一种靠记忆,一种靠练习,一种靠培养。。。
句号悟道:“您是想告诉我们,编程范式就是编程语言的语感?”。。。
阅读全文
摘要:
关于编程心法
问号第一个从小说里走出来,问道:“刚才谈到了低级语言和中级语言,现在该谈高级语言了吧?”。。。
掌握一门语言的语法、工具和技巧固然重要,但那只相当于学会一门兵器的招法,更重要的当然是心法。招法重形,心法重意。得形而忘意,无异舍本逐末;得意而忘形,方能游刃有余。下面要谈的就是一种心法:编程范式。。。
当你编程之时,便进入到自己创造的世界之中。这是你的世界,只有注入你的想象力、创造力和激情,它才有勃勃生机。你编写的岂止是代码,分明还有乐曲;你敲击的岂止是键盘,分明还有琴键;你运行的岂止是程序,分明还有世界。当优美的旋律奏起,整个世界都随之翩然起舞,一种莫可名状的满足是否会充溢你的全身?。。。
句号一语惊人:“找对象是‘对象导向’的,去约会是‘面向对象’的。”。。。
阅读全文
摘要:
简要回顾计算机语言
问号觉得自己的问题并未解决,追问:“这么多种语言,仅凭流行度就能分出主次优劣吗?”
“流行度当然不是唯一的指标。”冒号答道,“语言的主次优劣因人而异,答案在你们自己身上。还是刚才那句话,唯一的老师是你自己。”
期待的目光如风中之烛般开始黯淡。。。
好的语言就是适合编程者和解决对象的语言。。。
句号灵光一闪:“我明白了——西门吹雪的西来一剑,那是C语言;李寻欢的小李飞刀,那是汇编语言;陆小凤的灵犀一指,那是机器语言。”。。。
阅读全文
摘要:
关于流行计算机语言的讨论
众人面面相觑,一阵沉默后开始窃窃私语,显然有些不太习惯这种教学方式——笔记本上还没写两个字呢,老师就把球给踢回来了。
冒号也不说话,只是微笑地望着大家。
还是问号打破僵局,开始发问:“老师——”。。。
没有激情作氧气,灵感的火花注定转瞬即灭。。。
阅读全文
摘要:
程序员提高班之开班发言
冒号开了个程序员提高班,今天迎来了首期学员,他们是问号、句号、逗号、引号和叹号,皆为IT业的新兵。望着台下洋溢着青春与渴望的脸庞,冒号开始了他的开班发言——
大家好!先自我介绍一下,本人姓冒名号字解之。。。
本班的宗旨是:学会不如会学,会学不如会用,会用不如被用。。。
如果知识是水,我们要挖掘最先涌动的那颗泉眼;如果知识是火,我们要捕捉起初点燃的那颗火花。。。
阅读全文