不要用面向对象来迷惑程序员新手

当我被问及“哪种编程语言是教我[儿子 / 女儿 / 其他没有编程经验的人的首选]时,”我的答案这五年多来一直没变:Python。

这也许会出乎你的意料,经常有人会说这是非主流语言,但我坚持我的看法。

Python十分适合解决很多简单的、有趣的问题,比用C语言要省力的多。(这是实话,几行Python代码你就能制作一个简单的拼写检查程序。)你会发现这种语言里几乎没有任何复杂或让人困惑的东西,用它编程简单易懂,比如说数组更新你可以用固有的方法来实现任何的操作算法。在Python里,你学习的曲线很平滑。数组,字典,集合是最主要的东西。

把Python当作入门语言,有一点需要注意:避免使用面向对象特征。你当然不可能完全的回避它们,有些基本数据类型里一些有用的方法跟它们有关联,问题不大。你只是使用它们已经提供的东西,不要去创建什么类,要避免任何的面向对象设计里的声明,否则的话,你一点点的数据都需要会打包成类。

从面向过程到面向对象的转移带来后果是你从关注问题和解决方法转移到关注架构。你通过对比面向过程的程序和面向对象的程序,很容易能看出这点来。后者的程序会更长,到处是多余的接口和缩进和标记。你也许忍不住想将一些小代码移进类里,或往类里添加一些小方法,这些都没必要,等日后你再做这些也不迟。

当你在帮助某人把一个有问题的语句改正确的时候,你要做的最后一件事是给他们布置一些没有实际用处的技术工作。因为有些人没事时就喜欢玩能一些面向对象的知识技术,做一些可怕的类继承,最终没有学到他们该学的东西。有些人在学习的时候慢慢的会失去兴趣,因为他们看到了太多的这些没有实际用处的继承、接口代码,感觉程序越来越笨重、难以处理。

从某方面说,当然,你需要学习一下Python的面向对象的知识,但尽可能的避免使用它们吧。

[英文原文:Don't Distract New Programmers with OOP ]

分享这篇文章:

20 Responses to 不要用面向对象来迷惑程序员新手

  1. adora says:

    the last thing you want is to get them sidetracked by faux-engineering busywork.
    应译为“你最不应该做的事就是让他们被自己创造的麻烦分散注意力”

  2. Sweet says:

    就面向对象来说,新手一般还是很难理解的。这个不是通过几个例子几本书就能搞定的东西,还是得通过不断的实践慢慢理解。我看到过很多新手用面向对象的语言写出面向过程的程序,却又以为自己用的就是面向对象的编程。

    文章最后说的,没多大实际用处的继承,代码变得笨重。这些也算是面向对象的特点吧,为了减少维护的开销而额外增加了开发阶段的工作量。不过面向对象确实很容易过度设计,导致在维护阶段,大量的抽象真的变得毫无用途。所以对需求透彻的理解是关键。

    语言的选择并不重要,重要的是培养编程思想。

  3. S says:

    就面向对象来说,新手一般还是很难理解的。这个不是通过几个例子几本书就能搞定的东西,还是得通过不断的实践慢慢理解。我看到过很多新手用面向对象的语言写出面向过程的程序,却又以为自己用的就是面向对象的编程。

    文章最后说的,没多大实际用处的继承,代码变得笨重。这些也算是面向对象的特点吧,为了减少维护的开销而额外增加了开发阶段的工作量。不过面向对象确实很容易过度设计,导致在维护阶段,大量的抽象真的变得毫无用途。所以对需求透彻的理解是关键。

    语言的选择并不重要,重要的是培养编程思想。

    • mic_x says:

      语言的选择并不重要,重要的是培养编程思想。
      非常赞同,在不同的语言之间我们可以看到很多共同的设计,无论是面向对象,还是面向过程或是面向函数。

  4. lyman says:

    不用 oo 的 python,对于零起点的新手,真不觉得比 perl 强在什么地方

  5. Mucid says:

    高级是以性能为代价的,我喜欢写c,也尽量避免使用c++……

  6. lxu4net says:

    面向过程发展到后期也出现了“结构化编程”(Structured programming),同样强调封装,高聚合、低耦合。其实现在OO也越来越不鼓励使用继承。

    • mic_x says:

      说到底继承只是为了提供多态,但多态并不一定要用继承来实现。继承只是语言级别提供的一种实现多态的工具而已

  7. 风随影尘 says:

    面向对象需要时间来体会,有时候我们省去了工作量就是为自己逃避学习的机会。

  8. codeman says:

    不敢苟同。在Python里,你学习的曲线很平滑。数组,字典,集合是最主要的东西。—这些东西没有编程的经验压根就不知道tmd在说什么。。什么是字典?什么是数组?集合?什么玩意?
    因为不认为学习曲线平滑!!

    • rappizit says:

      这些属于数据结构,是编程语言之外的东西,python使得它们用起来很简单很直观,看一下几段简单的实例就可以理解了。

  9. kapa says:

    新手不应该用python,不利于培养程序员思想,和水平的提高

  10. 卢达 says:

    对业余变成学习者来说,尽快地解决实际问题,才是最有吸引力的。至于大家说的提高水平、降低耦合,他们都不会感兴趣的。

  11. hbwhypw says:

    “语言的选择并不重要,重要的是培养编程思想。”你这句评语,给这篇文章增色不少!
    最近,埋头钻javascript,发觉它很有趣。它可以写得面向过程,同样可以面向对象,还可以面向函数,三种思想共同存在。当三种编程思想能够熟练掌握的时候,我们就可以根据实际需要,来灵活运用这些编程思想,不再受编程语言、编程思想的束缚自由地编写想要的程序了。我虽然达到那种程度,还为时尚早,但是那种憧憬着实令人兴奋。
    对新手应不应该用python,真的是因人而异。python简洁,但不简单,同样存在着较难掌握的部分。

  12. ricol says:

    一派胡言!

发表评论

电子邮件地址不会被公开。 必填项已用*标注