去年年末,为我所在的技术团队编写了Java编码规范。其执行过程还算顺利,因为团队不大,并且大家都希望能够有这么一个可供参考的东西。但是在我与其他的团队交流的时候,有些程序员却跟我道出了不同的意见。现在我摘出几条:
1、团队应该在设计上追求一致,比如一致的业务逻辑、一致的算法,但是在编码风格上应该带有些个人色彩,否则就没有乐趣了。
2、我们每天都有那么多东西约束我们,比如:上下班要打卡,工作任务即使加班也要按时完成,涨工资不随心愿,头头并不能理解我的愿望和思想等等。为什么还要在编码风格这么小的事情上进行约束呢?
3、开发团队里规范太多了,连编码规范都要统一么?开发组长和技术经理就不应该过多的干涉细节,这样还让我们怎样工作?
听到这些言语,我很感叹,因为我曾经也有过类似的想法。但是我现在想说的是:
1、我们是一个团队,需要协作、需要共事。项目开发的工作并不是一起玩过家家,更不是一个人自娱自乐。一个标准的编码规范,有利于团队的协作,包括代码共享、交互学习、结对编程、交叉测试、代码审查等等,更有利于提高大家的工作效率和团队精神。它就像实现模式一样让大家不必为细小的琐事而浪费精力,直接按照经过检验的惯例来做。它更像设计模式一样,使大家有一个共同的参考,共同的标准做法。
2、人活在世上,除非有能力和勇气做一个独一无二的、创造历史的牛人,否则就需要遵守社会国家、家庭、公司、团队的各种规范和制度。但即使是上述的那种牛人也是需要先虚心学习、融入环境,而后才能去创造历史。所以,我认为一个组织是需要它自己的规矩的,它的合理与否可以经过商榷和探讨,但是它的存在必要性是可以完全肯定的。我相信,一个希望和团队一起共事、有团队精神的成员是不会对一般性的规范和制度产生质疑的。
3、就开发工作而言,我所提倡的是:编码风格的统一,设计风格的自由。每一个项目的设计理念和架构是需要项目技术负责人自己去把控的,只有这样才能让大家真正的思考怎样才能做好软件设计,这样才能让大家真正的在项目中获得经验和锻炼。然而,对于编码的风格、父包命名规则、缩进规定等等这类细小的地方不需要、也不值得让每个程序员去费心选择,这既不利于工作重点的明确也不利于代码可读性的提高。
4、其实,从实现模式和设计模式的概念中,我们可以映射出编码风格统一和设计风格自由的真正含义。
实现模式,是一些久经历史验证的一些惯例和原则。虽然可以根据具体的情况进行调整,但是大多数情况下它已经成为了大多数开发者们的习惯性行为。毫无理由的改变,就意味着在交互和沟通过程中需要花费额外精力去解释和理解。编码规范就类似于实现模式。
设计模式,也同样是业界精英们总结出来的好的设计方法。然而,每个项目都有它的特殊性和独立性。我们需要根据项目需要来做出我们的设计,教科书似的完全照搬设计模式并没有什么好处。我很少看到完全照搬的代码能够成为一个好的设计。好的设计是什么?我认为,好的设计是开发者根据实际要处理的问题,选择、组合、演化、应用众多设计方法和技巧,在满足各类客观指标的情况下,构建出高效灵活的解决方案实现。注意,我这里说的并不是在一个类中所运用的那一小块模式代码,而是至少针对于模块的系统化设计。设计的自由开放是为了什么,这就是原因,根据问题求解,发挥出我们的生产力和创造力,构建出优秀的解决方案。
以上的所有,欢迎大家共同探讨和合理拍砖。
附件中有文章中提到的我先前编写的《Java编码参考规范》,仅供参考。当然也希望大家对其中的细节提出自己的建议和意见。
本文出自 “Hyper Mind” 博客,请务必保留此出处http://freej.blog.51cto.com/235241/282424
分享到:
相关推荐
标题中的“USB UVC协议文档,包括1.0、1.1、1.5版本”意味着我们将探讨这三个主要的UVC规范迭代。每个版本都可能引入新的功能、改进或修正前一版本的问题。让我们逐一深入了解这些版本的要点: 1. **UVC 1.0**:这...
### C/C++编程规范V1.0:深入解析与应用指南 #### 文件结构与文档管理 C/C++编程规范V1.0详细规定了文件结构的重要性及其构成元素,旨在提升代码的可读性和维护性。文件结构部分主要涵盖版权与版本声明、头文件和...
这份文档由codekitten编写,版本号为1.0,自2007年草创至2008年正式发布,经过精心修订和完善,融入了V-Spirit规范的精神,力求在软件工程实践中提升代码质量和可维护性。 ### 文件结构与组织 文档首先介绍了文件...
《Java编程规范1.0》是一份详细的指南,旨在帮助Java开发者遵循一套统一的编码标准,提高代码质量,增强团队协作效率。这份规范涵盖了命名规则、注释规范、类与对象设计、接口与抽象类、异常处理、并发编程等多个...
本文将深入探讨UAC1.0和UAC2.0两个标准,帮助开发者理解和应用USB音频设备的通信规则。 **UAC1.0标准** UAC1.0是USB音频设备的第一个官方标准,于1998年发布。这个版本主要关注基本的音频流传输和控制,支持模拟...
让我们深入探讨一下编码转换的相关知识点。 1. **字符编码**:字符编码是用来表示文本字符的数字代码,如ASCII、Unicode(包括UTF-8、UTF-16等)和GB2312等。不同的编码体系对应不同的字符集和字节序列,这可能导致...
**Magento组件和编码风格**:提供了关于Magento编码规范的一些建议。 #### 附录B:Magento最佳实践 **概述**:概述了在开发Magento扩展时应该遵循的最佳实践,包括性能优化、安全性考虑等方面。 **扩展结构和配置...
在本文中,我们将深入探讨TuTu1.0的特点、功能以及如何有效地利用这款工具进行C语言编程。 一、TuTu1.0的核心特性 1. 界面友好:TuTu1.0以其简洁明了的用户界面著称,无论是初学者还是经验丰富的开发者,都能快速...
- **实体和字符引用的展开(非标准)**:探讨了实体引用如何在文档中展开。 - **确定型内容模型(非标准)**:提供了有关确定型内容模型的信息。 - **字符编码的自动检测(非标准)**:讨论了自动检测字符编码的...
《Symbian OS编码规范:深入理解C++版本1.0》 Symbian OS作为移动设备操作系统领域的先驱,在其发展过程中积累了丰富的经验和教训,其中《Symbian OS编码规范在C++》(版本1.0)是针对C++编程语言在Symbian平台上的...
作为一个稳定的文档,它可以作为参考材料或作为其他文档中的规范引用。W3C 的角色在于提高人们对规范的认识并促进其在 Web 上的广泛应用,从而增强 Web 的功能性和互操作性。 #### 三、XML 1.0 规范的详细内容 **1...
《JAVA编程规范v1.0.doc》文档旨在为遵循J2EE标准的项目提供一套全面的编码准则,同时也适用于其他Java项目作为参考。本文将基于提供的文档片段,深入探讨其中的关键概念和技术建议。 #### 二、设计类和方法的原则 ...
此文档是关于PCI Express(简称PCIe)1.0a版本的规范。PCIe是一种高速串行计算机扩展总线标准,旨在取代AGP(加速图形端口)和PCI(外围组件互连)。此版本的规范主要更新了之前的错误,并加入了一些新的特性。 ###...
LightNotepad V1.0主要针对的是ASCII和Unicode编码的TXT文档。ASCII编码,全称美国标准信息交换代码,是最基础的字符编码系统,包含了英文、数字以及一些特殊符号。而Unicode编码,又称万国码,是一个更为广泛且包容...
在学习PCIe 4.0时,参考《PCI_Express_Base_4.0r1.0.pdf》这份文档是至关重要的。这份规格书详细阐述了PCIe 4.0的架构、协议、电气特性、功能特性以及兼容性等方面的内容。通过阅读这份文档,不仅可以了解PCIe 4.0的...
《深入解析MPlayer-1.0rc2:在Linux与ARM平台的应用》 MPlayer-1.0rc2是一款在Linux环境下广泛使用的开源媒体播放器,它的源代码提供了丰富的功能和高度的可定制性,使其成为开发者研究和移植多媒体播放器的理想...
YY Web网页协议V1.0可能会提供清晰的文档、易于理解的API和丰富的开发工具,以便开发者快速上手并实现功能。 在实际应用中,YY Web网页协议V1.0可能广泛应用于实时聊天、在线游戏、视频直播等对实时性和性能要求较...
### 关于用Oracle的DBMS_XMLDOM导出XML文档编码格式UTF-8的问题总结 在处理Oracle数据库中使用DBMS_XMLDOM模块创建并导出XML文档时,经常会遇到有关文档编码格式的问题,尤其是如何确保导出的XML文档采用UTF-8编码...
本主题将深入探讨如何编写简单的HTTP 1.0客户端和服务器程序,这对于理解网络通信机制和开发相关应用至关重要。 HTTP 1.0是HTTP协议的第一个正式版本,它定义了客户端(如浏览器)与服务器之间交换数据的基本规则。...