冒号课堂§5.1:教学计划

冒号课堂

第五课 语言小谈(1) 

 

课前导读

本课承上启下,为今后的学习作一些铺垫。在确定教学计划后,对数据类型和动态语言作了简单的介绍,并对有关编程语言的一些观点作出评论。

本课共分四节——

  1. 教学计划——接下来的故事
  2. 数据类型——规则与变通
  3. 动态语言——穿着彩衣飞舞的脚本语言
  4. 语言误区——语言的宗教情结

 

 

5.1教学计划——接下来的故事

褚小者不可以怀大,绠短者不可以汲深                            ——《庄子·至乐》

 

关键词: 编程范式,迭代学习法,程序员

摘要:   讨论下一步教学计划

  

预览 

·           编程水平的提升之道是:在实战中演练招法,在招法中领会心法,心法反过来提升招法,进而提高实战水平,如此循环往复呈螺旋式上升过程。正所谓熟能生巧,巧能生通

·           迭代学习法:即在具体知识与抽象理论之间进行折返式学习

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

·           无论干哪一行,要想胜任愉快,离不开四样东西:才能、兴趣、方法和努力

 

提问  

·           什么是迭代学习法?

·           一个合格的程序员需要学习和掌握不同领域的许多知识,如何能胜任愉快?

 

讲解

新课开始了,冒号一反常态,并没有直奔主题:“在谈论新话题之前,先请诸位畅所欲言,谈谈这段时间的学习感受。”

叹号表情有点复杂:“通过前面的学习,让我长了不少见识,只是——”

“但讲无妨。” 见叹号有些吞吞吐吐,冒号鼓励道。

“只是觉得有点——纸上谈兵。”叹号鼓足勇气说出心里话。

引号不以为然:“我倒觉得应该更深入地去了解编程范式,现在有了一些感性认识,但还非常肤浅,希望以后能进一步展开。”

逗号挺实在:“有些地方似懂非懂,听起来挺费劲的,直到情景编程才觉得轻松了些。以后可不可以多谈些具体的编程知识、编程技巧和编程经验?”

句号拍了拍他的肩膀:“你想学的是招法,老冒传的是心法。”

逗号不服:“没有招法再多心法也白搭——光说不练假把式。”

句号反驳:“只关注招法,境界永远得不到提升——光练不说傻把式。”

“二位请暂停争论。”冒号把头转向问号,“你怎么看?”

问号很干脆:“管它心法还是招法,能解决问题的就是好法。”

“你倒滑头,整个一白猫黑猫论嘛!” 冒号哈哈一笑,“首先,编程范式绝非中看不中用的屠龙之术,它有助于我们更快速地掌握、更深刻地理解、更纯熟地运用编程语言,故有心法之谓。其次,心法只有通过招法才能落到实处,也只有通过招法才能融会贯通。”

“那传说中的‘无招胜有招’呢?”引号问。

冒号哂道:“武侠小说看多了,容易想入非非,那种境界岂是一般人所能达到的?对绝大多数人来说,无招就意味着自己没招而将中他人之招。”

众人窃笑。

“还有一样是至关重要的。”冒号提醒道,“那就是实战。”

句号深有体会:“以前在学校里编程似乎还得心应手,到了公司就时感力有不逮。”

“花拳绣腿对付小喽啰绰绰有余,真碰到高手自然漏洞百出了。”冒号直言道,“编程水平的提升之道是:在实战中演练招法,在招法中领会心法,心法反过来提升招法,进而提高实战水平,如此循环往复呈螺旋式上升过程。正所谓熟能生巧,巧能生通。”

问号询道:“下面我们的主题是什么?”

冒号亮出他的一套学习理论:“软件工程中有个迭代开发法,本班则采用迭代学习法:即在具体知识与抽象理论之间进行折返式学习。当然这种迭代不是机械式的重复,而是增量式的循环。假定你们以前更关注具体的编程语言,那么遵循这种方式,先介绍抽象的编程范式是合适的。在初步了解范式之后,不妨重新回到编程语言上来。”

叹号唯唯连声:“是啊,在空中飘久了,会染上恐高症的。”

冒号笑着警告:“不要高兴太早,着陆后我们还会再次起飞的——别忘了我们的迭代式学习是周而复始的。至于眼下谈什么,还是先征求各位的意见,这样开放式教学才名副其实嘛。”

众人开始交头接耳、七嘴八舌地议论起来。

一阵商讨之后,大家似乎未能达成共识。冒号见状,便让他们一一道来。

问号再次充当急先锋:“能不能比较一些当今主流语言各自的优缺点?”

冒号笑言:“我怎么恍惚间又回到了第一堂课?你的潜台词还是那句话:到底学哪种语言好?”

问号被窥破心事,微露窘色。

“不过我非常理解你们的想法。”冒号体谅道,“虽然这是编程中最易提出却又最难回答的问题,但考虑到大家对它如此兴致盎然,我决定不顾引火烧身之危,铤而走险一回。”

众人鼓掌。

冒号故作疑惑:“你们这是对问题的答案表示期待呢,还是对我的勇气表示赞赏?”

众皆笑曰:“兼而有之,兼而有之!”

叹号提出:“近来动态语言非常流行,能说说它与静态语言到底有何不同,是否会取而代之?”

“嗯,这个问题总算简单了些。”冒号如释重负。

逗号坚持道:“我还是那个建议,希望学些具体的编程知识和技巧,比如将最流行的Java语言中的一些重点和难点分几个专题来讨论。”

冒号颔许:“这是个很好的建议,可以采纳。”

引号有不同意见:“Java没有C++来劲:要说难点,C++多得多;要说流行度,按照TIOBE的数据,CC++之和还超过Java六个百分点呢。”

逗号不服:“你没看到CC++正在逐渐没落吗?”

引号冷哼一声:“开玩笑,什么时候操作系统、数据库、游戏软件和嵌入式系统都改用Java了再说这话。别忘了,Java的虚拟机都还是CC++写成的呢。”

冒号忙止住干戈:“我还没来得及成为众矢之的呢,你们二位倒先掐上了。”

句号提议:“最好找一个项目实例,从头至尾演练一次,既能贯穿各个知识点,又能让我们对软件开发有个整体认识。”

“这个想法听起来非常不错。”冒号沉吟了一会又道,“只是一个真正企业级的项目,涉及面太广。比如一个完整的web应用,不论是采用重量级的Java EE.NET技术,还是采用轻量级的PerlPHPRubyPython等动态语言技术,除了要掌握各自的主体语言外,还涉及到相应的框架、集成环境和各种工具,以及JavaScriptCSSHTMLXML等技术,同时数据库的知识也是不可或缺的。”

问号奇道:“JavaScriptCSSHTML这些不主要是网页设计人员的语言吗?”

冒号解释:“网页设计人员大多用Dreamweaver之类的工具来设计HTML页面,开发一般网站尚可勉力而为,若开发企业级软件则有些力不从心了。更何况web应用的趋势是具有更丰富用户体验的Rich Internet application (RIA),采用大量的AJAXFLEX等技术,需要熟悉JavascriptActionscript之类的语言,这些就更非一般网页设计人员所能胜任。”

引号插言:“据我所知,许多公司都是请网页设计师来编写HTMLJavascript等代码的。”

冒号指出:“网页的迷人之处就在于,能够用精美的画皮来包裹冗长低效的代码。出于软件开发的时间和成本的考虑,公司的选择无可非议,但如果要提高软件竞争力,这些代码至少要经过程序员的加工处理。”

逗号复言:“那数据库总该是数据库管理员的事吧?程序员至多用到hibernateiBATIS之类的ORM[1]框架。”

冒号断然否定:“数据库绝不只是DBA的事,ORM也不能取代数据库的设计和SQL的使用。另外,复杂的应用需要编写大量的存储过程stored procedure),故还应掌握PL/SQLTransact-SQL等扩展数据库语言。换句话说,从web开发最前端的网页到最后端的数据库,都应该有程序员的身影。”

句号联想到:“借用前面餐馆的例子,不妨把接待员看作客户层client    tier,把服务员看作表现层presentation tier),把厨师看作业务层business tier),把收银员看作数据层data tier),把厨工看作常用的辅助类helper class[2]。”

冒号微微点头:“比较靠谱。要说不当之处,就是服务器端的表现层不会如服务员那样直接与客户打交道,此外业务层常与数据层打交道,但厨师好像不会与收银员有什么瓜葛。”

叹号夸张地捂住脸:“天哪,程序员竟然身兼五职,太惨了吧?”

“当然程序员会各有分工,不过如果你总局限某一层的应用开发,今后凭什么谋取更高的职位?”冒号苦口婆心,“无论干哪一行,要想胜任愉快,离不开四样东西:才能、兴趣、方法和努力。没有才能则难以胜任;没有兴趣则难以愉快;没有方法则事倍功半;没有努力则一事无成。我相信好的方法最终能激发人的才能、兴趣和努力,这也是本班的一个理念。希望大家能通过各种问题的讨论,获得一些方法上的启示。”

问号急切地询问:“那么我们的下一步是什么?”

“综合各位的意见,我们从简到繁。”冒号公布计划,“先简单谈谈动态语言;再对主流语言作简评;然后范式上以OOP为主,语言上以C++JavaC#为主,作一些专题讨论;最后如果时间允许,找一个项目来实践一番。”

“呕耶!”众人皆大欢喜。

 

插语 

[1] ORMObject-Relational Mapping)是一种编程技术,能将OOP中的对象模型映射到数据库的关系模型。

[2] 传统的三层架构为:表现层、业务层和数据层。其中表现层可进一步分为客户端的客户层和服务器端的表现层,数据层有时用集成层(integration tier)和资源层(resource tier)代替。

 

总结
  • 所谓迭代学习法,是指在具体知识与抽象理论之间进行增量式的循环学习。
  • 一个合格的程序员不应只局限某一层的应用开发。
  • 要想工作胜任愉快,才能 、兴趣 、方法和努力缺一不可。一套好的方法可以激发才能、兴趣和努力。

“”参考

[1] Deepak AlurJohn CrupiDan MalksCore J2EE Patterns: Best Practices and Design StrategiesUpper Saddle River, NJPrentice Hall PTR2003120-121

posted on 2009-04-23 09:15  郑晖  阅读(2593)  评论(8编辑  收藏  举报

导航