阅读更多

4顶
2踩

研发管理

每个开发者在编码时,都希望代码像水管的水一样源源不断的流出,思绪不被打断。但在现实开发中,经常会由于一些事情突然中止或停下。本文就总结了现实工作中,影响编码进度的15个“拦路虎”。



1.开会

 

停止手头的编码工作,去参加会议。程序员或许不会相信,他们可能已经在会议室花费了数周或数年时间和老板闲聊技术细节。

当你从会议室出来后,大脑可能需要一定的转换时间,才能再重新投入到编码工作上,你很有可能需要一个小时的过渡。

2.回复所有的电子邮件

如果会议已经够糟糕的了,那么没完没了的邮件可能更让人头疼。经过几个小时的来回讨论,最终却没有个结果。

3.衡量生产能力

有些管理团队受到一些书籍启发,对提交到代码库的代码行数或bug修复数进行统计,并且作用一种衡量标准。他们认为,统计是一种衡量,而衡量肯定是有好处的。

然后他们根据此标准为开发者的工作能力进行排名。开发者犹如网络游戏中的玩家,他们将更加关心自己的排名,而不是如何让代码更好。

开发者的重点变成了统计代码所编写的行数、解决bug或把所统计的提交的仓库里。如果代码行数都计算在内的话,原本一个问题只需10行代码即可解决,程序员有可能编写5000行代码,来让功能更加灵活和兼容,这样,他的代码总量就会增加5000行了。

衡量生产力反而会使代码变的更糟,让项目里充满功能丰富但过度设计的代码。

真正解决这个问题,我们需要跟踪bug,我们需要组织工作流和协调软件开发,这些都是无法准确衡量。

4. 爱慕虚荣(Prima donna)的开发者

就开发者而言,最糟糕的莫过于其他开发人员没有按照项目需要进行开发,而是用自己的方式来迭代项目。每一个开发者都能识别出可怕、不可原谅的最后一次迭代行为。

这种不考虑之前已完成编程工作的态度会拖慢项目的进度。傲慢和利己主义会导致程序员扔掉合适的代码,而以他们认为的“正确的方式”重新构建。

5.“以后再修复”思维模式即“技术债务”

有时候,我们很难按照需求在数天里完成相应的功能,因此我们可能会偷工减料、补丁代码等。聪明的项目经理在弄清事后必须补上的“债务”后,形象的称它为“技术债务”。

每个项目都会有一定的技术债务,有的可能会快速还清,而有的可能会在下一个版本中初见端倪。

6.非程序员经理

有些程序员很喜欢这样的经理,他们不会对你的代码指手画脚,而且在技术上愚弄他们很容易。而他们也很难给你技术上的指导。

7.程序员经理

虽然程序员可能会抱怨要和完全没有编程经验的项目经理一起工作,但他们也经常私底下说如果项目经理具备编程能力可能会更糟糕,甚至有多糟糕就多糟糕。

具有编程能力的项目经理可能会对项目管理的太细,因为他们一旦有新的观点,代码就会大片修改。

8.技术过硬但有些强势的程序员

程序员往往都是因为过硬的技术才被公司赏识,而不是人际交往。但不能每次出现问题都责怪穿西装不自在或销售人员过于热情,有可能问题出现在自己身上。

客户想要一些不同的东西,这对此类程序员来说无关紧要,他们更多的是关注于技术参数。

然而在人际相处中,他们经常会过滤掉彼此的特质,当他们彼此产生争议时,就可能影响到整个团队的进度。

9.自私或莽撞的程序员

自恋狂程序员的工作可以说是非常酷和快,但遗留的问题也会很多,而你的工作就是处理这些琐事,对程序进行测试保证它不会崩溃。

许多团队在发现这一点后,都已经太晚了。在早期的测试中,代码块都可以很好的工作,但在推送一些真实数据后,大家才意识到并没有人检查这一问题。

10.文档不全

有时,这里会有大量的文档,但它可能是几个月前或者一些老版本的记录。我们没有时间继续记录和修复代码,但它对我们来说仍然是有用的。

11.纯粹地编写文档

虽然我们都经历过没有文档的项目,太多的废话和较少的代码常常会导致代码失败。程序员经常会根据需求编写评论,他们很详尽地把每个细节记录在文档里,没有总结或进行深入的理解,但如果没有提供太多的抽象和理解,这很有可能是一份失败的文档。

12.易分散注意力的环境

虽然销售和营销团队能够在具有噪音的环境里很好的工作,而程序员则需要图书馆般那种安静的环境。虽然许多企业给包括程序员在内的员工提供了类似乒乓球这类的运动,但他们常常忘记,程序员需要在安静的环境下办公,否则,嘈杂的环境很容易分散程序员的注意力。

13.办公文化

你想拥有自己的办公室吗?还是你想在可以随时提出你的问题团队里工作?你是喜欢在清晨工作还是熬夜呢?

如果一个团队拥有一个相似的风格,那么这个团队会运营的更好。如果无法找到一个共同点,很有可能会快速失败。

这可能太一概而论了,但你想象下,如果你正在编译或者准备完成项目,而此时团队里的人在互相争吵,你不得不中断下来,这样时间不就浪费了吗?

倘若我创建了一个非常复杂的算法,而中断、谈话、甚至是敲键盘的声音都会使我无法集中精力,这时,我就非常希望有属于自己的办公室。

14.紧随遗留技术

最令人讨厌的莫过于去改写那些尘封已久的旧东西,他们经常会忘记这样做所花费的成本,有些代码是在ASCII之前编写的,意味着你要重新转换输入输出。旧的系统通常会计算空格字符,仅仅是为了弄清其在数据库中是干嘛的,这更要进行转换。

程序员做大量的工作来截图、重新格式化等,而过一段时间后,他们可能会花更多的精力去复制代码,而不是去重新编写逻辑代码。

15.迷恋最新的工具

最新的工具可以给你带来很多乐趣,处于最前沿的程序员总是喜欢修改整个API,并且重写它们,迫使人们不得不修改底层的代码。

当我试图兼顾Python 3.0和Python 2.7两个版本时,尽管Pyhton是一个相对稳定的版本,但我还是感到很烦。

在许多情况下,新的工具都没有得到十足的锻炼。例如,Node.js的确非常快,但只有在你重新学习了关于创建进程时死锁的所有知识后才能做到。利用最新的工具是可以带来很好的结果,但天下没有免费午餐,并且会为此付出足够多的学习成本。

英文来自:InfoWorld 

  • 大小: 42.4 KB
4
2
评论 共 7 条 请登录后发表评论
7 楼 dohkoos 2013-09-12 19:11
4、5、10大概是最典型的了吧
6 楼 hepeng19861212 2013-08-27 15:35
再加一个拦路虎:加班,以及疯狂加班
5 楼 jenly10 2013-08-24 16:33
总结的很好,很细致,项目中确实是问题重重,需要多做总结
4 楼 youarestupid 2013-08-22 11:25
总结得非常好!
3 楼 sandyppl 2013-07-09 22:00
总结的很不错!代码环境的困扰
2 楼 lvwenwen 2013-07-08 21:21
总结的很好
1 楼 asialee 2013-07-07 00:41
写的很好。总结的很好,很多都在项目中遇到过

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 深入理解Java虚拟机(JVM高级特性与最佳实践)读后感

    文章目录深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)前言一、自己编译JDK1.1实验系统环境1.2获取源码1.3构建编译环境1.4安装"BootStrap JDK"1.5进行编译1.5.1编译前准备1.5.2了解OpenJDK编译参数1.5.3正式...

  • 《深入理解Java虚拟机:JVM高级特性与最佳实践》笔记

    一.Java内存区域与内存溢出 1.程序计数器是一块较小的内存空间,它可看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。各条线程都...

  • Java虚拟机(JVM)你只要看这一篇就够了!

    1. Java 内存区域与内存溢出异常 1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是...

  • 深入理解Java虚拟机 JVM高级特性及最佳实践

    深入理解Java虚拟机 JVM高级特性及最佳实践目录:第一部分 走近Java第1章 走近java第二部分 自动内存管理机制第2章 java内存区域与内存溢出异常第3章 垃圾收集器与内存分配策略第4章 虚拟机性能监控与故障处理工具第...

  • 【深入理解java虚拟机】 - JVM字节码指令介绍

    Java源代码经过编译器编译之后会生成一个...如果不考虑异常处理的话,那Java虚拟机的解释器可以使用下面这段伪代码作为最基本的执行模 型来理解: javap的用法 javap是 Java class文件分解器,可以反编译,也可以查看j

  • 【深入理解java虚拟机】 - JVM类的加载过程

    Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。一个类从被加载到虚拟机内存中开始,到卸载出...

  • 【深入理解java虚拟机】 - JVM垃圾回收算法

    垃圾收集器在对堆进行回收前,第一件事情就 是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。判断对象是否存活有以下两种算法:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就 +1 ;当...

  • 深入理解Java虚拟机-程序编译与代码优化

    文章目录早期(编译期)优化概述Javac编译器Javac的源码与调试解析与填充符号表注解处理器语义分析与字节码生成Java 语法糖的味道泛型与类型擦除自动装箱、拆箱与遍历循环条件编译实战:插入式注解处理器晚期(运行...

  • 深入理解Java虚拟机-Java内存区域与内存溢出异常

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来。 文章目录概述运行时数据区域程序计数器(线程私有)Java虚拟机栈(线程私有)局部变量表操作数栈动态链接...

  • 深入理解Java虚拟机-虚拟机执行子系统

    Class 文件的版本常量池访问标志类索引、父类索引与接口索引集合字段表集合方法表集合属性表集合字节码指令简介公有设计和私有实现Class文件结构的发展虚拟机类加载机制概述类加载时机类加载过程加载验证准备解析...

  • 深入理解Java虚拟机-垃圾回收器与内存分配策略

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来。 文章目录概述对象已死吗引用计数法可达性分析算法再谈引用生存还是死亡回收方法区垃圾收集算法标记-清除...

  • 深入理解Java虚拟机--虚拟机字节码执行引擎

    参考书籍:《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》 知识点回顾:javac编译器通过对程序代码进行词法分析、语法分析、生成抽象语法树、遍历抽象语法树等复杂的编译过程,最终,将程序代码变成了...

  • 深入理解Java虚拟机--虚拟机类加载机制

    参考书籍:《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、 转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的...

  • 【JVM】深入理解Java虚拟机

    2.2.2 Java虚拟机栈   线程私有,每个方法需要被执行时创建一个栈帧并压入栈顶,执行完毕出栈,调用其他方法时将其他方法的栈帧压入。   栈帧包括局部变量表、操作数栈、动态链接、方法返回地址、附加信息 2.2....

  • 深入理解Java虚拟机--垃圾收集器(一)

    参考书籍:《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》 Java语言出来之前,程序开发更多的是使用C或者C++语言,然而在C或者C++语言中存在一个很大的矛盾:创建对象时要不断地调用对象的构造方法来为...

  • 深入理解java虚拟机 (周志明)JVM个人总结

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是与平台的无关...

  • Java虚拟机(JVM)面试题(2020最新版)

    文章目录Java内存区域说一下 JVM 的主要组成部分及其作用?说一下 JVM 运行时数据区深拷贝和浅拷贝说一下堆栈的区别?队列和栈是什么?有什么区别?HotSpot虚拟机对象探秘对象的创建为对象分配内存处理并发安全问题...

  • java虚拟机(JVM)

    java程序在运行时,会为JVM单独划出一块内存区域,而这块内存区域又可以再次划分出一块运行时数据区,运行时数据区域大致可以分为五个部分: 1.2 :堆(Heap) “推管存储,栈管运行”;虚...

  • 深入理解JAVA虚拟机大全

    Java虚拟机 (类加载器-> 字节码校验器 -> 翻译字节码和JIT编译器(执行引擎部分,还包含gc等) (第二次编译生成机器指令) (JIT编译还会缓存到方法区中))-> 操作系统 JVM架构模型 寄存器架构--如x86下安卓...

Global site tag (gtag.js) - Google Analytics