<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>冒号空间 &#187; 迭代学习法</title>
	<atom:link href="http://blog.zhenghui.org/tag/iterative-study/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zhenghui.org</link>
	<description>自然、人类、机器</description>
	<lastBuildDate>Fri, 30 Dec 2011 03:14:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>冒号课堂§5.1：教学计划</title>
		<link>http://blog.zhenghui.org/2009/09/21/colon-class-5_1/</link>
		<comments>http://blog.zhenghui.org/2009/09/21/colon-class-5_1/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 02:39:08 +0000</pubDate>
		<dc:creator>hui</dc:creator>
				<category><![CDATA[冒号课堂]]></category>
		<category><![CDATA[程序员]]></category>
		<category><![CDATA[编程范式]]></category>
		<category><![CDATA[迭代学习法]]></category>

		<guid isPermaLink="false">http://blog.zhenghui.org/?p=440</guid>
		<description><![CDATA[<b>教学计划</b>——接下来的故事（<em>讨论下一步教学计划</em>）<br/> • 编程水平的提升之道是：在实战中演练招法，在招法中领会心法，心法反过来提升招法，进而提高实战水平，如此循环往复呈螺旋式上升过程。正所谓熟能生巧，巧能生通<br/> • 迭代学习法：即在具体知识与抽象理论之间进行折返式学习<br/> • 网页的迷人之处就在于，能够用精美的画皮来包裹冗长低效的代码<br/> • 无论干哪一行，要想胜任愉快，离不开四样东西：才能、兴趣、方法和努力 [...]]]></description>
			<content:encoded><![CDATA[<h1 style="text-align: center;"><span style="font-family: 宋体;">冒号课堂</span></h1>
<strong><span style="font-size: 13pt; font-family: 宋体;">第五课 语言小谈（1）</span></strong>

<p><strong><span style="font-family: 宋体;">课前导读</span></strong></p>
<p style="text-indent: 18pt;"><span style="font-family: 宋体;">本课承上启下，为今后的学习作一些铺垫。在确定教学计划后，对数据类型和动态语言作了简单的介绍，并对有关编程语言的一些观点作出评论。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 18pt;"><span style="font-family: 宋体;">本课共分四节——</span></p>
<p style="text-indent: 18pt;"><em>1.</em><em><span style="font-family: 宋体;">教学计划——接下来的故事</span></em></p>
<p style="text-indent: 18pt;"><em>2.</em><em><span style="font-family: 宋体;">数据类型——规则与变通</span></em></p>
<p style="margin-left: 18pt;"><em>3.</em><em><span style="font-family: 宋体;">动态语言——穿着彩衣飞舞的脚本语言</span></em></p>
<p style="margin-left: 18pt;"><em>4.</em><em><span style="font-family: 宋体;">语言误区——语言的宗教情结</span></em></p>

<!-- below comes from generated html -->
<head><link rel="stylesheet" href="http://blog.zhenghui.org/css/colonclass.css" type="text/css"></head>

<div lang="zh-CN" class="article" title="教学计划"><div class="titlepage"><div><div><h1 class="title"><a name="id600625"></a>5.1 教学计划——接下来的故事</h1></div><div><div class="author"><h3 class="author">郑晖</h3></div></div><div><div class="abstract" title="摘要"><p class="title"><b>摘要</b></p><p>讨论下一步教学计划</p></div></div></div><hr /></div><div class="toc"><p><b>目录</b></p><dl><dt><span class="section"><a href="#preview">！预览</a></span></dt><dt><span class="section"><a href="#question">？提问</a></span></dt><dt><span class="section"><a href="#explaination">：讲解</a></span></dt><dt><span class="section"><a href="#note">，插语</a></span></dt><dt><span class="section"><a href="#summary">。总结</a></span></dt><dt><span class="section"><a href="#reference">“”参考</a></span></dt></dl></div><div class="epigraph"><div class="literallayout"><p>褚小者不可以怀大，绠短者不可以汲深</p></div><div class="attribution"><span>—<span class="attribution">《庄子•至乐》</span></span></div></div><div class="section" title="！预览"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="preview"></a>！预览</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
                    编程水平的提升之道是：在实战中演练招法，在招法中领会心法，心法反过来提升招法，进而提高实战水平，如此循环往复呈螺旋式上升过程。正所谓熟能生巧，巧能生通
                </p></li><li class="listitem"><p>
                    迭代学习法：即在具体知识与抽象理论之间进行折返式学习
                </p></li><li class="listitem"><p>
                    网页的迷人之处就在于，能够用精美的画皮来包裹冗长低效的代码
                </p></li><li class="listitem"><p>
                    无论干哪一行，要想胜任愉快，离不开四样东西：才能、兴趣、方法和努力
                </p></li></ul></div></div><div class="section" title="？提问"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="question"></a>？提问</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>什么是迭代学习法？</p></li><li class="listitem"><p>一个合格的程序员需要学习和掌握不同领域的许多知识，如何能胜任愉快？</p></li></ul></div></div><div class="section" title="：讲解"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="explaination"></a>：讲解</h2></div></div></div><p>
            新课开始了，冒号一反常态，并没有直奔主题：“在谈论新话题之前，先请诸位畅所欲言，谈谈这段时间的学习感受。”
        </p><p>
            叹号表情有点复杂：“通过前面的学习，让我长了不少见识，只是——”
        </p><p>
            “但讲无妨。” 见叹号有些吞吞吐吐，冒号鼓励道。
        </p><p>
            “只是觉得有点——纸上谈兵。”叹号鼓足勇气说出心里话。
        </p><p>
            引号不以为然：“我倒觉得应该更深入地去了解编程范式，现在有了一些感性认识，但还非常肤浅，希望以后能进一步展开。”
        </p><p>
            逗号挺实在：“有些地方似懂非懂，听起来挺费劲的，直到情景编程才觉得轻松了些。以后可不可以多谈些具体的编程知识、编程技巧和编程经验？”
        </p><p>
            句号拍了拍他的肩膀：“你想学的是招法，老冒传的是心法。”
        </p><p>
            逗号不服：“没有招法再多心法也白搭——光说不练假把式。”
        </p><p>
            句号反驳：“只关注招法，境界永远得不到提升——光练不说傻把式。”
        </p><p>
            “二位请暂停争论。”冒号把头转向问号，“你怎么看？”
        </p><p>
            问号很干脆：“管它心法还是招法，能解决问题的就是好法。”
        </p><p>
            “你倒滑头，整个一白猫黑猫论嘛！”冒号哈哈一笑，“首先，编程范式绝非中看不中用的屠龙之术，它有助于我们更快速地掌握、更深刻地理解、更纯熟地运用编程语言，故有心法之谓。其次，心法只有通过招法才能落到实处，也只有通过招法才能融会贯通。”
        </p><p>
            “那传说中的‘无招胜有招’呢？”引号问。
        </p><p>
            冒号哂道：“武侠小说看多了，容易想入非非，那种境界岂是一般人所能达到的？对绝大多数人来说，无招就意味着自己没招而将中他人之招。”
        </p><p>
            众人窃笑。
        </p><p>
            “还有一样是至关重要的。”冒号提醒道，“那就是实战。”
        </p><p>
            句号深有体会：“以前在学校里编程似乎还得心应手，到了公司就时感力有不逮。”
        </p><p>
            “花拳绣腿对付小喽啰绰绰有余，真碰到高手自然漏洞百出了。”冒号直言道，“编程水平的提升之道是：在实战中演练招法，在招法中领会心法，心法反过来提升招法，进而提高实战水平，如此循环往复呈螺旋式上升过程。正所谓<span class="strong"><strong>熟能生巧，巧能生通</strong></span>。”
        </p><p>
            问号询道：“下面我们的主题是什么？”
        </p><p>
            冒号亮出他的一套学习理论：“软件工程中有个<span class="emphasis"><em>迭代开发法</em></span>，本班则采用<span class="emphasis"><em>迭代学习法</em></span>：即在具体知识与抽象理论之间进行折返式学习。当然这种迭代不是机械式的重复，而是<span class="emphasis"><em>增量式的循环</em></span>。假定你们以前更关注具体的编程语言，那么遵循这种方式，先介绍抽象的编程范式是合适的。在初步了解范式之后，不妨重新回到编程语言上来。”
        </p><p>
            叹号唯唯连声：“是啊，在空中飘久了，会染上恐高症的。”
        </p><p>
            冒号笑着警告：“不要高兴太早，着陆后我们还会再次起飞的——别忘了我们的迭代式学习是周而复始的。至于眼下谈什么，还是先征求各位的意见，这样开放式教学才名副其实嘛。”
        </p><p>
            众人开始交头接耳、七嘴八舌地议论起来。
        </p><p>
            一阵商讨之后，大家似乎未能达成共识。冒号见状，便让他们一一道来。
        </p><p>
            问号再次充当急先锋：“能不能比较一些当今主流语言各自的优缺点？”
        </p><p>
            冒号笑言：“我怎么恍惚间又回到了第一堂课？你的潜台词还是那句话：到底学哪种语言好？”
        </p><p>
            问号被窥破心事，微露窘色。
        </p><p>
            “不过我非常理解你们的想法。”冒号体谅道，“虽然这是编程中最易提出却又最难回答的问题，但考虑到大家对它如此兴致盎然，我决定不顾引火烧身之危，铤而走险一回。”
        </p><p>
            众人鼓掌。
        </p><p>
            冒号故作疑惑：“你们这是对问题的答案表示期待呢，还是对我的勇气表示赞赏？”
        </p><p>
            众皆笑曰：“兼而有之，兼而有之！”
        </p><p>
            叹号提出：“近来动态语言非常流行，能说说它与静态语言到底有何不同，是否会取而代之？”
        </p><p>
            “嗯，这个问题总算简单了些。”冒号如释重负。
        </p><p>
            逗号坚持道：“我还是那个建议，希望学些具体的编程知识和技巧，比如将最流行的Java语言中的一些重点和难点分几个专题来讨论。”
        </p><p>
            冒号颔许：“这是个很好的建议，可以采纳。”
        </p><p>
            引号有不同意见：“Java没有C++来劲：要说难点，C++多得多；要说流行度，按照TIOBE的数据，C与C++之和还超过Java六个百分点呢。”
        </p><p>
            逗号不服：“你没看到C和C++正在逐渐没落吗？”
        </p><p>
            引号冷哼一声：“开玩笑，什么时候操作系统、数据库、游戏软件和嵌入式系统都改用Java了再说这话。别忘了，Java的虚拟机都还是C或C++写成的呢。”
        </p><p>
            冒号忙止住干戈：“我还没来得及成为众矢之的呢，你们二位倒先掐上了。”
        </p><p>
            句号提议：“最好找一个项目实例，从头至尾演练一次，既能贯穿各个知识点，又能让我们对软件开发有个整体认识。”
        </p><p>
            “这个想法听起来非常不错。”冒号沉吟了一会又道，“只是一个真正企业级的项目，涉及面太广。比如一个完整的web应用，不论是采用重量级的Java EE或.NET技术，还是采用轻量级的Perl、PHP、Ruby、Python等动态语言技术，除了要掌握各自的主体语言外，还涉及到相应的框架、集成环境和各种工具，以及JavaScript、CSS、HTML和XML等技术，同时数据库的知识也是不可或缺的。”
        </p><p>
            问号奇道：“JavaScript、CSS和HTML这些不主要是网页设计人员的语言吗？”
        </p><p>
            冒号解释：“网页设计人员大多用Dreamweaver之类的工具来设计HTML页面，开发一般网站尚可勉力而为，若开发企业级软件则有些力不从心了。更何况web应用的趋势是具有更丰富用户体验的Rich Internet application （RIA），采用大量的AJAX、FLEX等技术，需要熟悉Javascript或Actionscript之类的语言，这些就更非一般网页设计人员所能胜任。”
        </p><p>
            引号插言：“据我所知，许多公司都是请网页设计师来编写HTML和Javascript等代码的。”
        </p><p>
            冒号指出：“网页的迷人之处就在于，能够用精美的画皮来包裹冗长低效的代码。出于软件开发的时间和成本的考虑，公司的选择无可非议，但如果要提高软件竞争力，这些代码至少要经过程序员的加工处理。”
        </p><p>
            逗号复言：“那数据库总该是数据库管理员的事吧？程序员至多用到hibernate、iBATIS之类的ORM<a class="link" href="#note1"><sup>[1]</sup></a>框架。”
        </p><p>
            冒号断然否定：“数据库绝不只是DBA的事，ORM也不能取代数据库的设计和SQL的使用。另外，复杂的应用需要编写大量的<span class="term">存储过程</span>（stored procedure），故还应掌握PL/SQL或Transact-SQL等扩展数据库语言。换句话说，从web开发最前端的网页到最后端的数据库，都应该有程序员的身影。”
        </p><p>
            句号联想到：“借用前面餐馆的例子，不妨把接待员看作<span class="term">客户层</span>（client tier），把服务员看作<span class="term">表现层</span>（presentation tier），把厨师看作<span class="term">业务层</span>（business tier），把收银员看作<span class="term">数据层</span>（data tier），把厨工看作常用的<span class="term">辅助类</span>（helper class）<a class="link" href="#note2"><sup>[2]</sup></a>。”
        </p><p>
            冒号微微点头：“比较靠谱。要说不当之处，就是服务器端的表现层不会如服务员那样直接与客户打交道，此外业务层常与数据层打交道，但厨师好像不会与收银员有什么瓜葛。”
        </p><p>
            叹号夸张地捂住脸：“天哪，程序员竟然身兼五职，太惨了吧？”
        </p><p>
            “当然程序员会各有分工，不过如果你总局限某一层的应用开发，今后凭什么谋取更高的职位？”冒号苦口婆心，“<span class="strong"><strong>无论干哪一行，要想胜任愉快，离不开四样东西：才能、兴趣、方法和努力。没有才能则难以胜任；没有兴趣则难以愉快；没有方法则事倍功半；没有努力则一事无成</strong></span>。我相信好的方法最终能激发人的才能、兴趣和努力，这也是本班的一个理念。希望大家能通过各种问题的讨论，获得一些方法上的启示。”
        </p><p>
            问号急切地询问：“那么我们的下一步是什么？”
        </p><p>
            “综合各位的意见，我们从简到繁。”冒号公布计划，“先简单谈谈动态语言；再对主流语言作简评；然后范式上以OOP为主，语言上以C++、Java和C#为主，作一些专题讨论；最后如果时间允许，找一个项目来实践一番。”
        </p><p>
            “呕耶！”众人皆大欢喜。
        </p></div><div class="section" title="，插语"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="note"></a>，插语</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><a name="note1"></a>
                    ORM（Object-Relational Mapping）是一种编程技术，能将OOP中的对象模型映射到数据库的关系模型。
                </p></li><li class="listitem"><p><a name="note2"></a>
                    传统的三层架构为：表现层、业务层和数据层。其中表现层可进一步分为客户端的客户层和服务器端的表现层，数据层有时用集成层（integration tier）和资源层（resource tier）代替。
                </p></li></ol></div></div><div class="section" title="。总结"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="summary"></a>。总结</h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
                    所谓迭代学习法，是指在具体知识与抽象理论之间进行增量式的循环学习。
                </p></li><li class="listitem"><p>
                    一个合格的程序员不应只局限某一层的应用开发。
                </p></li><li class="listitem"><p>
                    要想工作胜任愉快，才能、兴趣、方法和努力缺一不可。一套好的方法可以激发才能、兴趣和努力。
                </p></li></ul></div></div><div class="section" title="“”参考"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="reference"></a>“”参考</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
                    Deepak Alur，John Crupi，Dan Malks．Core J2EE Patterns: Best Practices and Design Strategies．Upper Saddle River, NJ：Prentice Hall PTR，2003．120-121
                </p></li></ol></div></div></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.zhenghui.org%2F2009%2F09%2F21%2Fcolon-class-5_1%2F&amp;title=%E5%86%92%E5%8F%B7%E8%AF%BE%E5%A0%82%C2%A75.1%EF%BC%9A%E6%95%99%E5%AD%A6%E8%AE%A1%E5%88%92" id="wpa2a_2">分享/保存</a></p><h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009年08月21日 -- <a href="http://blog.zhenghui.org/2009/08/21/contents-of-colonclass/" title="《冒号课堂》目录">《冒号课堂》目录</a> (29)</li><li>2010年06月3日 -- <a href="http://blog.zhenghui.org/2010/06/03/advice-on-programmer/" title="答读者问(1)——对程序员的一些个人建议">答读者问(1)——对程序员的一些个人建议</a> (6)</li><li>2009年09月27日 -- <a href="http://blog.zhenghui.org/2009/09/27/colon-class-5_4/" title="冒号课堂§5.4：语言误区">冒号课堂§5.4：语言误区</a> (0)</li><li>2009年09月19日 -- <a href="http://blog.zhenghui.org/2009/09/19/colon-class-4_4/" title="冒号课堂§4.4：情景范式">冒号课堂§4.4：情景范式</a> (0)</li><li>2009年09月17日 -- <a href="http://blog.zhenghui.org/2009/09/17/colon-class-4_3/" title="冒号课堂§4.3：汇总范式">冒号课堂§4.3：汇总范式</a> (5)</li><li>2009年09月15日 -- <a href="http://blog.zhenghui.org/2009/09/15/colon-class-4_2/" title="冒号课堂§4.2：逻辑范式">冒号课堂§4.2：逻辑范式</a> (0)</li><li>2009年09月13日 -- <a href="http://blog.zhenghui.org/2009/09/13/colon-class-4_1/" title="冒号课堂§4.1：函数范式">冒号课堂§4.1：函数范式</a> (0)</li><li>2009年09月11日 -- <a href="http://blog.zhenghui.org/2009/09/11/colon-class-3_4/" title="冒号课堂§3.4：事件驱动">冒号课堂§3.4：事件驱动</a> (2)</li><li>2009年09月10日 -- <a href="http://blog.zhenghui.org/2009/09/10/colon-class-3_3/" title="冒号课堂§3.3：切面范式">冒号课堂§3.3：切面范式</a> (4)</li><li>2009年09月9日 -- <a href="http://blog.zhenghui.org/2009/09/09/colon-class-3_2/" title="冒号课堂§3.2：超级范式">冒号课堂§3.2：超级范式</a> (2)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.zhenghui.org/2009/09/21/colon-class-5_1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

