[介绍]
本文将对本人在程序设计方面的一些思考,逐步罗列在这里。
note: 此类文章/书籍,多如牛毛。对比它们,本文并不会出现什么新的概念、思路,都是人家说过的,总结过的。如有侵权,请指出,我将给出引用。
note: 它是我在工作中的一些问题/思考总结,附上一些实际的例子(经历过才更有感触)
note::“想的太多,行动太少” 是大忌. 如果你觉得一些东西对你有帮助,请行动起来,应用到你的code里面去
*. 你知道你的程序的运行行为
当写完一段程序的时候,你应该对该程序非常了解,充满信心
-输入,输出 - 这个肯定都知道
-错误情况,会发生什么,如runtime exception, checked expection
-性能咋样
-对其他系统/lib的依赖,即使你不了解那些依赖的系统,请非常清楚接口!
看过一个歪果仁写的文章,他要了解系统从上到下的所有细节,才能充满信心。譬如在写web程序时,他会把ngnix,tomcat之类的源码翻一翻。抱歉,忘了他的名字。
非常能体会他的感触,不过他这个是极端的例子。如果我们都能深入最根本/底层最好,但是项目上可没这个时间。起码,我们确信一些基本的东西。
note: 本条放在最前面,是因为我见过太多的反面例子!! 如果你见的不多,那么1) 你身边高手如云,约么?:) OR 2)上面我没有表达清楚 OR 3) 你没深入去想
* 减少调用层次
a->b->c->d->e->f->g->h->i->j->k->l->m-n
调用层次太深,极大增加程序后期维护成本,以及出问题时trouble shooting将比较困难。
读浅调用层次的代码,会有一种感激代码作者的感觉
note: 如果我们引用的第三方的jar包,那么jar包的作者他自己负责其程序的复杂性。我们只要看我们程序到达调用该jar文件的深度就可以了。
例子: java NIO中JNI中的调用就减少了调用层次。对于如下IO中的RandomAccessFile.read() 和 NIO 的FileChannel.read. JNI程序在NIO中大大简化,两步就调用的kernel IO.
IO call stack - 5 levels after JNI to reach kernel IO
read() of RandomAccessFile and FileInputSteam
JNI -> readSingle(io_util.c)-> IO_Read(io_util_md.h)->JVM_Read(jvm.cpp) -> os::restartable_read(os_solaris.cpp)->Kernel ::read
NIO call stack - only 2 level under JNI to reach kernal IO
read() of FileChannel
read(ByteBuffer dst) (FileChannelImpl.java) -> IOUtil.read(IOUtil.java) -> IOUtil.readIntoNativeBuffer -> read(FileDispatcher.java) -> JNI FileDispatcher.read0/pread0 ->kernel ::read, ::pread64
例子:一个反面的例子就是JDK URL.hashcode()最终给出了相当相当深的调用栈
此文http://winnerbao.iteye.com/admin/blogs/2218624中给出了调用栈
http://dl2.iteye.com/upload/attachment/0109/4213/79904add-47c7-3037-853a-ae010764b9d1.png
* 减少线程
这已经是一个基本的共识了,这里我给出几个例子
它不仅简化程序,而且提高性能。
note: 不要较真:简单,但不能太简单
例子: LMAX Discruptor
一个非常牛X的高性能框架,它的核心之一就是单线程。
例子: Coral 8
一个CEP(负责事件处理)引擎,它的核心之一,也是单线程。如果你追求高性能,请考虑单线程。
* 不要预留扩展接口或者扩展功能,除非真的必要
什么是真的必要? 就是“你觉得必要” 。我又在讲废话了!
工作中,经常听到这样的说法:我这样做一些扩展,以后如果有客户/其他人想使用XX功能,我们就可以非常方便的扩展我们的程序,甚至只要改一下配置就可以了。
这是真的么?这是真的么?这是真的么? 三遍
原则:保持程序简洁性,使得其在遇到真正的需求时,容易调整。而不是臆测一些需求。
note:我不排斥增加一个可能变化的功能。相反,我经常这样做。但是每次我都觉得自己有充足的理由。我知道:你也是!
note:本条比其他条目更加主观。多做项目,踩更多的坑就会增长这方面的能力 :)
[待续]
====下面这些内容放在这里并不合适,发现合适的地方以后移走====
1. 几个月以后,回头看你的程序/设计/任何成果,一般会发现自己当时做的好烂
好消息,你成长了
如果你发现自己当时已经做的很好了,大神,认识一下?我的QQ: 35=131=698
2. "慢慢干,比较快"
体会吧
相关推荐
程序设计基本原则 程序设计基本原则是软件开发中非常重要的一部分,它可以帮助开发者编写高质量的代码,提高代码的可读性、可维护性和可扩展性。以下是程序设计基本原则的详细说明: 1. Do not repeat yourself ...
### 程序设计的七大原则详解 #### 一、开-闭原则 (Open-Closed Principle, OCP) 开-闭原则是面向对象设计中最基本的原则之一,它强调软件实体应该对扩展开放,对修改关闭。这意味着在设计一个模块时,应该能够让它...
最后,对于给定的程序设计方法学试题,解答涵盖了从基本概念、原则到具体编程语言特性的多个方面,这些都是学习和掌握程序设计方法学的重要知识点。通过这样的试题,学生可以巩固和深化对程序设计的理解,提高编程...
### 程序界面设计的基本原则 在软件开发过程中,用户界面(User Interface,简称UI)设计是一项至关重要的任务。良好的界面设计不仅能够提升用户体验,还能有效提高产品的市场竞争力。本文将详细介绍界面设计中的五...
本篇文章将详细探讨面向对象设计的基本原则,这些原则对于创建可维护、可扩展且易于理解的代码至关重要。 1. **单一职责原则 (Single Responsibility Principle, SRP)** - 这个原则指出,一个类应该只有一个引起它...
此外,书中还涉及到了程序设计的风格和实践,Knuth强调了代码的可读性和可维护性,这是软件工程中的重要原则。他还提倡程序员要有严谨的态度,对每一个细节都要有深入的理解和把握,这与他的名言"Premature ...
《面向对象程序设计JAVA语言程序设计》涵盖了 Java 语言的基础知识点、设计原则、编程风格、多线程和并发、网络和 Web 编程、异常处理、安全和可靠性、Applet 和应用程序、设计模式、测试和调试等多方面的内容。
- **逻辑结构清晰**:程序设计应遵循结构化原则,逻辑清晰,便于理解和维护。 - **高效的资源利用**:优化算法以减少计算时间和内存消耗,减少内外存之间的数据交换。 - **正确的数学模型**:采用正确的数学模型和...
为了保证PLC系统的长期安全、稳定运行,设计时还需要考虑系统设计、元器件选择和软件编程的可靠性,确保程序在各种正常或异常情况下都能正常工作。 其次,PLC控制系统设计应确保系统的安全可靠。这包括在系统设计...
通过阅读这套书籍,读者可以了解到算法设计的基本原则、数据结构的巧妙运用以及在实际编程中的应用。虽然书中的内容可能对初学者来说有些难度,但对于希望提升编程技能和深化理论知识的专业人士来说,无疑是一份宝贵...
本文将对数据采集系统设计的基本原则和方法进行详细的解释。 一、数据采集系统设计的基本原则 1. 硬件设计的基本原则 在数据采集系统设计中,硬件设计的基本原则是确保系统的性能和可靠性。在选择硬件时,需要...
实验目的:通过该实验,学生将了解安全程序设计的基本概念和原则,掌握安全程序设计的基本方法和技术,具备安全程序设计的基本技能。 实验类型:实验室实验 实验基本要求: * 掌握安全程序设计的基本概念和原则 *...
通过课程设计,学生将学习如何设计可以运行基本机器指令的微程序,并掌握微程序设计的基本原则和方法。 微程序设计是计算机组成原理的核心内容之一。微程序是计算机中的一种低级程序,它控制着机器指令的执行过程。...
程序设计原则是一系列指导程序员如何编写高质量代码的规则,比如SOLID原则(单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖倒置原则),遵循这些原则可以帮助开发者编写出更易于维护和扩展的代码。...
企业理念设计的基本原则与程序.doc
C++程序设计是一门广泛使用的现代计算机语言,它的设计原则包括支持面向过程、基于对象和面向对象的程序设计方法。由谭浩强教授编写的《C++程序设计》一书,以ANSI C++标准为基础,深入浅出地引导读者从标准C++编程...
学生需要了解面向对象程序设计的基本概念和原则,如类和对象、继承、多态性等。 2. C++ 语言的基础知识 C++ 语言是面向对象程序设计的主要实现语言,学生需要了解 C++ 语言的基础知识,如变量、数据类型、运算符、...
此外,本书还介绍了另一种风格的计算机网络程序设计方法:VMS系统下的DECnet网络程序设计的基本原理和方法。各章附有大量习题,可供上机练习。 本教程由高等院校具有丰富教学和开发经验的一线教师精心设计和撰写,在...