`
netxdiy
  • 浏览: 682606 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

接受程序设计语言的再教育

 
阅读更多

<script type="text/javascript"><!-- google_ad_client = "pub-0241434510974184"; /* 博客文章广告728x90, */ google_ad_slot = "7316585398"; google_ad_width = 728; google_ad_height = 90; // --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

接受程序设计语言的再教育

本文发表于2005年8月《中华读书报》

再教育?没错。依个人愚见,大多数中国程序员都需要接受一次有关程序设计语言的再教育,而Michael L. Scott所著的《程序设计语言——实践之路》则可以成为这次再教育中的最好读本之一。

在现代汉语中,没有什么词比“急功近利”更能体现当代程序员对于程序设计语言的期望和要求了——我见过太多太多只学会了“Hello, World!”就打算独立编写企业级应用的速成者,我也见过太多太多刚掌握了一门面向对象语言的语法就宣称自己是OO专家的神仙级人物;在他们眼中,一本名为《某某语言入门》的教科书应足以取代《数据结构》、《编译原理》、《离散数学》等所有“高深”而“无用”的课程,而一名能熟练使用Hibernate或Spring的Java程序员就足以成为一家小型企业的J2EE首席架构师了。

更为有趣的是,这些急功近利的“语言万能论”者一方面会把某种最流行的语言或类库当作克敌制胜的惟一法宝,另一方面却又丝毫不理会那些经过数十年的积淀才成为现代程序设计语言精华的,贯穿于语法、语义和语用等三个层面的基本理念和基本特征;这种做法就像是把一部夏利引擎、麦凯伦外壳的赛车开上了F1赛道,难免会在残酷的现实面前落得个鼻青脸肿的结局。

很显然,如果你对自己在实际工作中总是无法提高编码效率、无法改进软件质量的事实困惑不已,如果你在试用了二十八种开源框架和六十九种eclipse插件后仍不清楚自己眼前的垃圾代码该如何“重构”,那么,你也许需要抽出一些时间,补习一下你曾经极度蔑视的、看起来没有任何“用处”的基础知识了。对于那些没时间重温大学课程的上班族来说,这种补习最好从《程序设计语言——实践之路》开始。即便不能把这本八九百页的“大部头”全部读完,你也至少能在阅读过程中明白三个看似浅显、实则微妙的“大道理”:

其一,语言必须与环境相结合,才能发挥出最大的功用。这里所说的“环境”通常包括编译环境、运行环境和应用环境三个方面。举例来说,如果你打算仿照着某些开源框架的做法,使用控制反转和依赖注入技术消除代码中某些让人生厌的依赖关系,你一定会认真研习实现类似技术的语法特征,但你未必会主动思考以下几个问题:在编译层面,使用了这些语法特征的代码是否会影响到最终生成的目标代码质量?在运行层面,该如何组织这些语法特征,才能让使用了相关技术的可执行程序在支持废料收集的并发环境下有不俗的表现?在应用层面,这些旨在消除依赖关系的技术会不会破坏新、旧模块间的平衡关系,以至于我们必须花上大量时间改写原有的代码或接口才能保证系统的平滑升级?全面思考这些与环境相关的问题并不一定会改变你的抉择,但它却可以帮助你找到效率、可靠性和可用性之间的最佳平衡点。在此方面,《程序设计语言——实践之路》一书所使用的,将程序设计语言与编译原理、面向对象等知识综合起来、融会贯通的做法不但可以节省我们分类学习的大量时间,还可以训练我们从整体出发、多角度思维的方式与方法,其价值不言而喻。

其二,程序设计语言本身所具有的多样性可以成为我们提高软件开发水平的最佳指南。说到这里,我又想起了那些充斥在各大技术网站的,题为“某某语言比某某语言更强大”或“某某语言已死,某某语言必胜”的帖子。发表这些帖子的帖主也许并不懂得,程序设计语言的世界本来就是一个多样化的、五彩缤纷的世界,每一种成功进入应用、教学或科研领域的程序设计语言都有它值得学习和借鉴的地方。如果仅仅根据个人的喜好或是响应时尚的号召,就盲目地吹捧某一种语言并贬低其他所有语言,这样的帖子和那些频繁出现在Fans网站上的“爱死某某某,恨死某某某”的帖子有什么本质的不同?更为重要的是,如果我们能够在《程序设计语言——实践之路》的指引下,真正懂得了函数式语言、数据流语言、逻辑式语言、冯•诺伊曼语言、面向对象语言等不同的语言类型在语法设计、编译器设计和运行环境设计方面的异同,我们就会惊讶地发现:Scheme语言的lambda表达式可以在C++语言中优雅、高效地解决诸如面向契约设计之类的复杂问题;Ada 95语言中提供的同步和保护机制可以为那些使用Java编写的多线程应用提供重要的参考;Smalltalk语言与编译和运行环境的紧密结合则可以为我们设计可扩展的JavaScript宿主提供最好的借鉴……从这个意义上说,学习一种语言的意义绝不在于为自己增添一种求职和谋生的手段——真正善于学习的人总能从每种语言的设计和实现中找到许多可用于提高编程水平的关键特征。

其三,使用特定语言编写出来的代码是否优雅、可靠,这主要取决于程序员对各种基本理念和基本原则的认知程度,而不取决于程序员记住了多少复杂的语法特征或学会了多少流行类库的用法。正如《程序设计语言——实践之路》所说的那样,“典型的C++程序员都极少使用联合、多重继承、变动个数的参数,或者 .* 运算符”,但是,如果你了解了隐藏在这些复杂语法特征背后的东西——如内存空间的分配和寻址方式,复本式继承和共享式继承之间的关系,参数传递和求值顺序,动态方法约束和成员查找,等等——你就可以在需要使用这些语法特征的时候满怀信心地告诉自己:“嘿,这不过是某某原则或某某技术在C++语言中的表现形式罢了,我能搞定它!”反之,如果你不晓得与数据结构和算法相关的代码在编译、运行时必然存在的各种均衡与折中问题,即便你把C#语言的标准文档背得滚瓜烂熟,即便你可以默写出System.Collections命名空间中的所有属性和方法,你也会在体验过自己开发的软件与成熟软件之间的差别后大发感慨:“同样是使用C#语言,为什么我写的程序总会从头到脚散发着‘业余’的气味儿呢?”

关于程序设计语言的本质,Michael L. Scott是这样说的:“就像自然语言限制着人们解释和论述的方式一样,程序设计语言也限定了什么可以表达,什么不能表达,并对程序员能够怎样思考问题有着深刻而微妙的影响。”既然如此,我们还犹豫什么呢?与其后悔在学校中虚度了光阴,还不如马上捧起《程序设计语言——实践之路》这本书,接受一次有关程序设计语言的再教育呢!

[王咏刚,2005年8月]

分享到:
评论

相关推荐

    初中程序设计课程的游戏化教学(以Python教学为例)

    如何有效的提高中小学程序设计类课程的教学效果成为了教育工作者面对的一个 难题。与此同时,游戏化理念在教学中的运用被越来越多的人所接受。将游戏化教 学与程序设计类课程有效的融合,可以有效的激发中小学学生对...

    依据VB计算机高级语言多媒体教学演示系统毕业设计(源代码+系统+开题报告)

    本文首先介绍了计算机辅助教学的发展及其存在缺陷,针对大学计算机高级语言授课特点,结合面向对象程序设计语言Visual Basic6.0在数据库应用方面的技术特点,来开发计算机高级语言多媒体教学演示系统。文章对系统...

    基于java超级玛丽游戏计算机毕业设计论文

    Java语言作为一种完全面向对象的程序设计语言,在游戏设计方面具有独特优势。 Java语言由 C++ 语言发展而来,但比 C++ 语言简单。它具有简单、与平台无关、高效、 安全、多线程等特点,在游戏设计开发方面得到广泛...

    论文研究 - 修复为时不晚:CLIL教学法在埃塞俄比亚新闻教育国际化方面的潜力

    最近,由于全球化和随之而来的知识共享,教育重点发生了范式... 此外,本文还讨论了如何将CLIL上下文化,用于课程设计,材料开发和新闻教育的课堂程序。 文章得出的结论是,如果将CLIL方法用作新闻学的教学方法,则更有

    AI人工智能教育应用领域--个性化学习30例.docx

    该公司通过深度学习的技术和自然语言理解的技术,向用户提供智能的,个性化的语言教育服务. CoCoMio所创建的平台通过丰富的媒体资源,带有反馈功能的书写创意输出,以及重复性的闪卡与智能引擎结合,为学习者提供优秀的...

    依据vb公交车查询系统设计(毕业设计源代码+可执行程序+论文+开题报告+外文翻译+答辩ppt)

    现在不同了,即使你没有接受过严格的程序设计训练,使用Visual Basic也一样能够开发出功能强大、适合自己特殊需求的应用程序了。Visual Basic继承了Basic语言易学易用的特点,特别适合于初学者学习Windows系统编程。...

    基于Delphi的办公管理系统设计毕业论文

    没有接受过严格的程序设计训练,使用 Delphi 编程语言也一样能 够开发出功能强大、适合自己特殊需求的应用程序了。Delphi 编程 语言继承了其他语言易学易用的特点,特别适合于初学者学习 Windows系统编程。

    ssm项目流浪动物救助小程序.zip

    SSM项目流浪动物救助小程序.zip是一个使用Java语言开发的Web应用,它采用了SSM(Spring Spring MVC MyBatis)框架,并结合了微信小程序前端技术。该项目利用MySQL作为后端数据库,旨在为流浪动物救助组织和个人提供...

    ssm项目大学生党务学习平台小程序.zip

    该系统旨在为大学生党员提供一个在线学习和交流的平台,使得用户能够在微信环境中方便地接受党务教育、参与党内活动和进行自我提升。 项目的主要功能可能包括: 1. **学习资料**:提供党的政策法规、理论知识等...

    STL源码剖析

    标准模板库设计人Stepanov早期从事教育工作,1970年代研究泛型程序设计,那时他与其同事一起在GE公司开发出一个新的程序语言——Tecton。 1983年,Stepanov先生转至Polytechnic大学教书,继续研究泛型程序设计,同时...

    高等学校教材管理系统的设计与实现_

     C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;...

    毕业设计依据vb超市进销存管理系统设计(源代码+可执行文件+论文+开题报稿+外文翻译+答辩ppt)

    现在不同了,即使你没有接受过严格的程序设计训练,使用Visual Basic也一样能够开发出功能强大、适合自己特殊需求的应用程序了。Visual Basic继承了Basic语言易学易用的特点,特别适合于初学者学习Windows系统编程。...

    多功能电子日历VB(论文 +代码)

    现在不同了,即使你没有接受过严格的程序设计训练,使用Visual Basic也一样能够开发出功能强大、适合自己特殊需求的应用程序了。Visual Basic继承了Basic语言易学易用的特点,特别适合于初学者学习Windows系统编程。...

    软件工程-理论与实践(许家珆)习题答案

     软件特征:只有程序、程序设计概念,不重视程序设计方法。  ② 程序系统阶段。  硬件特征:速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长 。  软件特征:程序员数量猛增,开发人员素质低。  ...

    评估双语残疾学生

    评估双语残障学生 评估双语残障学生 BARBARA A. AIOWDER Slafe ...此外,许多双语儿童被错误地归类为残障人士,这一错误导致法庭案件指控教育评估程序存在歧视(例如,戴安娜诉加利福尼亚州教育委员

    springboot基于SpringBoot的冬奥会科普平台.zip

    8. 多语言支持:考虑到国际性观众的需求,平台支持多种语言选项,提高信息的可接受度。 基于SpringBoot的冬奥会科普平台不仅作为知识传播的工具,也成为了连接全球冬季运动爱好者的桥梁。它旨在教育和启发更多的人...

    千博学校网站管理系统 v2015 Build0108.rar

    千博学校网站系统主要面向教育机构、学校的教育信息化需求而设计研发,可高效构建大\中\小学学校信息门户网站、教学内部知识网站、教育信息门户等多种教育**台,可有效提升信息系统**台的延续性和扩展性,加强网站的...

    McGraw C++程序调试实用手册

    l.6 好的程序设计的五点要素 1.7 规则意味着可以打破 1.7.1 安塞尔亚当斯(Ansel Adams)或毕加索(Picasso) 1.7.2 注释块 1.7.3 标识符:identifiers、IDENTIFIERS和Identifiers 1.7.4 间隔与缩进 1.8 ...

    VB课程设计俄罗斯方块

    1.3程序设计思想 游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳,所以我们在游戏中添加了漂亮的场景和动听的音乐,设置了过关升级的功能,激发大家的娱乐激情。 从游戏的基本玩法...

    民族预科班计算机基础课程教学设计-.docx

    教学实践 1概述 预科班为少数民族青年接受高等教育提供了良好的机会,是少数民族青年成才的"绿色通道";。民族预科教育为普通高等学校输送了一大批合格的大学新生,成为培养少数民族人才的"金色桥梁";。[1]《计算机...

Global site tag (gtag.js) - Google Analytics