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

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

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(我们应该讨论什么? 就面向对象的讨论所引发的一些思考)