我们应该讨论什么? 就面向对象的讨论所引发的一些思考

不参与具体应该如何学习和实践的讨论了, 我要学会沉默。 但是愿意相信我的人, 我还是可以有一些建议。

对于初学者, SICP这本书的学习如果能早于谭浩强的C, 和面向对象方法, 绝对有好处。 然后在学习了C和更高级的面向对象方法之后, 反过来再读SICP, 又会在后者上有所提高。 当然, 对已经学习了命令式编程的兄弟来说, 后学SICP,虽然会有些别扭, 如果能够保持一个初学者的良好心态, 也仍然有所助益。

面向对象不是唯一的方法论, 也不太可能是最完善的一种方法论, 之所以流行, 其深刻原因也不是我们能回答的。 只是提醒大家, 有一种现象, 叫做劣币驱逐良币(我并没有说它一定是)。 但是无论好坏,现在面向对象的周边配套设施却是最齐全的, 考虑到这一点, 不逐渐深入掌握面向对象的各方面常识, 对于我们平时的顺利工作来说又是不行的。

只是学习面向对象的方法, 不见得一定是从常规入手; 当然, 对于一些人来说, 常规是结构化->面向对象, 对于另一些人则意味着直接开始面向对象的学习。

在这里再次强调一下我的体会。 目标驱动作为, 问题驱动学习, 这是最好的办法。 第二点就是对好的东西的认知, 第三点是孜孜不倦的改进。 这些东西没达到一定的程度, 学习什么、认可那种, 也会经常走到半路, 就停止了, 然后自以为看到了全部的风景。

反过来说, 对大多数人的生活和工作来讲, 达到一定水平已经足够了, 更加深入反而是低效的, 争论其实也是不必要的, 怎么舒服怎么来就可以了。 对于这种情况, 我们认同的东西, 即使它有缺陷, 对我们也不会有更多的损害, 因此我们最佳的策略是到此为止。 在这一点上我还是相当乐观的: 认识的误区即便是个瘤子, 也不见得就有多毒, 在医疗上也不是倾向于对任何一个异常都下刀子的, 不是吗?

然而设立停止点不代表从今天开始就不用学习了, 对一个普通的行业从业人员, 不学习就意味着淘汰。 只是在这种策略下, 我们讨论和学习的重点, 不应放在证明自己的选择好坏上, 而是在已经做出了选择之后, 在这个选择的范畴之内, 如何做的更好这一议题上。

对于选择不同的人, 其实更多应该是划分自己的小圈子内部讨论如何改良, 而不是急于去证明自己的决策。 当我们去其它小圈子的时候, 更多的应该抱有一种看看有什么可以借鉴的的目的,而不是形成在世界观、 方法论、 学习过程上的对立。 能得到别人观点的启发, 对自己是最有利的, 而不是对抗。 Strustroup这样语言圈子里的人上人,都不选择评价语言的好坏这一行为, 更何况于你我呢? 而php、ruby炮轰Java, 人家那是有商业目的的, 咱们更多的似乎应该是求同存异吧。

再比如那些最坚决的面向对象支持者, 人家Linus炮轰C++的时候, 基本把整个面向对象方法论都给否定了, 你可以试着去回复他的论点, 但有几个人觉得自己在资格和水平上(后者更为关键)能够和他平等的对话呢? 估计, 因为Linus几句话, 因为他的权威属性, 否定自己的选择的人也不多。 关键是他那些刀刀见血的言论, 会对我们有什么启发; 没得到收获, 也无所谓, 这说明我们的工作碰到他所抨击的问题的概率比较小, 那么把它们当作其它世界的存在就可以了。

说是沉默, 还是写了这么多。 抱歉我不会在此贴及其回复中谈及我对面向对象的看法。 不过未来我会逐渐介绍一些在采用其它语言范式和仅仅采用C#或者C++这样一种特定语言时, 面向对象和面向对象技巧的一些非面向对象的替代方法,它们当中有些更加适合特定的场景; 当然也会介绍一些面向对象方法内部的经验。 因为关键的总是如何改进, 而不是选择什么。

解决问题, 才是我们应该做的。

posted on 2008-05-11 16:51  怪怪  阅读(4117)  评论(29编辑  收藏  举报

导航