《高效程序员的45个习惯》-之二

请您在阅读本文之前,先了解《高效程序员的45个习惯》-之一

每一期都会涉及15个话题,用3期来列出这45个习惯,每次不贪多,贪精,大家如果有空,一定要细细品味这15个习惯。

注意:每一个好的习惯,开头都会相应有一个唱反调的句子哦。

 

1 做事

“出了问题,第一重要的是确定元凶,找到那个人!一旦证实了是他的错误,就可以保证这样的问题永远也不会再发生了。”

指责不会修复bug,把矛头对准问题的解决办法,而不是人。这是真正有用处的正面效应。

也许你不相信,但确实有些人常常不把解决问题放在最高优先级上。也许你也没有。先自我反省一下,当有问题出现时,“第一”反应究竟是什么?

一个重大的错误应该被当作是一次学习而不是指责他人的机会。

团队成员们在一起工作,应互相帮助,而不是互相指责。

如果你没有犯过任何错误,就说明你可能没有努力去工作。

 

2 欲诉则不达

“你不需要真正地理解那块代码,它只要能够工作就可以了。哦,它需要一个小小的调整。只要在结果中再加上几行代码,它就可以工作了。干吧!就把那几行代码加进去,它应该可以工作。”

拙劣的代码工人会这样不假思索地改完代码,然后快速转向下一个问题;而优秀的程序员会挖掘更深一层,尽力去理解为什么这里需要加1,更重要的是,他会想明白会产生什么其他影响。

千里之堤,溃于蚁穴,大灾难是逐步演化而来的。一次又一次的快速修复,每一次都不探究问题的根源,久而久之就形成了一个危险的沼泽地,最终会吞噬整个项目的生命。

如果有一位团队成员宣布,有一块代码其他人都很难看懂,这就意味着任何人(包括原作者)都很难维护它。请让它变得简单些。

 

3 对事不对人

“当L先生在做一个新方案介绍时,下面有人会说‘这样设计很蠢!都没有考虑线程安全!’(这也暗示着L先生很蠢)。”

事实上,最适合并且最有效的表达方式应该是“谢谢,L先生。但是我想知道,如果两个用户同时登录会发生什么情况?”

尽力贡献自己的好想法,如果你的想法没有被采纳也无需生气;不要因为只是想体现自己的想法而对拟定的好思路画蛇添足。

 

4 排除万难,奋勇前进

“老鼠们打算在猫的脖子上系一个铃铛,这样猫巡逻靠近时,就能预先得到警报。每只老鼠都点头,认为这是一个绝妙的想法。这时一个年老的老鼠站出来说道’那么,谁愿意挺身而出去系铃铛呢?’毫无疑问,没有一只老鼠站出来。当然,这个绝妙的计划也就这样泡汤了。”

有时,绝妙的计划会因为勇气不足而最终失败。尽管前方很危险,但你必须有勇气向前冲锋,做你认为对的事情。

当你勇敢地站出来时,如果受到了缺乏背景知识的抉择者的抵制,你需要用他们能够听懂的话语表达。“更清晰的代码”是无法打动生意人的。节约资金、获得更好的投资回报,避免诉讼以及增加用户利益,会让论点更有说服力。

 

5 跟踪变化

“软件技术的变化如此之快,势不可挡,这是它的本性。继续用你熟悉的语言做你的老本行吧,你不可能跟上技术变化的脚步。”

如果只是掌握了工作中需要的技术并不够。那样的工作也许几年之后就不再有了—它会被外包或者会过时,那么你就将会出局。

迭代和增量式的学习;了解最新行情;参加本地的用户组活动;参加研讨会议;如饥似渴地阅读。

 

6 对团队投资

“不要和别人分享你的知识—自己留着。你是因为这些知识才成为团队中的佼佼者,只要自己聪明就可以了,不用管其他失败者。”

团队中的开发者们各有不同的能力、经验和技术。每个人都各有所长。不同才能和背景的人混在一起,是一个非常理想的学习环境。

一个学习型的团队才是较好的团队。

每周,要求团队中的一个人主持讲座。他会给大家介绍一些概念,演示工具,或者做团队感兴趣的任何一件事。你可以挑一本书,给大家说说其中一些特别内容、项目或者实践,无论什么主题都可以。

 

7 懂得丢弃

“那就是你一贯的工作方法,并且是有原因的。这个方法也很好地为你所用。开始你就掌握了这个方法,很明显它是最好的方法。真的,从那以后就不要再改变了。”

打破旧习惯很难,更难的是自己还没有意识到这个问题。丢弃的第一步,就是要意识到你还在使用过时的方法,这也是最难的部分。另一个难点就是要做到真正的丢弃旧习惯。 毕竟,汽车要比马车车厢强多了。

不是完全忘记旧的习惯,而是只在使用适当的技术时才使用它。

 

8 打破砂锅问到底

“接受别人给你的解释,别人告诉你问题出在了什么地方,你就去看什么地方。不需要再浪费时间去追根究底”

要不停的问“为什么”。不能只满足于别人告诉你的表面现象,要不停的提问直到你明白问题的根源。

问“为什么”,但是要问到点子上。

当你问“为什么”的时候,也许你会被反问:“为什么你问这个问题?”。在提问之前,想好你提问的理由,这会有助于你问出恰当的问题。

 

9 把握开发节奏

“我们很长时间没有进行代码复审,所以这周会复审所有的代码。”

在许多不成功的项目中,基本上都是随意安排工作计划,没有任何规律。那么样的随机安排很难处理。你根本不知道明天将会发生什么。

但是,敏捷项目会有一个节奏和循环,让开发变得更加轻松。Scrum约定了30天之内不应该发生需求变化,这样可以确保团队有一个良性的开发节奏。(Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。包括了一系列实践和预定义角色的过程骨架。)

站立会议最好每天在固定的时间和地点举行,比如说上午10点左右。要养成这样的习惯,在那时就准备好一切参加站立会议。

 

10 让客户做决定

“开发者兼具创新和智慧,最了解应用程序。因此,所有关键决定都应该由开发者定夺。每次业务人员介入的时候,都会弄得一团糟,他们无法理解我们做事的逻辑。”

在设计方面,做决定的时候必须有开发者参与。可是,在一个项目中,他们不应该做所有的决定,特别是业务方面的决定。

记录客户做出的决定,并注明原因。好记性不如烂笔头。

 

11 让设计指导而不是操纵开发

“设计文档应该尽可能详细,这样,低级的代码工人只要敲入代码就可以了。编写代码的时候,无论你发现什么,绝不能偏离了设计文档。”

设计满足实现即可,不必过于详细。

即使之前已经提交了设计文档,也还会有一些意料之外的情况出现。时刻谨记,此阶段提出的设计只是基于你目前对需求的理解而已。一旦开始了编码,一切都会改变。设计及其代码实现会不停地发展和变化。

设计可以分为两层:战略和战术。前期的设计属于战略,通常只有在没有深入理解需求的时候需要这样的设计。更确切的说,它应该只描述总体战略,不应深入到具体的细节。

 

12 合理地使用技术

“你开始了一个新的项目,在你面前有一长串关于新技术和应用框架的列表。这些都是好东西,你真的需要使用列表中所有的技术。想一想,你的简历上将留下漂亮的一笔,用那些伟大的框架,你的新应用将具有极高的技术含量。”

这个技术框架真能解决这个问题么?(如果需要,先做一个小的原型)

你将会被它拴住么?(一些技术是贼船,一旦你使用了它,就会被它套牢,再也不可能回头了。我们需要考虑它是开放技术还是专利技术)

维护成本是多少?(维护成本昂贵。我们听说,有个项目的合同是支持一个规则引擎,引擎一年的维护费用是5万美元,但是,这个数据库只有30条规则)

不需开发你能下载到的东西。

新技术就应该像是新的工具,可以帮助你更好地工作,它自己不应该成为你的工作。

 

13 保持可发布

“我们刚试用的时候发现了一个问题,你需要立即修复它,放下你手头的工作,去修复那个刚发现的问题。不用告诉其他任何人—赶快让它工作就行了。”

已提交的代码应该随时可以行动。

在本地运行测试;检出最新的代码;提交代码。

 

14 提早集成,频繁集成

“只要没有到开发的末尾阶段,就不要过早地浪费时间去想如何集成你的代码,至少也要等开发差不多的时候,才可以考虑它。”

敏捷的一个主要特点就是持续开发,而不是三天打鱼两天晒网地工作。特别是在几个人一起开发同一个功能时,更应该频繁地集成代码。

绝不要做大爆炸似的集成。

代码集成是主要的风险来源。要想规避这个风险,只有提早集成,持续而有规律地进行集成。

 

15 提早实现自动化部署

“没问题,可以手动安装产品,尤其是给质量保证人员安装。”

系统能在你的机器上运行,或者能在开发者和测试人员的机器上运行,当然很好,但是,它同时也需要能够部署在用户的机器上。

质量保证人员应该测试部署过程。

从第一天起就开始交付,一开始就实现自动化部署应用。

如果维护安装脚本变得很困难,那很可能是一个早期警告,预示着—很高的维护成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MIME Type的介绍

转载自: http://www.cnblogs.com/jsean/articles/1610265.html 一、 首先,我们要了解浏览器是如何处理内容的。在浏览器中显示的内容有 HTML、有 XML、有 GIF、还有 Flash ……那么,浏览器是如何区分它们,决定什么内容用什么形式来…

spring boot之从零开始开发自己的网站

概述 首先要感谢两位大神,该项目的想法来源自tale和MyBlog。 做了一些改造,增加了一些功能和一些代码的重构,并且更换了博客主题。 关于项目,对于开发的练手项目,能够工程化,严谨一些。 关于文档&#x…

halcon深度学习算子,持续更新

目录Deep Learning 深度学习Classification:分类apply_dl_classifierclear_dl_classifierclear_dl_classifier_resultclear_dl_classifier_train_resultdeserialize_dl_classifierget_dl_classifier_paramget_dl_classifier_resultget_dl_classifier_train_resultre…

python day5--正则表达式

#----正则表达式 import re elink <a href"(.*)">(.*)</a> info <a href"http://www.baidu.com">baidu</a> cinfo re.findall(elink,info) print (cinfo) import re print(re.search (r^a,abc\neee)) #预期结果 ^匹配字符开…

WCF系列教程之WCF客户端调用服务

1、创建WCF客户端应用程序需要执行下列步骤 (1)、获取服务终结点的服务协定、绑定以及地址信息 (2)、使用该信息创建WCF客户端 (3)、调用操作 (4)、关闭WCF客户端对象 二、操作实例 1、WCF服务层搭建:新建契约层、服务层、和WCF宿主,添加必须的引用(这里不会的参考本人前面的随…

《高效程序员的45个习惯》-之三

请您在阅读本文之前&#xff0c;先了解《高效程序员的45个习惯》-之二。 每一期都会涉及15个话题&#xff0c;用3期来列出这45个习惯&#xff0c;每次不贪多&#xff0c;贪精&#xff0c;大家如果有空&#xff0c;一定要细细品味这15个习惯。 注意&#xff1a;每一个好的习…

负载均衡的那些事?

什么是负载均衡&#xff1f;1、负载&#xff1a;就是后端系统的承载能力。比如同等条件下&#xff0c;一个1核cpu-1G内存的机器的承载能力一般会比8核cpu-8G内存的机器要差&#xff1b;相同配置下&#xff0c;一个cpu利用率为80%的机器比30%的承载能力一般要差等等。2、均衡&am…

Develop内部函数,持续更新

Develop内部函数 目录Develop内部函数dev_clear_objdev_clear_windowdev_close_inspect_ctrldev_close_tooldev_close_windowdev_disp_textdev_displaydev_error_vardev_get_exception_datadev_get_preferencesdev_get_systemdev_get_windowdev_inspect_ctrldev_map_pardev_map…

短信认证方案,用手机短信进行上网认证如何实现?

WFilter NGF的“Web认证”模块&#xff0c;提供了一系列的上网认证解决方案。包括如下认证方式&#xff1a;本地用户名密码认证AD域用户名密码认证企业邮箱用户名密码认证Radius用户名密码认证微信WiFi认证Facebook Wifi认证除此&#xff0c;WFilter NGF还有一个“其他”的选项…

《高效程序员的45个习惯》-末篇

请您在阅读本文之前&#xff0c;先了解《高效程序员的45个习惯》-之三。 每一期都会涉及15个话题&#xff0c;用3期来列出这45个习惯&#xff0c;每次不贪多&#xff0c;贪精&#xff0c;大家如果有空&#xff0c;一定要细细品味这15个习惯。 注意&#xff1a;每一个好的习…

【Qt开发】V4L2 API详解 Buffer的准备和数据读取

前面主要介绍的是&#xff1a;V4L2 的一些设置接口&#xff0c;如亮度&#xff0c;饱和度&#xff0c;曝光时间&#xff0c;帧数&#xff0c;增益&#xff0c;白平衡等。今天看看V4L2 得到数据的几个关键ioctl&#xff0c;Buffer的申请和数据的抓取。1. 初始化 Memory Mapping …

halcon File文件算子,持续更新

目录File文件Images图像read_imageread_sequencewrite_imagedeserialize_imageserialize_imagelist_image_fileparse_filenameMisc混合体copy_filedelete_filefile_existsget_current_dirlist_filesmake_dirread_world_fileremove_dirset_current_dirObject对象deserialize_obj…

Nginx 之一:编译安装nginx 1.8.1 及配置

转http://www.cnblogs.com/zhang-shijie/p/5294162.html 一&#xff1a;基介绍 官网地址www.nginx.org&#xff0c;nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的&#xff0c;开发工作最早从2002年开始&#xff0c;第一次公开发布时间…

PI校正环节的程序实现推导过程

PI校正环节在经典控制论中非常有用&#xff0c;特别是对负反馈控制系统&#xff0c;基本上都有PI校正环节。1.下面分别说明比例环节和积分环节的作用&#xff0c;以阶跃信号为例。①比例环节单独作用以上分析说明&#xff0c;若只有比例环节的控制系统&#xff0c;阶跃响应也是…

XML文档注释(C#)

目录XML文档编译器识别的标记添加XLM注释的方法添加XLM注释的例子XML文档 C#可以根据特定的注释自动创建XML格式的文档说明。 这些注释都是单行注释&#xff0c;但都以三条斜杠开头 编译器识别的标记 标记说明<C>把行中的文本标记为代码&#xff0c;例如<c>int …

vs里根据json快速创建对应类的方法

有时候,我们在调用别人接口的时候,服务端返回了一个json格式的字符串,我们要获取json里面的数据的话一般有两种方式: 1.通过正则 2.反序列化成一个对象 第一种方式这里不再多说,主要说一下第二种,(为什么呢&#xff0c;你看到后面 你也会喜欢上第二种) 有人肯定会说, json字符串…

德鲁克的《卓有成效的管理者》

是一本很好的书&#xff0c;对我有诸多的启发&#xff0c;这本书我在短期内连看两遍呢。 现将一些我觉得有启发性的句子发给大家分享。 1. 一个人的有效性&#xff0c;与他的智力、想象力或知识之间&#xff0c;几乎没有太大的关联。有才能的人往往最为无效&#xff0c;因为他们…

人工智能之基于face_recognition的人脸检测与识别

不久乘高铁出行&#xff0c;看见高铁火车站已经实现了“刷脸进站”&#xff0c;而且效率很高&#xff0c;很感兴趣&#xff0c;今天抽时间研究一下&#xff0c;其实没那么复杂。 我基本上是基于https://github.com/ageitgey/face_recognition上的资料和源码做一些尝试和试验。 …

iOS 升级https的方案选择

我的选择是将UIWebView统一替换为WKWebView WKWebView AFN SDWebImage https的支持之前的博客都有涉及转载于:https://www.cnblogs.com/Jusive/p/6867531.html

预处理指令(C#)

目录预处理指令简介#define、#undef#if、#elif、#else、#endif#warning、#error#region、#endregion#line、#line default#pragma预处理指令简介 微软对预处理指令解释链接 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/preprocessor-directives/index…