摘要: 加班费本来是保护劳动者的制度。但是实际操作中,它却沦为赏恶罚善的工具,促使着企业朝着更差的方向发展。我并不是要反对加班费制度,毕竟这种对于劳动者的保护制度应该拥护。但是,如果研究加班的产生原因以及结果,就不难发现加班费其实滋长了加班,并降低了开发效率。这是一个行为模式的问题:加班 -> 加班费(经济补偿) -> 没有人约束 -> 继续加班 -> 得到更多经济补偿 -> 故意降低效率。如果降低效率可以拿到加班费,并且,如果长期降低效率的话,可以拿到很多加班费。当问题第一次发生的时候,那是问题。当问题第二次发生的时候,那叫重复问题。当问题连续三次发生的时候,那就应该叫 阅读全文
posted @ 2012-11-19 14:18 史蒂芬.王 阅读(637) 评论(3) 推荐(2) 编辑
摘要: 软件开发的行业标准是按照工时收费。企业一般按照下列公式来计算收费、成本和毛利润的。 收费额度 = 估算的开发工时 x 工时单价直接成本 = 开发工时 x 工时平均成本 毛利润 =收费额度 - 直接成本 如果开发投入工时和估算的工时相等的情况下,毛利润 = (工时单价 - 平均成本) x 投入工时那么,企业在某个人身上全年的收益按照如下公式计算收益 = 单价 x有工作的工时- 成本价 x 全年的时间 所以,开发企业为了提高收益率,往往会关注一个指标:稼动率(即:工作饱满度) 稼动率 = 有工作的时间/全年的时间 全年的时间是个固定值,所以雇主会尽量的增加员工的有工作时间,以保持利润水平。当然,降 阅读全文
posted @ 2012-11-19 12:48 史蒂芬.王 阅读(12040) 评论(41) 推荐(6) 编辑
摘要: 1.面向对象编程(Object Oriented Programming) 面向对象编程把所有的事物都抽象为对象。即使虚拟的存在也要抽象为对象,比如:关系,状态;有些即使在客观世界中不被定义为对象的东西在面向对象的世界里也会被定义为对象,比如:行为,动作。 和面向过程编程强调:顺序、选择、循环不同,面向对象强调:包含、继承、实现、组合这些关系。面向对象的特点是:封装(Encapsulate)、多态(Polymophism)和继承(Inheritage)。2.依赖注入(Dependency Injection) 当依赖是动态的时候,可以通过在外部配置依赖类的名称的方式,通过反射来将依赖逐步引入。 阅读全文
posted @ 2012-11-19 11:50 史蒂芬.王 阅读(575) 评论(0) 推荐(0) 编辑
摘要: RumtimeException是一种UncheckedException。UncheckException是一种不需要在方法签名中声明的异常类型。广为知道的RuntimeException的子类有NullPointerException,StringOutOfBoundsException。ArrayIndexOutOfBoundsException之类的。在代码运行的过程中由于变量为空或者数组越界等情况就会发生这种异常。当异常发生的时候,由于没有try-catch会产生程序意外退出的情况。为了避免发生这种异常而导致应用程序意外退出,需要对代码进行try-catch或者是在调用前进行非空判定 阅读全文
posted @ 2012-11-18 21:38 史蒂芬.王 阅读(1606) 评论(1) 推荐(0) 编辑
摘要: 自表达代码的的特点1. 代码的返回值意思明确看一个报名程序的书写,这是采用非自表达方式书写的。 1 public String registerLesson(int userId, int lessonId) { 2 int code = checkUserId(userId); 3 if (code != 0) { 4 return "user does not exist."; 5 } 6 7 code = checkLessonId(lessonId); 8 if (code != 0) { 9 return "l... 阅读全文
posted @ 2012-11-18 20:35 史蒂芬.王 阅读(345) 评论(1) 推荐(1) 编辑
摘要: 详细设计是V模型或者瀑布开发中的一个重要的环节。这个阶段负责把概要设计进行细化,并为代码书写作出指导。可以说是一个承上启下的重要环节。但是现实的情况真的如此吗?我们来反思一下:(1)详细设计和代码的吻合程度有多高? 假设在项目中,代码在测试后修改完毕提交后,并不修改详细设计,则详细设计和代码之间并不吻合,并且很大程度上,吻合度会非常低。 如果详细设计和最终的代码并不吻合,那么这样的详细设计并不能给将来的维护带来任何帮助。 如果详细设计并不能给后续带来帮助,为什么要书写它呢?因为——详细设计是用来指导代码书写的。(2)详细设计对代码的指导意义有多大? 详细设计的类图是用来定义类框架之间的关系的; 阅读全文
posted @ 2012-11-12 23:23 史蒂芬.王 阅读(6788) 评论(4) 推荐(2) 编辑
摘要: 除前文所介绍的技巧之外,下列的内容也往往由于不知道而没有加以利用。1. transient关键词2. volatile关键词3. static块4. inline关键词5. Serializable接口6. synchronized关键词下述的方法7.toString()方法8.clone()方法9.equals()方法10.getClass()方法*这一章简略写了。 阅读全文
posted @ 2012-11-12 22:22 史蒂芬.王 阅读(398) 评论(3) 推荐(0) 编辑
摘要: 劣质代码产生的另外一个原因是管理者的误导,具体的误导行为有如下几种形式:1. 莫名其妙的代码规范 代码规范是为了能够让团队的程序员写出的代码像是一个人写的。本身是好事,但是如果代码规范制定的时候只是照搬照抄,那么代码规范很可能沦为损害代码质量的帮凶。 A. 每行修改的代码都要加注释每行修改的代码都要增加注释是在没有版本管理工具的时候的做法。因为这样可以对比修改的代码。 这种代码的修改方式导致了一个很重要的功能——重构——无法使用。因为每次重构的时候都会变更很多代码,并且没有增加注释。 正确的做法是把修改履历增加到版本工具里。 B. 修改时减少代码的修改量 修改代码时尽量减少代码的修改量是为了减 阅读全文
posted @ 2012-11-12 22:15 史蒂芬.王 阅读(363) 评论(1) 推荐(0) 编辑
摘要: 我们在研究自表达代码之前,首先要先弄明白代码的本质。在研究代码的本质之前,我们看一下音乐设备的发展:留声机 -> 磁带 -> CD -> Mp3不论设备怎么变化,有一点没有变化的是:这些设备都是用来记录声波信息的——不管记录的形式是塑料还是磁介质。那么代码是如何发展的呢?纸带打孔 -> 汇编语言 -> 解释语言(BASIC) -> 高级语言(C) -> 面向对象语言(C++) ...->一般情况来说,编程语言的主要作用是在人和计算机之间建立翻译机制,把人类能懂的语言写出代码转换成二进制代码。但是,除此之外,代码还有一个更重要的作用被忽视了——代码 阅读全文
posted @ 2012-11-11 23:51 史蒂芬.王 阅读(1078) 评论(0) 推荐(1) 编辑
摘要: 软件开发业的人常喜欢用生产制造业来比喻软件开发业的事情。由于对生产制造业的不熟悉,而是根据臆断和推测来进行的比喻,常常出现错误的结论。为此本文特地就生产制造业的情况和软件行业的类似于不同进行说明。1. Working Cell 提起生产制造业,第一印象往往都是生产线。但是生产线已经是在软件业出现之前的事情,如今的生产制造业早已经不是以前那种生产线的时代了。生产制造业以前是采用生产线的方式进行生产,生产线把生产工序分成各个阶段(熟悉吧?),每个阶段生产的产物都是下个阶段的输入。 生产制造业目前采用的方法叫做Working Cell。Working Cell是把生产人员分成各个工作小组,每个小组. 阅读全文
posted @ 2012-11-11 23:23 史蒂芬.王 阅读(341) 评论(0) 推荐(0) 编辑