`
yangyi
  • 浏览: 115723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编程的6个原则

    博客分类:
  • SE
阅读更多

原作:Joseph Ottinger, 来自近日的theServerSide,本文是译文。

原作网址:http://www.theserverside.com/news/thread.tss?thread_id=42598


Empathy Box在blog中介绍了编程应该注意的5个问题,这篇文章实际表述了编程时应引起注意的很重要的6个思想:


快速失败;写更少的代码(不要让自己重复);程序是写给人看的;做正确的事情;消减状态;了解你的“创造”

(fail fast, write less code (and don't repeat yourself), computer programs are for people, do the right thing, reduce state, and know your 'stuff.')


快速失败:当程序出现问题时,产生大的、可见的、不可忽视的异常。以防止不明显的bug一遍遍逃过QA的检查。把隐藏在深处的问题暴露出来。


写更少的代码(似乎是理所当然的):去除冗余,即把程序所要解决的问题展示得更加清晰、明了。


程序是写给人看的:即“学识编程”(Literate Programming),我们程序的读者是其他的人而不是编译器。我们知道c/java/lisp/haskell这些编程语言并不比简单的汇编更加强大,之所以我们使用它们,是因为它们的表述更加清晰,更不容易范些低级的错误。没有任何一个程序能做到只能用一种书写,而不能用另一种,而且,这些语句,最终都要被翻译成机器指令(有些在运行期,有些在编译期,不过都不重要),如此说来,我们使用高级程序设计语言的唯一理由就是——和人进行交流。Don Knuth写下了这个想法,并把它命名为“Literate Programming”,他还设计了一个叫WEB的系统,他的想法非常出色,但他的实现却很糟糕。他的想法是:在程序中加入一篇说明程序是如何运行的的文章。


做正确的事情:实际编程去让正确的程序去做正确的事情,而不是写一个看似正常工作程序。
我知道最佳的解决方案,但需要改变许多东西。在我的经验里,经常有让你做错误事情的机会:计划、经理、合作者,甚至是参与到项目中来的客户,这些群体都想尽快看到你的可以工作的程序,他们并不关系你是如何写这些程序的。但除了事实上写这些程序的程序员外,没有人知道,在编码过程中所作的权衡、割舍。然后隐藏在代码背后的问题就会像圣诞节的幽灵一样以P0 bugs的形式出现(P0 bug:致命缺陷——译者注)。最终,我不得不顶着上面巨大的压力,带给公司更多的花费。让早就该做好的程序去做正确的事情。


消减状态:即简化代码,尤其要注意并发的情况,这时会出现如:x.equals(x)这样的奇怪代码,而且在一些特殊的情况下会返回false,当然,这取决于x.equals(Object)是怎样编码的。


了解你的“创造”:正如可工作的解决方案总是你尝试的最后一个解决方案一样,无法诊断的bug总是存在于你还不了解的软件层中。你必须去了解直接包裹在你代码周围的那些层——对于大多数程序员来说,这可能意味着要从操作系统开始。如果你从事底层编程,你很可能还要了解一些计算机体系结构。但这个观点比直接找到隐藏的bug要大,主要用来清除那些不易解决的问题,一个了解操作系统内核的人,一定有能力去解决他们遇到的绝大多数问题。

分享到:
评论

相关推荐

    Java并发编程设计原则和模式

    本资料“Java并发编程设计原则和模式”深入探讨了如何在Java环境中有效地进行并发处理,以充分利用系统资源并避免潜在的并发问题。 一、并发编程基础 并发是指两个或多个操作在同一时间段内执行,但并不意味着这些...

    Java并发编程_设计原则和模式(CHM)

    本资源"Java并发编程_设计原则和模式(CHM)"聚焦于Java语言在并发环境下的编程技巧、设计原则以及最佳实践模式。 一、并发编程基础 并发编程涉及多个执行单元同时运行,这些单元可能是线程或进程。在Java中,主要...

    Java并发编程:设计原则与模式(第二版)-3

    6. **原子性操作与CAS**:Java提供了一组原子变量类(AtomicInteger、AtomicLong等)和Unsafe类,它们支持无锁编程和CAS(Compare and Swap)操作,用于实现高效且线程安全的更新操作。 7. **并发异常处理**:书中...

    中小学编程教学与Python编程语言教学:理念、原则与策略.pdf

    在这一背景下,专家和教育工作者对编程教学的理念、原则与策略进行了深入探讨。 首先,编程教育不仅仅是教授编程技能,更是培养学生解决问题的能力,这一点在中小学阶段尤为重要。编程教育的核心目的之一是培养学生...

    华为规范化编程,很好的编程原则.pdf

    华为规范化编程的编程原则 华为规范化编程的编程原则是指在软件开发过程中,为了提高代码的可读性、可维护性和可靠性,而制定的编程规则和规范。这些规则和规范旨在使代码更加简洁、易读、易维护和高效。 1. 排版 ...

    Java并发编程设计原则与模式.pdf

    《Java并发编程设计原则与模式》是Java并发编程领域的一部经典著作,作者Doug Lea在并发编程领域有着深厚的造诣。这本书详细介绍了如何在Java环境中有效地设计和实现并发程序,涵盖了众多关键概念、设计原则和实用...

    一本经典的多线程书籍 Java并发编程 设计原则与模式 第二版 (英文原版)

    《Java并发编程 设计原则与模式 第二版》是一本深受程序员喜爱的经典书籍,由Addison Wesley出版。这本书深入探讨了Java平台上的多线程编程技术,为开发者提供了丰富的设计原则和模式,帮助他们理解和解决并发环境中...

    编程规范与原则

    文档中列举了多个理由,强调了编程规范的重要性: 1. **代码质量**:高质量的代码是优秀信息技术产品的基础,而遵守编程规范则是实现高质量代码的第一步。 2. **软件维护成本**:软件在其整个生命周期内的维护成本...

    设计模式六大原则

    ### 设计模式六大原则详解 #### 一、开闭原则(Open-Closed Principle) **含义:** 开闭原则强调的是“对扩展开放,对修改关闭”。这意味着系统的设计应该是灵活的,能够轻松地添加新的功能而不需要修改现有代码...

    面向对象编程的设计原则详述

    面向对象编程设计原则是软件开发中的核心指导思想,旨在提高软件的可维护性和可复用性。以下是对这些原则的详细解释: 1. **单一职责原则(SRP)**:该原则指出,一个类或模块应只有一个明确的责任或变更的原因。这...

    PLC编程的基本原则收集.pdf

    然而,我可以根据【标题】和【描述】中的“PLC编程的基本原则”来生成相关知识点。 PLC编程,即可编程逻辑控制器编程,是一种在自动化领域广泛使用的程序设计。它涉及一系列的基本原则,这些原则对于保证控制系统...

    嵌入式系统C语言编程需要遵守什么样的原则

    嵌入式系统C语言编程是一种在资源受限的硬件平台上进行软件开发的实践,它要求程序员不仅要掌握C语言的基本知识,还要遵循一系列特定的原则和最佳实践,以确保开发的嵌入式程序运行稳定、效率高,同时易于维护和扩展...

    可编程控制器PLC通用编程原则

    6. **模块化设计**:将复杂的控制逻辑拆分成独立的模块,每个模块负责特定的任务,方便重用和测试。 7. **程序的可扩展性**:设计程序时应考虑未来可能的扩展需求,确保添加新功能时不会对现有结构造成过大影响。 ...

    解读极限编程的十二大原则

    本文将详细解读极限编程的十二大原则,这些原则有助于提高开发团队的效率,确保软件质量和适应性。 1. **计划的制定**:在极限编程中,计划不是一次性的,而是持续的过程。项目规模、功能优先级、版本发布日期应随...

    PLC梯形图编程基本原则.doc

    以下是PLC梯形图编程的七个基本原则: 1. 外部输入/输出继电器、内部继电器、定时器、计数器等软器件的逻辑触点可以多次重复使用,无需用复杂的程序结构来减少触点的使用次数。 在梯形图中,逻辑触点可以重复使用...

    程序员编程艺术系列之程序员编程艺术

    6. **并发编程**:随着多核处理器的普及,并发编程变得越来越重要。书中可能讲解线程安全、锁机制、异步编程模型等并发编程的核心概念。 7. **软件工程**:编程不仅是技术活,也是项目管理的过程。书中可能会涉及...

    设计模式六大原则与类的六种关系

    六大原则分别是:单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则和开闭原则。 1. 单一职责原则(Single Responsibility Principle) 单一职责原则是指一个类只负责一项职责。问题来源于类 T...

    Java 并发编程:设计原则与模式

    6. **线程局部变量(ThreadLocal)**:为每个线程提供独立的变量副本,避免共享状态引起的并发问题。 在实际编程中,我们还需要关注并发工具类,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,...

Global site tag (gtag.js) - Google Analytics