我曾经得到的一个最好的编程建议

转帖自:http://news.csdn.net/a/20111128/308199.html
原作者:Travis Griggs
译文来自:伯乐在线
原文来自:Objology
多年以前(早在1992年),我加入了这个疯狂的skunkworks项目,这个项目使用的是他们叫做Smalltalk的另类程序语言。“面向对象”作为一个“热门”项目才刚刚起步。作为“面向对象”的顾问,报酬非常可观。很多人自以为这就是新的对象派别的全部内容。直到5年前,Alan Kay发表了“我发明了‘面向对象编程’这个术语,但{Java和C++}跟我所知道的有所不同”的言论。(“I invented the term ‘Object Oriented Programming’ and this {Java and C++} is not what I had in mind.”)
在加入这个奇特的小组,使用这种奇怪的编程语言不久之后,我依然对实例变量、类变量、类实例变量之间的差别感到困惑。我参加了来自ParcPlace的Russ Pencin的培训课程。他说了一些当时我很不喜欢的东西。尽管不明白金玉良言当中的要点,但我还是努力跟上进度。这需要多年的经验才能渐渐体会其中的价值。建议的内容是:
不要使用‘er’结尾的对象(Don’t make objects that end with ‘er’.)
没错。面向对象编程(OOP)的模式在我们称之为“程序化编程”的文化当中活力十足。现在我们没有过多地谈论这两种模式之间的对比。也许一部分是因为面向对象语言现在俯拾即是。面向对象编程流派,在众多派别中脱颖而出。可惜的是,我经常回想起我在2000年左右听过Adele Goldberg的演讲:“现在我们有很多面向对象编程技术,但就没有那么多面向对象编程的程序员”。假如我有一个建议想转告给一群有志成为面向对象程序员的人,那应该是Russ提供的一句金玉良言:“不要使用‘er’结尾的对象。”
这名字到底意味着什么呢?为什么值得人们对它如此兴奋?多年以后我发现,面向对象编程的精髓在于将行为绑定在数据上。在你还没成为他们无归属组织的重要一员时,程序就还是由行为和数据构成。在典型的结构化程序设计之中,我们将精力集中在行为(动词)上,然后弄清楚我们需要哪些数据(名词)才能执行。总而言之,我们将数据绑定在行为上。但在面向对象程序设计之中,我们将程序的中心用名词和数据表示,然后弄清楚我们要将哪些行为绑定在他们之上,希望这些我们想要解决的问题能够在突发的行为中得到答案。
最近我觉得有一个更好的名字来形容一位同事差不多都插手过的每一个“er”对象例子。
给例子起一个更好的名字会让设计更加具有独立性,代码的关联性更少,总之,更加面向对象。这不是硬性规定,不过这会让很多例子得到改善。
就拿某种“装载程序模块”来说吧,重点在于它的工作单元。模块有许多实例变量,参数,也许还有很多到处传输的数据。如今,取而代之的是LoadRecord和LoadStream。我有理由相信,你们最终使用的工具,更类似于面向对象编程创始人心中设想的模样。我们想要创造可以描述的对象,然后将某些行为绑定在它上面,而不是将焦点集中在它的行为上,然后弄清楚他们的行为需要哪些数据。
某些以前学过的用er结尾的对象已经绝迹多年
管理者(Manager)——每当我遇到一位管理者时,我就会感到担忧。大家没有跟我说它的含义,却早早地告诉我它的职能。它是注册表吗?那就叫它注册表吧。是历史记录还是日志?就那样称呼吧。是工厂吗?就那样称呼吧。
控制器(Controller)——我在过去20年内只做过一个上等的控制器对象,它是一个象征着现实世界对象的BallastVoltageController接口。事实上,世界上每一个简单MVC的执行与控制器的不同作用本应告诉我们这个构想相当协调的事情。
组织者(Organizer以及许多类似的团体)——焦点在于他们的职能。这是一个用来说明让众多这种‘ers’对象转化为组织极其简单的不错例子。就把它们称为组织吧。现在我们来关注它们的内容。
分析器/渲染器/(Analyzer/Renderer)/等等——“劳动者”对象中定义清晰的例子。假设它们是用来分析/渲染/等等。
生成器/加载器/阅读器/编写器/(Builder/Loader/Reader/Writer/)等等——把焦点从被操控的对象身上挪开,它们自身往往承担着重大的责任。
这样一条路线规则也会有很多例外
有许多以‘er’结尾的名词。注册表、边框、字母、数字。如果真的是一个名词的话,那就好了。
有很多‘er’结尾的单词,尽管重点在于它们的行为上,也变得很常见了,所以我们最好至少在一定程度上维持这种情况。分部程序,编译器,浏览器。
当你试图建立一个以‘er’结尾的域对象模型时,我可以拿比较熟悉的人员管理域作例子,它可以提升个人素质,使人具有管理行为。
你的经历可能会有所不同,我相信有很多人持反对意见。直到你适应了这种心态一段时间之后,你才能真正体会到。为你的项目/设计提供一个回旋的余地,看看会发生什么。
译文来自:伯乐在线
原文来自:Objology
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很高兴看到你有兴趣学习编程。在学习编程的过程中,我有以下一些建议: 1. 首先,选择一种适合你的编程语言。如果你不确定从何处开始,可以考虑学习 Python,因为它是一种流行的语言,适用于许多不同的领域。 2. 找到一本好的入门书籍或在线课程来帮助你开始学习。有许多优秀的免费资源可供选择,例如 Codecademy 和 Coursera。 3. 尝试练习编程,并尝试解决一些编程问题。这样可以帮助你更好地理解所学的知识,并且能更好地应用到实际问题中。 4. 寻找一些社区或者在线社区,例如 Stack Overflow,来获得帮助和支持。在这些社区中,你可以得到其他程序员的帮助,并且还可以学习其他人如何解决问题。 5. 不要害怕犯错误。编程是一个学习过程,并且错误是难免的。通过尝试、学习和练习,你将会不断进步。 ### 回答2: 学习编程是一个有趣且具有挑战的过程。以下是一些建议,帮助你在学习编程时取得良好的进展: 1. 选择合适的编程语言:根据自己的兴趣和目标,选择一种适合初学者的编程语言,如Python或JavaScript。这些语言易于学习和理解。 2. 找到合适的学习资源:有很多免费的在线课程、教程和编程资源可供选择。例如,Codecademy、Coursera和W3Schools等网站都提供广泛的编程教学材料。 3. 注重实践:理论学习很重要,但实践是真正提高编程技能的关键。尝试编写自己的代码,并挑战自己解决实际问题。参与开源项目或编程竞赛也是提高技能的良好机会。 4. 寻找编程导师或导师团队:与有经验的编程导师合作,可以获得更系统的指导和反馈。同时,加入编程社区,与其他学习者分享经验和交流学习资源。 5. 解决问题的能力:编程涉及解决问题的能力。当遇到困难或错误时,不要灰心丧气,学会利用搜索引擎和在线论坛等资源解决问题。 6. 坚持学习和练习:编程需要持续的学习和练习。设定明确的学习目标,并定期回顾和巩固知识。 7. 尝试不同的项目:通过尝试不同类型的编程项目,如网站开发、数据分析或游戏设计,来提高技能并拓宽视野。 8. 关注最新的技术趋势:编程领域发展迅速,关注最新的技术趋势和行业需求,以便在就业市场上有竞争力。 总之,这是一个需要耐心和毅力的学习过程。通过不断学习和实践,你将逐渐掌握编程技能,实现你的学习目标。 ### 回答3: 学习编程是一项非常有前景和有趣的技能。以下是一些建议帮助你开始学习编程: 1. 确定学习目标:编程是非常广泛的领域,从网站开发到人工智能都有涉及。了解你想学习的编程类型,并设置明确的学习目标。 2. 选择合适的编程语言:编程语言有很多种,如Python、Java、C++等。了解每种语言的特点和适用场景,选择一种适合初学者的语言作为入门。 3. 找到优质学习资源:可以通过在线教程、编程书籍、视频教程等方式学习编程。选择易于理解且系统的教材,跟随教程进行实践,以加深对编程概念的理解。 4. 参与编程社区:加入编程社区可以与其他开发者交流经验、解决问题,还可以从他们的经验中学习。可以在论坛、社交媒体上寻找与你学习编程类似的人群,并积极参与讨论。 5. 实践项目:通过实际项目锻炼编程技能。从简单的小项目开始,逐渐挑战更复杂的项目。实际的编程练习可以加深对编程知识的理解,并提高解决问题的能力。 6. 坚持学习:编程是一项需要持续学习和实践的技能,不要气馁。每天保持一定的学习时间,保持兴趣和动力。 7. 寻求帮助:学习编程过程中可能会遇到困难和问题,及时寻求帮助是很重要的。可以寻找导师、同学或在线论坛等寻求解答。 最重要的是,保持热情和积极的态度。编程是一个迭代的过程,初学者可能会遇到困难,但只要坚持下去,就能突破难关,逐渐掌握编程技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值