文档章节

高效程序员的45个习惯总结版-文末脑图

阿提说说
 阿提说说
发布于 11/13 01:49
字数 3664
阅读 39
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

image-20191111220840651

1 做事

一个重大的错误应该被当做一次学习而不是指责他人的机会,团队成员一起工作,应该互相帮助,而不是互相指责

2 欲速则不达

不要为了修复问题而去修复,要投入时间和精力保持代码整洁

3 对事不对人

一个团队能够很公正的讨论一些方案的优点和缺点,你不会因为拒绝了有太多缺陷的方案而伤害别人,也不会因为采纳了某个不完美(但更好的)解决方案而被人记恨

尽量贡献自己的好想法;不要脱离实际的争论;不要带个人情绪的争论和盲目接收观点

4 排除万难,奋勇前进

如果设计或者代码中出现了奇怪的问题,花时间去理解为什么代码会这样。如果你找到了解决办法,但代码还是令人费解,那么只能重构,让它可读性更强。如果你没有理解那段代码,就不要轻易否定和重写它们

如果在你提出代码中出现问题的时候,遭到抵制,你需要用他们能够听懂的话表达

5 跟踪变化

跟踪技术变化,你不需要精通所有技术,但需要清除知道行业的动向,从而规划你的项目和职业生涯

6 对团队投资

"一个学习型的团队才是较好的团队",比如设定每周轮流主持讲座,讲完后,进行开放式讨论,这样每个人都可以发表自己的意见

7 懂得丢弃

在合适的场景决定使用新技术还是旧技术

8 打破砂锅问到底

通过问"为什么",直到明白问题的根源

9 把握开发节奏

在每天结束的时候,测试、提交代码

以固定、规律的长度运行迭代,调整迭代长度,找到团队最舒服可行的时间值

10 让客户做决定

让你的客户做决定,开发者,经理或者业务分析师不应该做业务方面的决定,用业务负责人能够理解的语言,向他们详细解释遇到的问题,并让他们做决定

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

"不要在前期做大量的设计",在没有经过真正的代码验证之前,不要陷入太多的设计任务。当对设计一无所知的时候,投入编码业是一件很危险的事 。好的设计应该是正确的,而不是精确的,也就是说它描述的一切必须是正确的,不应该涉及不确定或者可能发生变化的细节,它是目标,不是具体的地方

12 合理的使用技术

根据需要选择技术,首先决定什么是你需要的,要解决什么问题,接着为这些具体的问题评估使用技术,对任何要使用的技术,多问一些挑剔的问题,并如实回答

13 保持可以发布

保证系统随时可以编译,运行,测试并立即部署,可以通过分支来专门处理某个需要修复的问题,再把代码合并到主分支,但这里需要注意代码冲突问题,简单流程是 本地测试 > 检查最新代码 > 提交代码,最好是通过持续集成系统,自动集成部署并报告集成结果

14 提早集成,频繁集成

代码集成是主要的风险来源,要规避这个风险,只有提早集成,持续而有规律的集成,比如每天集成2-5次,如果到最后才进行集成,可能将花费更多的时间来解决集成中的问题,而持续集成发生的问题都是一些小问题更容易解决

15 提早实现自动化部署

自动化部署使得软件能在不同的目标机器上同时部署应用,并且更容易发现问题,比如缺少依赖关系

16 使用演示获得频繁反馈

在开发软件的时候,要跟客户保持沟通,每个一周或者两周,将完成的最新功能演示给客户看,并获取他们的反馈

17 使用短迭代,增量发布

发布带有最小可用功能块的产品,每个增量开发,使用1-4周左右迭代周期

18 固定的价格就意味着背叛承诺

软件项目是变化无常的,不可重复,如果要提前给出一个固定价格,就几乎肯定不能遵守开发上的承诺,如果必须要提供一个价格,可以先构建最初的,小而有用的部分,并给客户演示,客户可以选择继续开发,还是停止或者取消合同

19 守护天使

使用自动化的单元测试,好的单元测试能够为你的代码问题提供及时的警报,如果没有好的单元测试,就不要轻易设计和修改代码,直到修改好单元测试

20 先用它再实现它

测试驱动开发(TDD),先写测试,再写代码。先写测试能让你从用户的角度去思考,而不是一个单纯的实现者,另外先写测试有助于消除过度复杂的设计

21 不同的环境,就有不同的问题

使用持续集成工具,在不同的平台和环境中运行单元测试

22 自动验收测试

使用客户的业务逻辑来验证系统

23 度量真实的进度

评估剩下的工作量,不要用不恰当的评估来欺骗自己或者团队,要评估那些需要完成的待办事项,通过待办事项,就可以随时知道下一步最重要的任务是什么。有时候对于一个任务,评估是2天,做到一半发现还需要4天时间来完成任务。

24 倾听用户的声音

每一个用户的抱怨都是有原因的,不要生气,不需要轻视,要找出真相,修复真正的问题

25 代码要清晰的表达意图

应该让自己或者团队的其他任何人,可以读懂自己一年前写的代码,而不是只读一遍就知道的它的运行机制。

在编写代码时,应该使用语言特性来提升表现力,使用方法名来传达意向,对方法参数的命名要帮助读者理解背后的想法,异常传达的信息是哪些可能会出问题,以及如何进行防御式编程,要正确的使用和命名异常,好的编码规范可以让代码变得易于理解,同时减少不必要的注释和文档。

26 用代码沟通

写简明扼要的注释;

在代码可以传递意图的地方不要使用注释;

解释代码做了什么的注释用处不那么大,反而注释要说明为什么会这样写代码;

当重写方法时,保留描述原有方法意图和约束的注释

27 动态评估取舍

如果现在投入额外的资源和精力,是为了将来可能得到的好处,要确认投入一定要得到回报(大部分情况下,是不会有回报的);

真正的高性能系统,从一开设计时就在向这个方法努力;

过早的优化是万恶之源;

过去用过的解决方案对当前的问题可能适用,也可能不适用,不要事先预设结论,先看看现在的状况;

28 增量式编程

在很短的编辑、构建、测试循环中编写代码,要比话费长时间仅仅做编写代码的工作好得多,可以创建更加清晰、简单、易于维护的代码。

如果构建和测试循环花费时间过长,你就不会希望经常运行他们了,要保证测试可以快速运行;

在编译和测试运行中,停下来想一想,并暂时远离代码细节,这是保证不会偏离正确方向的好办法;

要休息的话,就要好好休息,休息时远离键盘;

要像重构你的代码那样,重构你的测试,要经常重构测试;

29 保持简单

开发可以工作的、最简单的解决方案。除非有不可辩驳的原因,否则不要使用模式、原则和高难度技术之类的东西。

代码几乎总是可以得到进一步精炼,但到了某个点后,再做改进就不会带来任何实质性的好处了。

强行让代码变得优雅和过早优化类似,同样会产生恶劣的影响。

简单的解决方案必须要满足功能需求,为了简单而在功能上妥协,这就是过分简单化了。

30 编写内聚的代码

让类的功能尽量集中,让组件尽量小,避免创建很大的类或组件,也不要创建无所不包的大杂烩类

31 告知,不要询问

不要抢别的对象或是组件的工作,告诉它做什么,然后盯着你自己的职责就好

调用者不应该给被调用对象做决策,这个工作应该由被调用对象自己完成

32 根据契约进行替换

通过替换代码来扩展系统,通过替换遵循接口契约的类,来添加并改进功能特性,要多使用委托而不是继承

相对继承来说,委托更加灵活,适应力也更强

33 记录问题解决日志

维护一个问题及其解决方案的日志,保留解决方案是修复问题过程的一部分,以后发生相同或类似问题时,就可以快速找到并使用

34 警告就是错误

将警告视为错误,签入带有警告的代码,就是签入有错误或者没有通过测试的代码一样,都是极差的做法,签入构建工具中的代码不应该产生任何警告信息

35 对问题各个击破

将问题与应用其他部分隔离开,可以将关注点直接放在与问题相关的议题上,可以通过多种改变,来发现问题发生的核心,只有最小数量的相关代码与问题有联系

36 报告所有的异常

处理或者向上传播所有的异常;当捕获或者抛出异常时,都要记录日志信息;

37 提供有用的错误信息

展示有用的错误信息,提供更易于查找错误细节的方式,发生问题时,要展示出尽量多的支持细节,不过别让用户陷入其中

38 定期安排会面时间

定期与开发人员进行良好的沟通,立会是比较好的选择,立会一般在大家到公司后的半个小时到一个小时之内举行。立会能让团队达成共识,保证会议短小精悍不跑题。

39 架构师必须写代码

优秀的设计从积极的程序员那里开始演化,积极的编程可以带来深入的理解,不要使用不愿意编程的架构师,不知道系统的真实情况,就无法展开设计。

40 实行代码集体所有制

任何一位团队成员,只要理解某段代码的来龙去脉,就应该可以对其进行处理,如果某一段代码只有一位开发人员能够处理,项目的风险无形中就增加了。

在团队中实行任务轮换制,让每个成员都可以接触到不同部分的代码,可以提升团队整体的知识和专业技能,也可以提升代码的整体质量

代码集体制并不意味着可以随心所欲的随意改变代码

41 成为指导者

分享自己的知识,付出的同时便有收获,还可以激励别人获得更好的成果,而且提升整个团队的实力

42 允许大家自己想办法

给别人自己解决问题的机会,指给他们正确的方向,而不是直接提供解决方案,每个人都能从中学到不少东西

用问题来回答问题,可以引导提问的人走上正确的道路

如果有人真的陷入坑里,就不要折磨他们了,告诉他们答案,再解释为什么是这样

43 准备好后再共享代码

绝不要提交尚未完成的代码,不要签入编译未通过或者没有通过单元测试的代码,代码一旦提交,别人就可以访问到

44 做代码复查

复查所有的代码,有助于提升代码质量和降低错误率,

在代码复查中要看什么呢?如下是基本的检查列表:

  • 代码能否被读懂和理解

  • 是否有任何明显的错误

  • 代码是否会对应用的其他部分产生不良的影响

  • 是否存在重复的代码

  • 是否存在可以改进或重构的部分

45 及时通报进展与问题

及时通报进展与问题,发布进展状况,新的想法和目前正在关注的主题,不要等着别人来问项目状态如何。

图片转自https://www.jianshu.com/p/84a6ba715049

© 著作权归作者所有

阿提说说

阿提说说

粉丝 3
博文 35
码字总数 36005
作品 0
杭州
高级程序员
私信 提问
高效程序员的45个习惯 - Venkat Subramaniam

书名:高效程序员的45个习惯 简介:本书简明实用、见解深刻,总结了高效程序员在开发过程中的45个个人习惯、思想观念和方法,有助于开发人员在开发进程、编码工作、开发者态度、项目和团队管...

susu1024
2015/04/05
6
1
敏捷教练成长记:冬日阳光第六周

不知不觉坚持了六周,这是三个月成长计划的一半,忙碌充实,坚持!坚持!坚持! 上周计划完成情况 1、敏捷方面读不少于50页的书或者文章。 - 粗读《高效程序员的45个习惯-敏捷开发修炼之道》全书...

转型实践者
2017/12/10
0
0
《高效程序员的45个习惯》读书笔记

前言 《高效程序员的45个习惯-敏捷开发修炼之道》本书总结和阐述了成为高效的开发人员所必须的45个习惯、思想观念和方法,覆盖了软件开发进程、编程和调试工作,开发者态度、项目和团队管理以...

转型实践者
2017/12/08
0
0
精通Java需要经历哪几个阶段?

自学Java的人不少,科班出身的也很多,但是到什么程度才有资格说自己精通Java?个人觉得至少需要经历以下几个阶段: 重视代码品质,精益求精,这是技术开发的本质,也是程序员的立足之本。 ...

Java猫
03/27
0
0
3年Java面试被嘲讽:“还不如工作1年的新人!”

  每个程序员的简历都有一些共同的特性,比如,爱好是打篮球,目标是成为架构师。   但是刚毕业的时候,什么都不懂,盲目的投简历,发现都要工作经验。   愿意校招的公司,往往看重学历...

java进阶架构师
11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

web前端入门到实战:图解原生dialog标签(非常详细)

在html5中,新增了很多语义化的标签。如footer、header之类的,今天的主角是dialog标签 顾名思义,就是用来定义对话框的。目前只有Chrome和Safari支持该标签,所以用的不多,不过确实挺好用的...

梦想编程
24分钟前
3
0
一些php常用函数积累

本文链接<?php// id: ecffe70d3af54df9bad97b61918ace7d global $ct_path, $ct_log_path;$log_path = "test_php.txt";// 是否先log到buffer,再通过CT_flush()一次性写入文件$......

一字见心
25分钟前
3
0
IntelliJ idea中 注释代码折叠

visual studio中有#region 可以折叠代码,IntelliJ idea 中也有类似功能 //region 描述代码//endregion

format
25分钟前
4
0
oracle表中更改主键

一、数据表有主键但无主键约束名 先删除之前的主键,后添加主键 ,执行SQL: a. alter table 表名 drop primary key; b. alter table 表名 add primary key(想要更改的字段名称); 二、数据表...

_Somuns
27分钟前
3
0
jQuery AJAX提交表单

我有一个名称为orderproductForm的表单,输入的数量不确定。 我想做某种jQuery.get或ajax或类似的事情,它将通过Ajax调用页面,并发送所有形式为orderproductForm的输入。 我想一种方法是做类...

技术盛宴
33分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部