写很很透彻,把码农解决bug的过程都包含进去了,至少我就是这样的。下面的文章和《各种流行的编程方式》有异曲同工,请你不要理解错了。本文来源,翻译如下:——————————————————一个非常严重和困难的bug,能够成就一个饱经沧桑深受压力的有经验的专业程序员的职业生涯。经受这种考验的创伤程度,相当你受到了一次严重的身体伤害,离婚,或是家庭成为的离世。研究人员在研究了计算机编程心理学后,得出了一个程序员们在解决一个困难的bug时的心路里程。这些不同的境界,很像为大众所知的Kübler-Ross Stages of Grief(这个模型描述了人对待哀伤与灾难过程中的5个独立阶段(否认,愤怒,耍赖,抑郁,接受)。绝症患者被认为会经历这些阶段),而且原因都很相似。就好像死亡所伴随的悲伤一样,fix一个bug是一个过程其初始化了一个事件,一开始是拒绝相信,其造就了你苦闷的情绪并开始逐步影响你的心智。这种苦闷的情结果会让你纠结要努力忍受,最终会你会找到一个满意的结果。了解下面这几个bug-fixing的阶段,会让我们更好的生存下来,并持之以恒,最终带来……关闭我们所有的bug的结果。第一阶段:抵触本阶段的状态: 多疑 Skeptical. 生气 Offended. 易怒 Petulant.1. 不理睬也许这个bug会安静地离开。2. 标记上“不是bug”也许这是用户的错,或是本地配置有问题。是的,我确信就是那样,一会就会好的。3. 就是一次小故障我想这就是一次小故障,很奇怪地发生了一次,它不会再发生的,虽然没有搞清楚是为什么发生了,不过这就好像我们的数据库,网格,浏览器或别的什么打了几个嗝一样。一会就会好的,我确信。4. 躲藏.我要休几天病假,也许他们会把这个bug转给别人的。5. 标记为“修改需求中”你看,我是按照需求实现的。如果你们想要改这个行为和UI,就一定要修改需求。也许他们会决定就这样了。6. 需要更多的信息我不能确定这是一个bug,除非我能在错误日志中看到一条特定的报错信息。7. 转给其他人我调查这个bug中看到了其它模块中我看不懂的数据,问题很大。我应该把这个bug转给开发那个模块的人。我可以在我的模块中检查一下那个边边角角的情况,但是正确的fix应该是在别人的模块中。反正那个在别的国家,我见不着他。第二阶段:接受本阶段的状态: 认命 Resigned. 被打击 Defeated. 被激怒 Annoyed.1. 接受现实行了,行了,行了!这是我的bug,我会修正它的。2. 把这个bug放到最后也许,我可以在我需要fix这个bug之前找到一个新的工作。3. 和你的经理讨价还价好的,你看,我可以正确地fix这个问题,不过我需要一个月。也就是说,我可以给这个问题贴个创可贴,那不会真正的解决它,但是我们可以避免用户的抱怨,这可以为我们赢得几天的时间。4. 为这个bug标记一个无耻的时间上帝啊,我希望这时间够了。第三阶段: 投入和沮丧本阶段的状态: 眼花 Giddy. 头晕 Light-headed. 紧张 Nauseous.1. 开始调查我能搞定它,我能搞定它!只需要小小的调整一下,小小的关注一下,多一点咖啡因,再加上一点时间,我能搞定它。2. Befuddlement.Shit. 这太扯了。我居然没有一点进展。这代码真是乱。这样的代码居然能编译和运行,真TMD的神奇,我有机会能搞清楚它什么不正常吗?3. 再次躲藏你看,很对不起。我不得不要去切除我的阑尾。再一次,是的,既然你提到了它,我的确有两个阑尾。现在我一个也没有了,你高兴了吧?。4. 犯贱好吧,总之,你到底期望什么?想让我在一个没有高级调试器的环境下改这个BUG。我是什么?千里眼吗?我在我的Commodore 64上一个更好的调试器!5. 瞎搞看看我试试这么改?Kao,这样不行。要不然这样搞?也不行。那么那样搞呢?Shit,虽然再糟糕。6. 绝望我不可能fix这个bug了。我是个糟糕的程序员。我太笨了。我在这个满是聪明人的地方干什么?迟早他们会知道我的能力太差,那时我就玩完了,在这也混不下去了。7.耻辱我的经理问我为什么我用了一个月的时候来fix这个只需要两天就可以解决的bug?老实说,我不知道怎么去读日志信息,我搞坏了我们的编译脚本。现在,我不敢去让别人来帮我,因为这样只会让我显得更愚蠢。8. 恐慌!这事变得比我相像的要复杂!而我开始觉得复杂的事变得简单……而我觉得简单的事变成需要重定半打的类。为什么我以前在我的经理前拍着胸说我可以搞定这个事?9. 通宵工作,远离朋友和家人(语无论次的喃喃自语,一阵一阵地大声咒骂)第四个阶段:愚蠢的快感本阶段的状态: 感恩 Grateful. 安心 Relieved. 极端地自我欣赏 Awfully Impressed with Yourself.1. 醒悟哦!我终于明白怎么搞定它了……2. 写正确的代码我真NB,我是编码机器!3. 测试牛!通过一个测试。真牛!又通过一个测试了。靠!有测试失败了。这是为什么……4. 隐藏测试失败反正这完全是一个不重要的测试案例。没有人会检查它,这个测试真是毫无意义。5. 提交代码我太牛了,厨房里有个馅饼可以庆祝一下吗?6. 关闭 bug.我听说那里有个馅饼可以庆祝一下第五个阶段: 与“完成”肉搏本阶段的状态: 焦燥不安 Twitchy. 神经过敏 Nervous. 迷信 Superstitious.1. 有人reopen了这个 Bug真的?他们发现了你引入了另一个bug? Shit – 那只是一个不重要的案例永远不会发生的。2. 修正以前的修正是的,我甚至检查了员工的年龄是一个虚数的情况,就是为了防止出错。3. 关闭 bug是的,贱货,你被关闭了。全部都关了,再也不用心烦了。4. 发誓以后再也不干这种事了5. 大家都意识到你现在是那个模块的专家了哦,不!现在他们又给了我三个那个模块的新bug没关系,现在你只需要GOTO 第一个阶段。此外,作为一个工作中的程序员,你会永远经历这些烂事,直到你——死亡,退休,或是被升到管理层。(全文完)原文网址:http://coolshell.cn/articles/4045.html
这里我并不说是axis1和axis2的什么不同,只是最近接触到了axis1和axis2的应用而已。 情况是这样滴。 公司的系统架构是公司外部系统的接口交互都要走公司的接口层,再由接口层将信息透传给公司内部的各个系统。 接口层使用axis2来架构,我这块的接口部分是使用axis1架构的,这个框架用了好几年,相当的成熟,看代码中的注释,最早的有02年写的代码,听说是很早那一批海归写的。 按理来说,高版本一般都会是兼容低版本的,况且对于axis来说,只要是标准的wsdl就可以,可还是有些区别的。 我使用axis1可以正常调用和返回,接口层可以调用也可以返回,看日志,调用的输入和输出都是正常,可在接口层那边就是取不到数据。同事和我整整查了一中午问题,公司对接口很厉害的高手也没有个办法。 最后,还是用最底层的办法来查,webService的本质还是xml,查看输入和输出的xml,输入没有什么问题,输出还是发现了一些端倪。 作为一个返回对象,属性内容是包含在ns的标签中的,在我们输出的xml文件中,ns标签标签中出现的是mutilhref="#01" ,在ns的标签外面,有个#01的标签,在#01中包含着输出的内容。接口层使用的是axis2取数据是从ns的标签中取的,当然是取不到标签外的值,axis1是可以取到的。 让接口层改用axis1,为了保持整个框架的统一,肯定不能改,我们改成axis2,时间不允许。有问题就google、baidu了,最近google搜索,都是搜索的繁体或者英文,简体的好些不是很方便,有时google还打不开,有些厌恶baidu的搜索了,现在用有道多一些。对于axis1和axis2的这个问题,整个网络上面,就只有一个09年的帖子提到,让关闭一些wsdd中globalConfiguration的sendMultiRefs设置为flase。 设置为false之后,再次调用,ns标签外的对象就被包含在ns中,不会采用引用的方式了。 在http://axis.apache.org/axis/java/reference.html有几个配置的解释,没看到有中文的解释,按照我自己的理解,意译下。 sendMultiRefs true/false flag to control whether multirefs are sent or not. 是否使用引用对象的方式 sendXMLDeclaration true/false flag to control whether the <?xml?> declaration is sent in messages 是否包含xml头文件的信息 sendXsiTypes true/false flag to enable/disable sending the type of every value sent over the wire. Defaults to true. 是否在每个值中都标注值的类型参数
最近在回顾c++的东西,现在java搞的多,c++的东西忘得也差不多啦!看了一些基础性的东西,整理一下,也算做个笔记吧!c++的重点之一:C++的箭头操作符(->)和点操作符(.)都是用在结构这块的,c++的结构类似于java的对象,但是java毕竟是真正面向对象的,看到的一切都是对象,要有对象,就要用new来创建了。而c++仅仅是支持面向对象,比如c++中的一个例子。class A{ private: int a; public: A() { a = 10; } void play() { printf("%d",a); }};int main(){ //创建一个指针 A *a = new A; a->play(); //定义一个变量对象; A b; b.play();} 用这个例子的结果都是显示数字10,我们需要得出的结果而是:如果使用指针,那就是用“->”箭头操作符,定义变量那就用“.”点操作符。而使用指针还是定义变量,我认为是是否需要对变量进行数据的改变,如果仅仅是做传值,那就定义变量,如果是做数据改变(比如说这个值需要存贮),那就用指针来做。okay!继续学习。。。
先找到notepad.exe的类似C:Windowswinsxsx86_microsoft-windows-notepadwin_31bf3856ad364e35_6.1.7600.16385_none_42a023025c60a33a这样的路径,把里面的notepd替换了,再把C:Windows和C:WindowsSystem32下面的notepad替换了就可以了。提供一个一直使用的记事本的文件。notepad.zip
第一次看3D版的电影,很小的时候,就听人说,要戴专门的眼镜的。这次和同事从南京跑无锡来看imax的阿凡达,说南方仅有上海和无锡有imax的,一张票提早半个月就在在淘宝上开始订了,刚开始说是90一张,早早就订好了,刚过来几天,就听说,票价要上涨,上海涨到来180一张,真够奢侈的。订好的票接着就加了50,成龙140,而且,本来订好在星期天的,也因为说是星期天有人包场,最后改到订星期六了,这样也好,改变了一下行程。当我们拿到票的时候,票价才72块,翻了一倍,有点太狠了!星期六看完电影,就到附近的崇安寺转了转, 崇安寺步行街,和南京的夫子庙,苏州的观前街一样了,都是商业化的步行街,都是有名气,没文化味道的地方了。当然,要研究当地的文化,我认为最后特色的就是工艺品和吃的了。无锡有三绝,酱排骨、紫砂壶、泥人,后两样我都看过来,我们找了一个地方吃过了,感觉还好。可能不是正宗的吧!还是说电影吧!3D版的电影真的很酷,我才真正明白了什么是身临其境、触手可及的感觉。看的过程中有好几次遇到有枪指或者蛋壳爆炸的时候,都会下意识的躲一下的,而且,那颗神树的种子很漂亮,好几次都拿起手来抓了!太真实,有感觉了!
优质管理的四大要素: 选择正确的人。 为他们分配正确的工作。 保持他们的积极性。 帮助团队凝聚起来并保持团队的凝聚力。 (其他一切都只是“文案”。) 安全和变化 除非感到安全,否则人们就不能去迎接变化。 在所有成功的工程中(以及在绝大多数其他有价值的工作中),变化 都是基本的要素之一。 安全感的缺乏会让人们反对变化。 逃避风险是致命的,因为这会让你也得不到与风险同在的利益。 人们可能会因为来自客观世界的直接的恐吓而觉得没有安全感,但 是如果察觉到管理者可能滥用权力来惩罚自己,他们也会觉得没有 安全感。 负面效应 威胁不是提高业绩最好的方法。 如果分配的时间一开始就不够,不管威胁有多么吓人,工作也无法 按时完成。 更糟糕的是,如果目标没有实现,你就必须兑现你的威胁。 管理者必需的身体部位 管理涉及到心、肠胃、灵魂和鼻子。 因此... 用心来领导, 相信你的肠胃(相信你的预感), 构筑团队的灵魂, 训练一个能嗅出谎言的鼻子。 用指挥战争来作为管理的一个比喻 在战役开始的时候,管理者真正的工作已经完成了。 面试和招聘 招聘涉及到所有与管理相关的身体部位:心、灵魂、鼻子和肠胃 (但是主要是肠胃)。 不要试图单独去招聘—— 两副肠胃远比一副肠胃的两倍要好。 对于新的雇员,让他们承担与以前曾经成功过的同样难度的项 目,把有挑战性的目标推迟到下一次。 征求提示:你最希望雇的那个人可能还知道其他很好的人选。 如果先把材料整理好,那么所有的事情都会进行得更好。 生产力的提高 没有“短期生产力提高”这样的东西。 生产力的提高是来自长期投资的。 任何承诺立刻见效的东西都很可能是江湖游医所卖的万灵油。 风险控制 通过控制风险来管理项目。 为每个项目创建并维护风险统计表。 跟踪根源性的风险,而不只是最后那讨厌的结果。 评估每种风险具体化的概率和可能造成的开销。 对于每种风险,预测标志其具体化的早期征兆。 任命一个风险控制官,这个人不应该维护组织内部“我能行”的 态度。 建立简单的(可能是匿名的)通道,让坏消息能传递到高层。 防止失败 壮士断腕。 控制住失败比优化成功更能提高你全面的成绩。 要有闯劲,尽早取消失败的工作。 除非必要,否则就不要自己去凝聚一个团队:出去找一个已经成型的团 队来用。 保持好的团队在一起(只要他们自己愿意), 以帮助你的继任者避免团队 凝聚得慢或者不能凝聚的问题。 把凝聚在一起的团队—— 准备好、并且也愿意接受新的工作—— 作为 项目的收获之一。 项目开始时浪费的一天和最后阶段浪费的一天对项目造成的伤害是同 等的。 有无数种方法可以浪费一天的时间...但是没有任何一种方法可以拿 回一天的时间。 开发过程的建模和模拟 将你关于完成工作过程的直觉建模。 在同事的交流中使用这些模型,以便交流、提炼关于项目运转的思想。 用模型来模拟项目的结果。 根据实际的结果来调整模型 病态的政治 每一天,你都必须准备拿自己的工作打赌....... ......但是这也不能保证“病态的政治”影响你。 “病态的政治” 可能在任何地方出现, 哪怕是在最健康的组织里面。 “病态的政治” 的特征: 对个人权势的渴望超过了组织本身的目标。 即使这种不合理的目标与组织目标背道而驰,它也可能出现。 “病态的政治”最恶劣的副作用:它精简项目变得危险。 度量 度量每个产品的规模 不要执着于单位 – 在等待客观度量的时候,先用你自己的主观单位 从所有能得到的原始数据(可计算得软件特性)自己构造度量单位 从已经完成得项目中收集原始数据,以推导出生产力趋向 借助数据库画一条趋势线,把预期工作量作为人造度量值的函数显示出来 现在,针对每个要评估的项目,计算出人造度量单位值,并根据这个值在 趋势线上找到预期工作量值 用生产力趋势周围的干扰水平作为映射的标示 过程和过程改进: 好的过程和持续的过程改进是绝好的目标 它们也是非常自然的目标:优秀的技术工作者一定会关注它们,不 管你是否告诉他们 正式的过程改进程序常需要花钱、花时间;特定的过程改进工作拖 延项目进度。尽管最终会体现出生产力上的收获,它们也不可能抵 消花在过程改进上的时间。 但是,项目有希望从单个的、正确选择的方法改进中得到足够的收 益,并赢回为这次改变付出的时间和金钱。 在项目进行的过程中,不要希望在超过一个方法的范围内实施改进。 多种技术的改进程序(比如说提高整整一个CMM等级)很可能让项目 比不实施这些程序完成得更晚。 标准过程的危险就在于人们可能失去重要的走捷径的机会 特别是对于人员超编的项目,标准过程看上去会很严谨,因为它们 制造出了足够的工作(有用的和无用的),让所有人都忙碌不停。 改变完成工作的方式: 如果不大幅度减少调试的时间,就没办法让项目大幅度提前完成 高速完成的项目用在调试上的时间也成比例地少得多 高速完成的项目用在设计上的时间也成比例地多得多 如果你不关心别人,不照顾别人,就别想让他们为你做一些不同寻常的 事情。如果要让他们改变,就必须去了解(并赞赏)他们的过去。 压力的效果: 压力之下的人无法更快地思考 增加加班时间只会降低生产力 短期的压力乃至于加班可能是有用的策略,因为它们能使员工集中 精力,并且让他们感到工作的重要性。但是长期的压力肯定是错误 的。 经理之所以会施加那么多的压力,也许是因为他们不知道该做什么, 或者因为其他办法的困难而感到气馁。 最坏的猜测:是用压力和加班的真正原因是为了在项目失败的时候 让所有人看上去能好一点。 愤怒的经理: 管理中的愤怒和耻辱是会传染的。如果高级管理者喜欢骂人,低级 管理者也会有样学样(就像经常被骂得小孩很容易变成爱骂人的父 母)。 管理中的辱骂常被认为是一种刺激,可以让员工提高效率。在“胡 萝卜加大棒”的管理策略中,辱骂是最常见的“大棒”。但是,哪 有人被辱骂之后还能做得更好的? 如果经理使用辱骂得方法来刺激员工,这就表现出经理的无能,而 不是员工的无能。 含糊的规格文档: 规格文档中的含糊隐含着不同的系统参与者之间存在着未解决的冲 突。 如果一份规格文档不包含完整的输入输出列表,那么它就是毫无希 望的,它根本就还没开始说明任何东西。 没有人会告诉你一份规格文档是不是糟糕。人们往往倾向于责备自 己,而不是责备文档。 冲突: 只要在开式过程中有多个参与者,就一定会有冲突存在。 创建、安装系统的业务中特别容易出现冲突。 绝大多数系统开发团队都缺乏解决冲突的能力。 冲突应当引起重视。冲突并不是缺乏职业道德的行为。 应当提前声明:所有人的‘赢’都是受重视的。确保每个级别的人 都能赢。 谈判困难;调解容易。 如果两个人的利益是完全或者部分相斥的,预先做好安排,准备好 请双方通过调解来解决冲突。 记住:我们都站在同一边;跟我们对立的,是我们要解决的问题。 通往智慧的路啊,明白而简单, 我们一错再错,一错再错, 但会越来越好,越来越好。 ——派特·海恩 催化剂的角色: 有这样一种催化剂式的人物,这样的人能帮助团队成型并凝聚,保 持团队的健康和生产力,从而对项目做出贡献。就算“催化剂”别 的什么事情都不干(其实,通常他们还会干很多别的事),这种催 化剂的角色也是重要而有价值的。 调解是“催化剂”的一项特殊工作。调解是可以学的,而且只需要 很小的投资就能学会。 调解应该从一个小小的仪式开始。 “我能帮你们调解一下吗?”在解决冲突的 时候,这是必要的第一个步骤。 人类的错误: 将你置于死地的,不是你不知道的的东西…而正是你“知道”绝 不会置你于死地的东西。 人员安排: 在早期,人员超编会迫使项目跨过关键的设计阶段(这是为了让 所有的人有事可做)。 如果在设计完成之前,工作先被分给了很多人,那么人与人之间、 工作组之间的接口就会很乱套。 这会使团队内部耦合度提高,会议时间、重复劳动和无效工作都 会增加。 理想的人员安排是这样:在项目的的大部分时间里由小型核心团 队来做设计工作,在开发的最后阶段(时间安排的最后1/6)加入 大量的人手。 可怕的猜想:时间安排紧迫的项目,与时间安排比较合理的项目 比起来,完成的时间发而会更长。 项目社会学: 让不必与会的人可以放心离开,从而保证会议的精简。有一份公开 的议程,并严格执行,这是最简单的办法。 项目需要仪式。 用小小的仪式来使人们注意项目的目标和理想状态:小规模会议、 零缺陷工作等等。 采取行动,防止人们随便发怒 记住:愤怒=恐惧。随便对下级发怒的经理一定是因为恐惧才会这样 做的。 意见:如果所有人都懂得“愤怒=恐惧”这个道理,就能明显地看出 发怒的人是在害怕。由于无法再隐瞒自己的恐惧,他也就不会再生 气了。(这不能解决这些生气的人的问题,但是肯定可以让其他人 好受一些。) “病态的政治”(旧话重提): 别想根治一个病态的人 不要浪费时间,也不要因为尝试治疗上司的病态而使自己受到威胁。 有时候,你唯一的选择就是等待,等问题自己解决,或者等一个让 你继续前进的机会。 奇迹时有可能发生的(但是千万别去指望它)。 精兵简政: 精兵确政是支败的公司使用的办法。它让员工负担失败的责任。 公司的目标应该正好相反:兴旺而人性化。 当你听到“精兵简政”这个词的时候,请记住它的弦外之音:失败 和恐吓。 基本常识: 项目既需要目标,也需要计划。 而且这两者应该不同。
过了周末 周末过的很疲,什么事情都不想去做,睡觉都变的很懒。 一本《追风筝的人》都看了几个月了,还徘徊在10几页,晚上从头开始看起,硬是花了一个晚上看完了整本书。书写的很不错,很久没有看到这么好的书了。书绝对比电影好看! 周末早上8点多就醒来了,就是不想起,一想起有一大堆的事情要做,就想一直这样躺着,永远这样。我明白这是一种逃避,可这是个周末,能逃多久就逃多久吧!脑子在乱七八糟的的想一些破事,不想去想,反而想的更多了,无论怎么样,眼睛闭着,不知道时间,躺着就行。 过了很久,觉得应该是下午4、5点了吧!才出来瞧了瞧时间,马上就12点了,很失望。房子一个人也没,也不想做什么,听一下音乐,还挺兴奋的,音乐完了,兴奋劲也就没了,总不能靠着音乐来麻醉自己吧!看了一篇文章,是孩子在情人节那天给母亲送了一份礼物——亲人节的礼物,礼物是孩子花了不少心思准备的。投入了感情,才会珍贵,才会用心去做。 我的工作做的很烂,做的一塌糊涂,我可以给自己找一大堆的借口,我没经验,没坐过,没人教我。。。有这个必要吗?我很感谢我有这样的机会,很感谢我遇到了人,我就怕自己做不好,让他们失望,也怕自己再一次对自己失望。说句自己安慰自己的话,我用心努力做就行了!不过现在,我真的还要再多睡会,这个周末,我真的是太疲了!
都说的是做事前要先学会做人,在学做事。最早说这话的人,应该是小人说出来,肯定是个小人。他肯定是人前一套,人后一套的那种,先给人摆出一副君子坦荡荡的样子,让人觉得这人不错,其实,不说了,都知道。 再就是,不会做人,在人面前显露不会的人,他会做事,事情做到很好,比较内敛,有潜质。 那种不会做人,不会做事的,啥都没有的,走开吧!没活下去的份。 会做人,会做事,天才一个。 我对做人要求很低,别给别人打歪主意,别害别人就行了,这样人的,现在好听点叫老实人,说白了,就是蠢材,现在的社会,要老实人没用,看大门的也要机灵能听见狗叫的。在说做事了,我真不会做,现在一大堆的事情,都分不清楚,干啥,干啥的,还累死累活的,人笨,看来还真是天生的了! 做事和做人还是在一块的,做人要靠做事体现的,而做事才可以看出人怎么样,做事、做人都在一块的,分开做什么啊!