编码

标签: IT项目管理 | 发表时间:2013-08-13 19:38 | 作者:人月神话
出处:http://blog.sina.com.cn/cmmi
前面谈需求,架构和设计都比较多,今天谈一下编码方面的内容,做一个好的程序员不容易,很多时候不是体现在需求和架构能力的缺少上面,更多的是体现在最基础的编码和实现能力的不足上面。

编码是一个技术活,需要大量的脑力活动,但是很多人确可以把编码做为一个体力活,我在这里想继续强调的是如果编码是一个完全的重复体力劳动的话,那么所有工作就一定是可以自动化掉的,在这个时候你原来所有的工作没有任何的价值体现而被完全替代。对于任何从事编码工作的,如果仅仅认为自己的工作是大量粘贴拷贝下重复的体力劳动下的码农的话,至少说明你已经不适合做一个程序员,更加不可能成为一个优秀的程序员。

很多时候不是别人把你发展的路堵了,而是自我思维的约束,安于现状,没有一种探寻精神,对未知世界的强烈的求知欲望把你自己的路堵死了。态度是一方面,但是更加重要的是思维意识的转变。现在即使做一个农民都要考虑这一季如何避开竞争选择种植物,如何考虑成本效益产出,如何科学管理提高亩产量,作为一个体面的知识工作者的程序员,更加没有任何理由让自己陷入一种简单重复的体力活。只有当你意识到该懒的时候需要懒,该自动化时候需要自动化的时候,你才可能逐步有抽象和复用的意识,逐步能够真正驾驭你手里面的工具和技术,而不是被工具领着鼻子走。

源代码就是设计,并不是说我们在软件实现过程中没有需求和设计环节,只是更加重点的再强调最终交付的产物源代码无处不再体现着你思考的逻辑性,设计的思路。一个再好的设计文档有的人也可以写出让你连Review一下都没有欲望的垃圾代码。一个没有任何文档介绍的开源软件源代码,往往可以让你读得拍手叫好,快速的梳理出内在的逻辑结构。

软件工程学角度始终都在找寻一种方法来实现代码部分的工作完全自动化,包括MDA模型驱动架构方法,各种快速的开发平台和建模平台。这对于一些模式固定的工单流程类应用可能适合,但是真正对于大型业务系统能够用起来的确相当少。几年前我们就在做快速的开发平台,包括界面建模,数据建模,流程建模,规则建模各个方面的设计和实现。但是最后我们发现,为了实现更加复杂的场景我们引入了支持各种脚本语句,在引入了这个功能后发现,后续大量的复杂内容都需要通过脚本语句来实现,最终的编码部分内容又绕了一圈回到了脚本语句里面。这种大面积的脚本语句的维护和管理反而比原来更加困难。

编码没有速成,需要的是只有不断的练习和积累,对于各种类型的技术和设计思想的实践练习,到最后你就发现所有的技术最终万法归一,触类旁通。在这个过程中还不仅仅是量的积累,更多的是量变到质变的转化。一个程序员如果长年累月都是拿来主义,都是粘贴拷贝,都是不断的做着增删改查的单功能点,那么时间再长也就那个水平。所以这实践里面更加重要的设计思想的消化,自动化和复用的意识,逐步对归纳后抽象的理解等,这些往往才是能否成为一个高水平的程序员的关键。各种的软件技术类培训结构和学校,好像再告诉我们做一个编码人员如此的简单,在这里没有复杂的数据结构,没有算法,只有增删改查的一个个功能点。培训机构在一批批的按标准模式生产着代码工人,但是只有少数人能够真正成为一个合格的程序员。

我们需要写出具有良好可读性的代码,代码的可读性不是体现在大量的注释上,而是体现在代码本身的自解释上。代码的自解释体现在类的划分,接口的使用,方法和函数的抽取,逻辑的实现,调用的过程关系和交互,这些工具和技术不能帮你,我们很多时候是使用了面向对象的语言和成型的分层开发框架和技术,但是仍然是固有的非结构化和抽象的模式在写程序。该抽象提取接口的就提取,该复用的就复用,该拆分的就拆分,该内聚的规则就内聚,无碍就这些内容和思想,这些都搞不好更谈不上设计模式。

我们需要写出高健壮性的代码,一个功能增删改查的实现仅仅是最基础的基础,为了考虑各种边界和异常,考虑清楚每一个详细规则点的处理和扩展,你需要额外增加至少1倍的代码量可能才完成。一个健壮的程序会考虑到各种用户使用的场景,给用户犯错的机会,支持各种错误后的重试而不影响到整体的事务一致性等。一个健壮的程序会很少需要程序员后台去调整和修复数据,一个健壮的程序应该很好的控制和监控底层计算,内存,物理存储资源的使用。

我们需要写出高可维护性的代码,一个软件产品实现完成和上线不是最终的生命周期,而伴随的运维才是更加重要的一个阶段。在系统运行和使用过程中,随时可能出现某些不可预见的异常,这些异常我们不能完全的规避掉,但是更加重要的是当发生异常或错误的时候,我们能够快速的定位到具体的问题点并快速解决掉,这也是前面所说的异常和日志不可分的道理。另外一个高维护性的代码必定是具有很好的可读性,对于任何业务规则和逻辑的实现,数据的获取和存储我们可以快速的阅读代码和定位,以方便后面对各种需求变更的处理和实现。

我们需要写出高性能的代码,而不是将程序的高性能完全交给硬件能力的提升来解决。一个字符串的使用,一个集合类和数据结构的使用,数据库连接管理,各种逻辑实现中的循环,接口的使用,不合理的抽象层次,对内存的管理,缓存和事务一致性,前端js脚本优化,业务规则逻辑优化,数据库性能优化等各个方面都涉及到性能的提升。性能的问题要踏踏实实的做,从每一个细小点做起和注意,在编码过程中绝对不能因为简单省事而对已有的各种编码规则滥用,这才是一个程序员基本的负责任的态度。

最后引oz6大叔的一段话做结尾

总是有些浮躁的人在说,写代码没前途,到多少多少岁还写代价就更加没前途。我觉得这些人从开始就不应该写代码,并且他们写的代码我一行都不信任。当然他们 有这样那样的理由,其实核心无非就是你越大就越不该写代码,而去从事一些什么更高尚的职务。这样的人就是去看厕所我都不信任,早就该被讨厌回家。当然回家 也不能抱孩子,因为他们孩子也搞不好,因为这个在他们看来也肯定没前途。

  青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟!!   你不得不信的星座秘密

相关 [编码] 推荐:

编码

- - 人月神话的BLOG
前面谈需求,架构和设计都比较多,今天谈一下编码方面的内容,做一个好的程序员不容易,很多时候不是体现在需求和架构能力的缺少上面,更多的是体现在最基础的编码和实现能力的不足上面. 编码是一个技术活,需要大量的脑力活动,但是很多人确可以把编码做为一个体力活,我在这里想继续强调的是如果编码是一个完全的重复体力劳动的话,那么所有工作就一定是可以自动化掉的,在这个时候你原来所有的工作没有任何的价值体现而被完全替代.

字符编码

- - 博客 - 伯乐在线
伯乐在线注:本文来自文章作者 @acmerfight 的投稿( 原文链接). 如果其他朋友也想投稿,请发邮件至 webmaster@jobbole.com,或直接给 @伯乐在线官方微博 私信投递. 你是否认为“ASCII码 = 一个字符就是8比特”. 你是否认为一个字节就是一个字符,一个字符就是8比特.

将URL编码?

- - JavaScript - Web前端 - ITeye博客
    URL一般只能由字母、数字、$ - _. * ' ( ) 等一些字符构成. 那么当URL中需要用到汉字时怎么办,譬如有这样的URL: "www.test.com/search?name=张三",此时,只有通过将URL进行编码的方式进行传递了.     Javascript编/解码方法:.     如果对上面的URL(www.test.com/search?name=张三)进行编码的话.

编码风格不是编码规范

- - 外刊IT评论
我并不认为程序员是一个情绪特别丰富的群体. 但有一些事情却能很容易刺激程序员的神经,那就是代码格式和布局. 如果看到一个函数的括弧在同一行上没有闭合,我的眼睛会喷血. 如果看到有人没有 恰好的在两个函数间留一空行,我的小腿会抽筋. 但重点在这里——除非是在家里开发自己的业余爱好软件,我的这些个人喜好其实是无关紧要的.

理清URL编码

- winners - Thinking for Fun
关于URL编码,RFC1738做了如下的规定:. “Only alphanumerics [0-9a-zA-Z], the special characters “$-_.+!*’(),” [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.”.

编码那些事

- winners - UEDMAGAZINE
前端开发中编码的问题一向是让人头疼的,尤其是在以gbk为基础页面编码的淘宝,情况更加复杂,除了常见的页面文件的编码之外,对不同编码js/css文件的引用、meta的charset设置、表单提交的URL编码等问题的处理稍微粗心就会出问题,特别是ajax中的编码转换,始终缺乏统一方便的解决方案,今天我们就分享两个js转码的常见案例的解决.

java编码规范

- - ITeye博客
   总结前期做的几个项目,个人认为代码的规范对团队的协作有着密切的关系. 现将一些常用的约束总结如下,以便今后参阅:. 1、所有的类、属性、方法都遵守以字母和数字为主,尽量不要参与特殊符号如下划线. 其次,除类名开头字母大写外,其他名字都要小写,然后第二个后的单词首字母大写,长度在30个字符以内.

oracle 编码规范

- - 操作系统 - ITeye博客
军规一:【恰当控制事务大小,commit不要过于频繁. 】 军规二:【在OLTP系统中一定要注意使用绑定变量. 】 军规三:【在OLTP系统中一定要注意复杂的多表关联不宜超过4个,关联十分复杂时,需要拆分成多个步骤,防止执行计划不正确. 】 军规四:【合理收集统计信息,固定住SQL的执行计划. 】 军规五:【尽量避免使用XA事务,在RAC环境中要避免XA事务跨节点操作.

HTML编码规范

- - SegmentFault 最新的文章
这段时间在整理前端部分代码规范,初步想法是从HTML、CSS、Javascipt、项目文件目录四部分是整理. 之前已经整理完了 CSS编码规范,有兴趣可以了解下. [强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符. 对于非 HTML 标签之间的缩进,比如 script 或 style 标签内容缩进,与 script 或 style 标签的缩进同级.