<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="bbPress/1.0.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>冒号论坛 &#187; Forum: 《冒号课堂》讨论区 - Recent Topics</title>
		<link>http://bbs.zhenghui.org/forum/colonclass-discussion</link>
		<description>冒号论坛 &raquo; Forum: 《冒号课堂》讨论区 - Recent Topics</description>
		<language>en-US</language>
		<pubDate>Fri, 10 Sep 2010 03:18:45 +0000</pubDate>
		<generator>http://bbpress.org/?v=1.0.2</generator>
		<textInput>
			<title><![CDATA[Search]]></title>
			<description><![CDATA[Search all topics from these forums.]]></description>
			<name>q</name>
			<link>http://bbs.zhenghui.org/search.php</link>
		</textInput>
		<atom:link href="http://bbs.zhenghui.org/rss/forum/colonclass-discussion/topics" rel="self" type="application/rss+xml" />

		<item>
			<title>Todd on "DbC和TDD"</title>
			<link>http://bbs.zhenghui.org/topic/dbc%e5%92%8ctdd#post-158</link>
			<pubDate>Sun, 25 Jul 2010 11:48:18 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">158@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;昨天看了一个老外的视频讲座，他谈到：DbC适合用于表达无副作用的条件约束(constraint)；TDD适合用于表达类的外部行为(behavior)。二者是互补关系，可以结合使用。&#60;/p&#62;
&#60;p&#62;&#60;a href=&#34;http://www.infoq.com/presentations/TDD-in-a-DbC-World-Greg-Young&#34; rel=&#34;nofollow&#34;&#62;http://www.infoq.com/presentations/TDD-in-a-DbC-World-Greg-Young&#60;/a&#62;
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "迪米特法则"</title>
			<link>http://bbs.zhenghui.org/topic/%e8%bf%aa%e7%b1%b3%e7%89%b9%e6%b3%95%e5%88%99#post-184</link>
			<pubDate>Fri, 03 Sep 2010 22:00:29 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">184@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;目前，我能够识别并避免违背迪米特法则，但是总感觉对迪米特法则的认识深度还不够，还不能说清楚到底迪米特法则本质上意味着什么。我目前思考的结果是：&#60;br /&#62;
OOP中，对象间的交互是消息传递模型，而消息是值语义的；而obj.GetAnotherObject()的结果是引用，违背了对象消息传递模型。所以，违背迪米特法则的设计其实是不符合OOP的。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "UML感想"</title>
			<link>http://bbs.zhenghui.org/topic/uml%e6%84%9f%e6%83%b3#post-154</link>
			<pubDate>Fri, 09 Jul 2010 18:05:45 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">154@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;如果把系统视为一个多维对象，那么UML的用例图、类图、序列图、状态图等是在不同维度上对该对象建立的视图。抽象的角度不同，抽象的结果就不同，根据不同的需要选择不同的抽象角度。不知道这样理解UML是否正确？
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "请推荐一本书"</title>
			<link>http://bbs.zhenghui.org/topic/%e8%af%b7%e6%8e%a8%e8%8d%90%e4%b8%80%e6%9c%ac%e4%b9%a6#post-180</link>
			<pubDate>Tue, 31 Aug 2010 16:02:42 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">180@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;《冒号课堂》的编程范式部分是从宏观上介绍了程序设计语言的概貌，我想知道有没有一本数学或者科学方面的书籍能起到类似的效果，即建立一些宏观的概念，介绍一些思想。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "值与引用"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%80%bc%e4%b8%8e%e5%bc%95%e7%94%a8#post-76</link>
			<pubDate>Thu, 04 Mar 2010 10:12:27 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">76@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;我觉得“值与引用”这章算是全书的一个亮点，从语法到语义到设计几个层次进行了深入地分析，看了之后受益匪浅！
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "语言与思维"</title>
			<link>http://bbs.zhenghui.org/topic/%e8%af%ad%e8%a8%80%e4%b8%8e%e6%80%9d%e7%bb%b4#post-173</link>
			<pubDate>Sat, 07 Aug 2010 15:39:23 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">173@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;以前听说过语言对思维的影响，不大理解。但在计算机领域，程序设计语言对思维的影响确实是显而易见的，只会用C的程序员多半是过程思维，在不学习OOP的情况下，很难形成OO思维。而多数程序员不了解函数式编程也是同样的道理。用一句有名的话“当你手中只有一把锤子的时候，你看任何东西都是钉子”可能就是这个道理。&#60;/p&#62;
&#60;p&#62;我现在最感兴趣的不是“语言对思维有影响”这个事实，而是既然每个人掌握的语言都总是有限的，即使精通所有程序设计语言，也不能保证以后不出现新的语言代表新的思维和范式。那么，如何才能立足于现有的语言，又能跳出语言所形成的固有思维定势呢？
&#60;/p&#62;</description>
		</item>
		<item>
			<title>whlgh on "关于合成的基础类问题"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%85%b3%e4%ba%8e%e5%90%88%e6%88%90%e7%9a%84%e5%9f%ba%e7%a1%80%e7%b1%bb%e9%97%ae%e9%a2%98#post-169</link>
			<pubDate>Wed, 04 Aug 2010 22:22:41 +0000</pubDate>
			<dc:creator>whlgh</dc:creator>
			<guid isPermaLink="false">169@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;郑老师，你好，我在书上第294页讲合成的缺点时，看到一句话这么说：“合成的基础类只能是具体类型，不能是抽象类型”，请问合成的基础类是什么意思？为什么不能是抽象类型？能不能再详细讲解一下，谢谢。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "需求与设计的关系"</title>
			<link>http://bbs.zhenghui.org/topic/%e9%9c%80%e6%b1%82%e4%b8%8e%e8%ae%be%e8%ae%a1%e7%9a%84%e5%85%b3%e7%b3%bb#post-166</link>
			<pubDate>Mon, 02 Aug 2010 19:29:59 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">166@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;最近在学习TDD的过程中，我对需求与设计的关系进行了一些思考，我发现：系统A的&#60;strong&#62;需求&#60;/strong&#62;决定了A的外部特征，这是系统A不变的部分；系统A的&#60;strong&#62;设计&#60;/strong&#62;是如何将A划分为有关联的若干子系统a1,a2...an，这就是系统A的可变部分；系统A的设计又转化为对其子系统a1,a2,...an的&#60;strong&#62;需求&#60;/strong&#62;。如果把视野扩宽，系统A的需求也必然产生于更大的系统中的设计。所以，软件需求是来源于更高层次的设计的。对于软件来说产品设计处于最高层，产品设计来源于对用户需求的理解（可能并不明确，需要自己探索）。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "object范式与stream范式"</title>
			<link>http://bbs.zhenghui.org/topic/object%e8%8c%83%e5%bc%8f%e4%b8%8estream%e8%8c%83%e5%bc%8f#post-161</link>
			<pubDate>Wed, 28 Jul 2010 10:06:54 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">161@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;SICP的第3章比较了object与stream两种范式，但很可惜《冒号课堂》里面没有把stream列为一个独立的范式进行讨论。&#60;/p&#62;
&#60;p&#62;&#60;a href=&#34;http://mitpress.mit.edu/sicp/full-text/sicp/book/node50.html&#34; rel=&#34;nofollow&#34;&#62;http://mitpress.mit.edu/sicp/full-text/sicp/book/node50.html&#60;/a&#62;
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "多态的本质是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%a4%9a%e6%80%81%e7%9a%84%e6%9c%ac%e8%b4%a8%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-152</link>
			<pubDate>Tue, 06 Jul 2010 12:03:16 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">152@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;多数人以为多态就是基于继承的子类型多态，而书中提到了几种不同的多态。为什么这几种不同的形式都被称为多态呢？它们的共同点或者说多态的本质是什么？我思考的结果是：类型（Type）是语义要求，类（class，struct）等是语法机制，多态的本质是不同的类满足同一类型的要求，即同一语义不同语法。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "Ruby on Rails有什么特色？"</title>
			<link>http://bbs.zhenghui.org/topic/ruby-on-rails%e6%9c%89%e4%bb%80%e4%b9%88%e7%89%b9%e8%89%b2%ef%bc%9f#post-147</link>
			<pubDate>Wed, 30 Jun 2010 19:21:11 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">147@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;很好奇Ruby on Rails有什么特色能在Web开发框架中独树一帜？和webwork，struts等web框架相比有什么不同？
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "函数式编程一问"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%87%bd%e6%95%b0%e5%bc%8f%e7%bc%96%e7%a8%8b%e4%b8%80%e9%97%ae#post-145</link>
			<pubDate>Mon, 28 Jun 2010 10:41:56 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">145@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;f = (x, y) =&#38;gt; (y, x)&#60;/p&#62;
&#60;p&#62;上面定义了一个函数f，把(x, y)变成(y, x)。如果应用两次该函数则有f(f(x, y)) = (x, y)。这个过程是自内向外的：&#60;br /&#62;
f(f(x, y)) = f(y, x) = (x, y)&#60;/p&#62;
&#60;p&#62;我的问题是：在函数式编程中有没有可能不经过这样的过程，而是自外向内从最外层f开始，先得出f(f) = (x, y) =&#38;gt; (x, y)，然后(f(f))(x, y) = (x, y)来进行？
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "值类型是否有行为？"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%80%bc%e7%b1%bb%e5%9e%8b%e6%98%af%e5%90%a6%e6%9c%89%e8%a1%8c%e4%b8%ba%ef%bc%9f#post-139</link>
			<pubDate>Thu, 24 Jun 2010 11:47:27 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">139@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;OOP对象3大特征：标识、状态、行为。书中认为值类型具备：状态和行为，而不具备标识。不过，最近我看到一些其他一些资料更强调值类型不具备行为，而是表示状态。我想这是有道理的，因为行为必定要有主体，即标识。所以，我更倾向于从纯语义的角度来看，值类型应该不具备行为。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "subtype和subclass"</title>
			<link>http://bbs.zhenghui.org/topic/subtype%e5%92%8csubclass#post-130</link>
			<pubDate>Mon, 14 Jun 2010 00:13:36 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">130@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;虽然subtype和subclass是OOP中最基本的问题之一，但我是在读《冒号课堂》的时候才开始注意到这个问题。我想国内的程序员不能区分subtype和subclass的不在少数。下面这个资料对于subtype和subclass讨论得比较深入，贴上来分享：&#60;/p&#62;
&#60;p&#62;&#60;a href=&#34;http://www.cs.princeton.edu/courses/archive/fall98/cs441/mainus/mainus.html&#34; rel=&#34;nofollow&#34;&#62;http://www.cs.princeton.edu/courses/archive/fall98/cs441/mainus/mainus.html&#60;/a&#62;
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "范畴论讲什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e8%8c%83%e7%95%b4%e8%ae%ba%e8%ae%b2%e4%bb%80%e4%b9%88%ef%bc%9f#post-133</link>
			<pubDate>Wed, 16 Jun 2010 10:05:35 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">133@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;记得郑老师曾经讲过范畴论(category theory)和程序类型系统是相通的，但是后者要简单得多。我想了解范畴论是讲什么的，尤其是还涉及了哪些方面是一般程序类型系统没有的？
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "算法设计需要什么样的思维？"</title>
			<link>http://bbs.zhenghui.org/topic/%e7%ae%97%e6%b3%95%e8%ae%be%e8%ae%a1%e9%9c%80%e8%a6%81%e4%bb%80%e4%b9%88%e6%a0%b7%e7%9a%84%e6%80%9d%e7%bb%b4%ef%bc%9f#post-128</link>
			<pubDate>Sun, 13 Jun 2010 17:29:21 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">128@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;如果说软件设计中最重要的是抽象思维，那么算法设计需要什么样的思维呢？
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "class invariant"</title>
			<link>http://bbs.zhenghui.org/topic/class-invariant#post-120</link>
			<pubDate>Thu, 10 Jun 2010 09:41:30 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">120@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;wikipedia上class invaraint的定义：&#60;br /&#62;
In computer programming, specifically object-oriented programming, a class invariant is an invariant used to constrain objects of a class. Methods of the class should preserve the invariant. The class invariant constrains the state stored in the object.Class invariants are established during construction and constantly maintained between calls to public methods. Temporary breaking of class invariance between private method calls is possible, although not encouraged.&#60;/p&#62;
&#60;p&#62;这个定义以及后面的几个例子中的invariant是针对状态的，比如：Date类的month属性是1到12的整数。而我认为这里忽略了一种非状态的class invariant，比如：Pair类应该有这样的invariant：&#60;/p&#62;
&#60;p&#62;Pair(x, y).Left() == x, Pair(x, y).Right() == y&#60;/p&#62;
&#60;p&#62;其中，Pair()是Pair类的构造函数，Left()，Right()分别是取左、右值。这种非状态的，描述抽象数据类型构造和使用关系整体规范的class invariant似乎无法通过在类内部通过进行状态检查来保证，而单元测试时则应该明确并重点测试这样的invariant。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Jee on "菜鸟读《冒号课堂》后的感触，望郑晖老师解惑"</title>
			<link>http://bbs.zhenghui.org/topic/%e8%8f%9c%e9%b8%9f%e8%af%bb%e3%80%8a%e5%86%92%e5%8f%b7%e8%af%be%e5%a0%82%e3%80%8b%e5%90%8e%e7%9a%84%e6%84%9f%e8%a7%a6%ef%bc%8c%e6%9c%9b%e9%83%91%e6%99%96%e8%80%81%e5%b8%88%e8%a7%a3%e6%83%91#post-115</link>
			<pubDate>Tue, 01 Jun 2010 13:14:33 +0000</pubDate>
			<dc:creator>Jee</dc:creator>
			<guid isPermaLink="false">115@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;之前在Top language里的一位网友像我推荐您的《冒号课堂》，书中eric向您建议开设社区，我猜测可能会有，就找到您的博客发现此地，很幸运您是一个如此有责任心的作者。&#60;br /&#62;
    我是一名没有什么理论基础的不合格的计算机专业毕业生，毕业后却对软件方面技术非常感兴趣，可能与个性有关。于是在这近2年的找工作和工作过程中看了一些书，也和一些过来人聊过，总体来说让我对软件编程有了一点认识。在阅读您的冒号课堂之前，我曾一度认为我所差的是经验和一些诸如高级算法之类的进阶技术，可现在，一个用了一个多月时间的夜晚阅读《冒号课堂》之后的我发现我所差的不仅仅是那些，而是最基础最根本的对计算机本身的认识，对数学的认识，对软件工程的认识。&#60;br /&#62;
    我不想能有速成一说，只想能够现在正视自己，脚踏实地的一点一点的学习和进步，哪怕让我自学4年大学课程也未尝不可，只是有些时候有点找不到一个开始。我数学不好，作为一名程序员我想这是个令人沮丧的事实，我英语也不好，当看到蹩脚的一些翻译著作后痛苦不已。我想尝试着去改变这些，但是却不知该如何去做，您知道，作为一名已经进入社会的成年人，我需要承受一些生存的压力和一些生活的负担，我希望能更好的利用每天那抽出来的时间，所以望郑晖老师能给我指出一条明道。&#60;br /&#62;
    我一直没有说我从事的语言和方向，因为我知道这并不是核心，也不是想从您这得到如何学习XX语言等。万分打扰，还望见谅。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "设计模式与语言缺陷"</title>
			<link>http://bbs.zhenghui.org/topic/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e5%b8%b8%e7%94%a8%e4%ba%8e%e5%bc%a5%e8%a1%a5%e8%af%ad%e8%a8%80%e7%9a%84%e4%b8%8d%e8%b6%b3#post-109</link>
			<pubDate>Wed, 12 May 2010 10:10:42 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">109@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;记得《冒号课堂》里面讲过设计模式常用于弥补语言的不足。看到一篇文章，也是这个意思。&#60;/p&#62;
&#60;p&#62;&#60;a href=&#34;http://blog.plover.com/prog/design-patterns.html&#34; rel=&#34;nofollow&#34;&#62;http://blog.plover.com/prog/design-patterns.html&#60;/a&#62;
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-5</link>
			<pubDate>Fri, 01 Jan 2010 13:30:06 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">5@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;看了本书以后，我对“抽象”的感觉提高了。但对于程序设计来讲，到底抽象是什么呢？我现在的答案是“抽象就是变化中的不变”。封装，继承，多态，还有设计原则和设计模式是帮助把不变显式化的机制。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "exception safety和command pattern"</title>
			<link>http://bbs.zhenghui.org/topic/exception-safety%e5%92%8ccommand-pattern#post-108</link>
			<pubDate>Mon, 10 May 2010 10:22:06 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">108@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;最近，我遇到了一些exception safety相关的问题，虽然，我使用的语言是C++，但我发现这个问题对Java和C#同样存在：在一个类方法的内部会陆续修改若干个外部对象以及自身的成员变量，如果在中间某个地方抛出异常，就需要把已经改变的状态恢复到一致性状态。有点儿类似于数据库里面的事务概念，但数据库的事务直接由数据库支持，程序员使用起来更简单。&#60;/p&#62;
&#60;p&#62;后来在网上查找了一些资料，一个实用的建议是：把所有可能抛出异常但无副作用的处理放在前面，把有副作用但不会抛异常的处理放在最后。这让我联想到command pattern：把核心的那个类方法重构为无副作用的，不是直接修改状态而是输出一系列的command；如果成功，再执行这些返回的command（假设执行command本身不会有异常）。&#60;/p&#62;
&#60;p&#62;这个例子里面，我体会到了command pattern以数据表达逻辑的好处，command pattern有点儿FP的味道！
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "另类继承"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%8f%a6%e7%b1%bb%e7%bb%a7%e6%89%bf#post-52</link>
			<pubDate>Sat, 20 Feb 2010 21:31:36 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">52@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;书中继承机制部分介绍了实现继承和接口继承，但感觉还有另一种继承的用法可以说的。比如boost::nocopyable就是利用了C++基类的私有拷贝构造函数防止派生类的拷贝构造。我觉得这类用法既不属于实现继承也不属于接口继承，只是利用了继承配合特定的语言特性达到目的。&#60;/p&#62;
&#60;p&#62;这也许已经不属于OOP理论范畴，而是与具体语言相关的一些技巧，所以我将这类用法归为实现继承、接口继承之外也另类继承。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "技术之路"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%80%e6%9c%af%e4%b9%8b%e8%b7%af#post-105</link>
			<pubDate>Wed, 28 Apr 2010 10:41:34 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">105@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;最近我在思考一个问题：和大多数技术人员一样，我刚毕业的时候，只有少量的理论知识，没有程序实践，只能算初级程序员；再经过两三年的学习锻炼，感觉有了一些提高，开始步入中高级程序员的行列。到了现在这个阶段，我感觉技术方面能从工作经验中直接学习的东西变得少了，但也知道还有很多不足之处，比如：如果让我设计一个应用系统的构架还行，但如果让我设计一个JVM或者.NET Framework之类的东西就完全不知如何下手。这是从纯技术方面来讲。另外，从业务方面，软件设计，分析，建模等等也还有很多东西，我有时候也想暂时放弃技术方面的深入，专门研究金融应用软件。&#60;/p&#62;
&#60;p&#62;总之，我觉得毕业开始的3年很单纯，就是提高技术，过了这个时期就有点儿迷茫了，知道还有很多不足，但又不知道如何下手。希望郑老师指点迷津！
&#60;/p&#62;</description>
		</item>
		<item>
			<title>alex on "阅读感受，一点建议。"</title>
			<link>http://bbs.zhenghui.org/topic/%e9%98%85%e8%af%bb%e6%84%9f%e5%8f%97%ef%bc%8c%e4%b8%80%e7%82%b9%e5%bb%ba%e8%ae%ae%e3%80%82#post-103</link>
			<pubDate>Mon, 26 Apr 2010 18:08:47 +0000</pubDate>
			<dc:creator>alex</dc:creator>
			<guid isPermaLink="false">103@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;我是个菜鸟，技术细节不敢评论，就说说叙述结构上的感觉。&#60;/p&#62;
&#60;p&#62;我觉得人物形象实在多了一些，倒不是说真有什么坏处，事实上我阅读的时候除冒号外根本没看说话人是谁，那我觉得这样的设定是否真的必要？&#60;br /&#62;
像逗号和叹号可以合并成一个人，句号和问号也可以合并，只设定2个学生，一个沉稳扎实，一个聪敏调皮，应该足以把故事的叙事结构顺下来，也能完成语言生动的任务了。&#60;/p&#62;
&#60;p&#62;还有关键词也没啥用(因为我实在找不到搜索框啊，而且也不是学术论文)，课前的提问与习题也有作用重叠的问题，感觉这些东西把结构弄的很松散。&#60;br /&#62;
您说这些为了避免信息轰炸，我倒觉得一本好书肯定不会只读一遍，如果真的字字珠玑，一定会让人反复咀嚼，细细琢磨，就是炸也会觉得炸的爽吧！
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "可维护性和敏捷设计"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%8f%af%e7%bb%b4%e6%8a%a4%e6%80%a7%e5%92%8c%e6%95%8f%e6%8d%b7%e8%ae%be%e8%ae%a1#post-100</link>
			<pubDate>Fri, 02 Apr 2010 11:45:37 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">100@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;《冒号课堂》中特别强调软件质量因素中的可维护性，我觉得这与现在业界流行的敏捷设计是一致的。在我看来，所谓敏捷，就是软件适应变化的能力很强，即可维护性很好。如果能够以书中重点强调的几个设计原则为指导（还包括其他一些原则），自然就会成为敏捷设计。&#60;/p&#62;
&#60;p&#62;不少人对于敏捷的理解就是“simple design”，即满足当前的需求就行，不要过度设计。我觉得从这个角度理解敏捷是不对的。敏捷强调迭代增量开发频繁重构，这自然要求软件可维护性高，否则重构就会举步维艰，牵一发动全身。最近项目中有个反例：开始为了方便到处使用单例模式（理由是simple design），结果后来不得不重构的时候导致大规模的源码和测试代码改动。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "关于读书"</title>
			<link>http://bbs.zhenghui.org/topic/%e5%85%b3%e4%ba%8e%e8%af%bb%e4%b9%a6#post-95</link>
			<pubDate>Sat, 27 Mar 2010 17:07:50 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">95@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;计算机方面的书我买了不少，真正精读过的却不多。有的书很经典，但是却很“平易近人”，这种书读起来比较舒服，比如：《算法导论》算是这类书；同样有的书是经典，但却让人望而生畏，典型的如《计算机程序设计艺术》。不知道郑老师读书的时候是否会把好书分成这两类？有没有读第二类书的好方法？有没有可能把第二类书变成第一类？
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "为什么是这4个原则？"</title>
			<link>http://bbs.zhenghui.org/topic/%e4%b8%ba%e4%bb%80%e4%b9%88%e6%98%af%e8%bf%994%e4%b8%aa%e5%8e%9f%e5%88%99%ef%bc%9f#post-93</link>
			<pubDate>Wed, 24 Mar 2010 14:57:58 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">93@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;设计原则有很多，比如熟悉的DRY，SOLID等原则。本书选择了间接，依赖，内聚和保变4个设计原则作为大的分类。这样选择的用意是什么呢？&#60;/p&#62;
&#60;p&#62;SCIP先讲了抽象（等同于间接），然后讲模块化（等同于内聚），可能SCIP的作者也认为抽象和内聚应该是一级原则。下面是SCIP的一段话：&#60;/p&#62;
&#60;p&#62;The preceding chapters introduced the basic elements from which programs are made. We saw how primitive procedures and primitive data are combined to construct compound entities, and we learned that abstraction is vital in helping us to cope with the complexity of large systems. But these tools are not sufficient for designing programs. Effective program synthesis also requires organizational principles that can guide us in formulating the overall design of a program. In particular, we need strategies to help us structure large systems so that they will be modular, that is, so that they can be divided &#60;code&#62;&#60;/code&#62;naturally'' into coherent parts that can be separately developed and maintained.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "数据是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%95%b0%e6%8d%ae%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-85</link>
			<pubDate>Fri, 19 Mar 2010 10:22:32 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">85@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;今天看了SCIP的数据抽象一节，然后结合之前《冒号课堂》的内容，我感觉对数据的认识又深入了一些。&#60;/p&#62;
&#60;p&#62;我现在对数据的认识是：数据在程序中是一个符号和该符号上的操作规则。比如：定义了一个符号pair，若pair = make_pair(x, y)则left(pair) == x, right(pair) == y。pair本身只是一个符号，它的特征是由其相关的一系列操作（包括构造和使用两类）所体现的。OOP的数据抽象正是以数据为中心组织操作。不知道理解对不对？&#60;/p&#62;
&#60;p&#62;参考文章：&#60;br /&#62;
&#60;a href=&#34;http://mitpress.mit.edu/sicp/full-text/sicp/book/node30.html&#34; rel=&#34;nofollow&#34;&#62;http://mitpress.mit.edu/sicp/full-text/sicp/book/node30.html&#60;/a&#62;
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "依赖倒置原则"</title>
			<link>http://bbs.zhenghui.org/topic/%e4%be%9d%e8%b5%96%e5%80%92%e7%bd%ae%e5%8e%9f%e5%88%99#post-83</link>
			<pubDate>Wed, 10 Mar 2010 16:39:00 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">83@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;本书后面结构型模式部分讲了两种层级：聚合层级和类型层级。依赖倒置原则的“高层次的模块不应该依赖于低层次的模块”，这里的“高层次”特指聚合层级的高层次吗？
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "flyweight模式"</title>
			<link>http://bbs.zhenghui.org/topic/flyweight%e6%a8%a1%e5%bc%8f#post-79</link>
			<pubDate>Tue, 09 Mar 2010 14:28:09 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">79@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;flyweight模式是否一种基于值语义的引用？被共享的小对象是值语义的，但又借助引用和不可变等语法手段既保证值语义又节省内存避免拷贝。
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>
