文章目录

  • 0 背景
  • 1 练习
    • 1.1 卡塔
    • 1.2 瓦萨
    • 1.3 自由练习
    • 1.4 开源
    • 1.5 职业道德
  • 2 时间管理
    • 2.1 会议
      • 2.1.1 是否参加会议
      • 2.1.2 会议的控制
    • 2.2 注意力点数
      • 2.2.1 提升注意力的方法
      • 2.2.2 避免行为
  • 3 压力
    • 3.1 避免方法
    • 3.2 应对压力
  • 4 团队协作
    • 4.1 协作
    • 4.2 团队
    • 4.3 辅导(原则、实践、技能)
      • 4.3.1 学位教育
      • 4.3.2 工程师的各个时期
  • 5 预估
    • 5.1 承诺
    • 5.2 预估
  • 6 技艺

0 背景

此篇为《代码整洁之道——程序员的职业素养》的第五篇读书心得,也是最后一篇心得。主要讲述编程专业人士的练习、时间管理、压力应对、团队和协作。

1 练习

专业人士都需要练习,因为他们关心自己可以做到的最好的结果,他们知道保持自己的技术不能落伍是自己的责任,而不是雇主的责任。练习的时候不赚钱,但是练习后,会获得丰厚的回报。

1.1 卡塔

  • 1,学习热键、导航操作、测试驱动开发、持续集成之类的方法,(http://katas.softwarecraftsmanship.org )

1.2 瓦萨

  • 1,两个人对练,一个人写单元测试,另一个人写程序通过单元测试

1.3 自由练习

  • 1,多人进行的瓦萨

1.4 开源

  • 1,多去开源设计贡献自己的代码,例如写了很多C++,可以贡献python代码,写了Java,可以为Rails项目做点贡献

1.5 职业道德

用自己的时间练习,就不必限制与老板规定的语言和平台,选择自己喜欢的语言和技术。

2 时间管理

2.1 会议

2.1.1 是否参加会议

  • 1,只选择能给自己目前工作带来切实且显著的成效的会议;
  • 2,如果会议让人厌烦,就像一个礼貌的版本退出;
  • 3,如果会议是自己已经完成的某些事项或者有职权人的命令时,应该权衡自己的损失和他人的收益,可以和团队中其他同事、主管商量;
  • 4,收到议会邀请时,应弄清楚议程的议题、每个议题花费的时间、要取得什么成果,如果得不到确切的答案,可以礼貌拒绝;
  • 5,如果已经出席议会,发现议会偏移或放弃了原有议程,应该要求列出新的议题和议程,如果没有答案,可以选择合适的时间礼貌离席。

2.1.2 会议的控制

敏捷开发时:
开始时,所有开发者站着,依次回答:

  • 1,我昨天干了什么
  • 2,我今天打算干什么
  • 3,我遇到了什么问题
    每个问题不应当超过20s,每次会议不超过10分钟。

迭代计划会议:

  • 1,每轮迭代会议所花时间不应当超过5%,如果一周40小时为一个迭代周期,会议时间应该控制在2小时以内;
  • 2,会议召开前,应该完成
    • 评估可选择任务的开发时间
    • 确定这些任务的业务价值
  • 3,验收/组件测试应该在会议召开前完成,或者至少要有概略方案
  • 4,简明扼要的讨论各个候选任务,然后决定是否选择还是放弃,每个任务所花费的时间应限制在5——10min;
  • 5,如果需要详细讨论,则应当另选时间,挑选出团队的一部分人专门进行;
  • 6,在会议末尾,团队成员讨论本轮迭代什么做的对,什么做的不对,展示最新成功的demo,最好在最后一天下班前45min召开,花20min回顾,花25min演示。

注意:

  • 1,凡是不能在5分钟内解决的争论,都不能靠辩论解决。
  • 2,强力无法解决争论,要用数据说话。
  • 3,不要别人这么办,自己就觉得这么办,如果自己同意的话,必须要拿出行动来。

2.2 注意力点数

人的精力和注意是有限,会随着时间流失或者忧虑的事情而减少,而编程是需要持续投入精力和注意力的;

2.2.1 提升注意力的方法

  • 1,保持良好的睡眠;
  • 2,适量使用咖啡;
  • 3,注意力不集中时,做一点其他事情,如沉思、反省、小睡、听播客等来回复注意力;
  • 4,定期进行锻炼;
  • 5,创造的输入知识,如广泛阅读;
  • 6,番茄工作法。

2.2.2 避免行为

  • 1,优先级错乱

    • 定义:逃避真正的工作
    • 专业人士都会排除个人喜好和需要,按照真实的紧急程序来执行任务;
  • 2,死胡同
    • 定义:选择走不通的技术道路,对这个决定越坚定,浪费的时间越多;
    • 谨慎的态度和积累的经验可以帮助避免某些死胡同;
    • 走入死胡同时,要有足够的勇气走回头路(坑法则:掉进坑,别挖)
  • 3,泥潭
    • 定义:面对简单问题,给出解决方案并保持代码的整洁,之后问题不断扩展,越来越复杂,扩展代码库并尽可能的保持整洁,但是有一天你发现在需求的变化方向上,程序跟不上节奏
    • 专业人士会运用各种努力尽早尽快脱身
    • 如果发现自己深处泥潭还固执前行,是最严重的优先级错乱,继续前进无异于欺骗自己、团队、公司、客户,一边走向煎熬所有人的炼狱,一边告诉大家所有问题都会解决的。

3 压力

尽可能的避免压力,无法避免就勇敢直面。可以通过谨慎承诺、遵守纪律原则、保持整洁来回避压力,直面压力时,保持冷静、与人多沟通、坚守自己的纪律原则并寻求他人的帮助。

3.1 避免方法

  • 1,承诺

    • 做风险定量化并将它们陈述给业务方,让他们做好想要的准备;
    • 如果业务人员没有实现咨询开发人员就像客户做出承诺,专业人士不一定要接受业务方代为做出的承诺,但是专业人士会千方百计的找到达成目标的方法
  • 2,保持整洁
    • 一般是“脏而慢”;
    • 保持代码和设计尽可能的整洁;
  • 3,保持纪律
    • 选择自己在危机中依然会遵守的纪律原则,并且在素有工作中都遵守这些纪律;
    • 遵守这些纪律是避免陷入危机的最好途径。

3.2 应对压力

  • 1,不要惊慌失措

    • 鲁莽只会带入更深的深渊;
    • 放松下来,对问题深思熟虑,努力寻找可以带来最好结果的路径
  • 2,沟通
    • 和团队、主管沟通,请求他们的支援和指引;
  • 3,纪律原则
    • 坚信自己的纪律原则
  • 4,寻求帮助
  • 找一个结对编程的伙伴

4 团队协作

4.1 协作

  • 1,程序员与雇主

    • 深刻理解业务目标

      • 理解手上正在编写的代码的业务价值是什么,了解自己的企业如何从自己的工作中获得回报;
      • 理解自己的职责是让业务免于陷入困顿,让公司长久发展下去
  • 2,程序员和程序员
    • 代码共有

      • 如果代码个人所有,那么可能会造成大量重复的代码、模块间的接口完全杂乱混淆而非整洁。
    • 应当结对编程
    • 可以相互协作、复查代码
  • 3,单独工作
    • 当需要长期努力思考一个问题或者任务琐碎且无足轻重时
  • 4 程序员和人
    • 善于和别人共事合作,享受其中的挑战

4.2 团队

  • 1 团队成员彼此互补,
  • 2,组成:
  • 3——20人

    • 2(程序员):1(测试人员和分析师)
    • 12人组成的最理想的团队(7名程序员,2名测试人员、2名分析师、1名项目经理)
    • 分析开发师/测试人员:编写自动化验收测试;分析师:关注业务价值;测试人员关心可能出错的地方(失败场景和边界测试)
    • 项目经理跟踪团队进度,确保成员理解项目时间表和优先级
  • 3,花时间来培养凝聚力(6——1年)
  • 4,管理团队
    • 使用每周点数(复杂度)来衡量团队的速速(每周完成的工作量);
    • 管理团队为项目设置目标值;
    • 有凝聚力的团队可以快速应对重新分配的优先级
  • 5 项目和团队
    • 如果项目比团队的更重要,就应该快速重新分配资源;
    • 否则,就应该不轻易解散团队,

4.3 辅导(原则、实践、技能)

软件工程师应该像医生一样,先经过一段时间的实习培训,然后再正式上岗工作。

4.3.1 学位教育

很多在大学只是混得了一纸文凭,但实际编程都根本不懂。很多符合编程要求的毕业生都是很早之前就自学编程,并在大学里保持着自学的习惯。

4.3.2 工程师的各个时期

  • 1,学徒/实习生

    • 没有“自治权”,需要在熟练工的辅导下工作;
    • 了解设计原则、设计模式、各种纪律和固定操作环节;
    • 熟练工向他们传授TDD、重构、估算等各种技艺,为学徒安排阅读、练习和实践任务;
    • 学徒期应该至少持续一年
  • 2,熟练工
    • 学习在团队中卓越工作和成为团队的领导者;
    • 对当前系统十分了解,但是对其他系统缺乏经验;
    • 只了解一种语言、系统、平台;
    • 平均经验在5年左右。
  • 3,大师
    • 领导过很多重要的软件项目;
    • 已拥有10年以上的经验;
    • 曾经在多个不同版本的系统、语言和操作环境上工作;
    • 懂得如何领导和协调多个团队;
    • 熟练的设计师和架构师,可以游刃有余的编程

但实际情况是几乎没有技术层面的督导,全靠程序员自己表现。

5 预估

开发方认为是猜想,业务方认为是承诺。

5.1 承诺

  • 1,承诺是必须做到的;
  • 2,专业人士不随意承诺,除非他们确切知道可以完成;
  • 3,不能兑现的承诺是一种欺骗,会对自己的名誉造成损失。

5.2 预估

  • 1,计划评审技术(PERT)【为支持海军潜艇极地航行计划】

    • 乐观估计:一切都异常顺利;标准预估:概率最大的数字;悲观估计:考虑各种意外
  • 乐观估计:O;标准估计:N;悲观估计:P;乐观估计:O;标准估计:N;悲观估计:P;乐观估计:O;标准估计:N;悲观估计:P;
  • μ:任务期望完成时间;σ:任务的标准差(用于评估任务的不确定性)μsequence:总的任务时间μ:任务期望完成时间;σ:任务的标准差(用于评估任务的不确定性)μ_{sequence}:总的任务时间μ:任务期望完成时间;σ:任务的标准差(用于评估任务的不确定性)μsequence​:总的任务时间
  • μ=(O+4N+P)/6μ = (O + 4N + P)/6μ=(O+4N+P)/6
  • σ=(P−O)/6σ = (P - O)/6σ=(P−O)/6
  • μsequence=suminμi/σiμ_{sequence} = sum_{i}^nμ_{i}/σ_{i}μsequence​=sumin​μi​/σi​
  • 2,德尔菲法(讨论预估,直到意见统一)
  • 亮手指(预估的单位在会议开始就必须确定)
  • 扑克规划
  • 关联预估
    • 把所有任务写在卡片上,任务按时间长短排序(左短右长),每个人都可以把卡片重新排序,所有人排序完后,讨论被移动次数超过n次卡片
  • 3,大数定律

    • 因为预估很容易出错,所以需要使用大数定律来控制错误
    • 把大任务分成许多的小人物,分开预估再加总

6 技艺

“工匠”一词包括的是心智、技能和质量的意味。有着经验丰富、堪当重任的印象,技术熟练、从容淡定,能够合情合理的估算并遵守承诺,知道何时说“不”,但更懂得如何承诺。

技艺是工匠持有的精神状态,包含着价值观、原则、技术、态度和正见。

编程专业人的良好习惯(练习、时间管理、压力、团队协作)相关推荐

  1. [项目管理-4]:软硬件项目管理 - 人月神话:项目时间管理(时间)

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  2. 20-30岁期间你应该要培养的十二项时间管理习惯

    2019独角兽企业重金招聘Python工程师标准>>> 这些习惯在时间管理中比较重要,每养成一项都能对效率有帮助 BY|mydjohnson 20-30岁是我们人生阶段的重要分水岭, ...

  3. 时间管理吧,我有话说 [攻略]

    假设你能活到72岁. 那么,你的时间使用状况大抵如下: ..................................................        睡觉:21年 工作:14年 ...

  4. 时间管理的定义与目的

    时间管理定义 ◆时间就是生命,时间就是金钱. ◆人们往往是重视生命,乐于理财,而忽略了时间管理. ◆善用时间,就是善用自己的生命! 时间管理是在日常事务中执着并有目标地应用可靠的工作技巧,引导并安排管 ...

  5. android 时间管理app,时间管理app

    时间管理app是一款日常生活应用软件,时间管理app可以帮助大家规划自己每日的时间表,无论是工作还是生活,都可以当作是一份备忘录使用,如有重要的会议.社交活动时,时间管理可以将你一天二十四小时分为若干 ...

  6. 柳比歇夫时间管理法 | 让你的时间管理更有效率

    编辑by粢饭团 "时间管理"这个概念越来越火,其实每个人多多少少都知道一些时间管理的方法,但是如何有效运用却成为了一大难题.今天带来的是有关柳比歇夫时间管理法的思维导图,让我们直观 ...

  7. 与幸福相关的时间管理

    与幸福相关的时间管理 ­         ---就算没有天分,只要你愿意每天花一点时间,做同样一件事情,不知不觉间,你就会走得很远.(摘自<时间管理幸福学>,吴淡如) 本文从以下四个方面浅 ...

  8. 学编程的人不能不看的好文章啊!!

    摘子编程论坛的一个文章 做为一名大四的学生,我面试过不少的单位,有成功的也有失败的,但是对我来说所有的失败在某种意义上都是一种成功,特别是我下面写的这些,写这篇文章的时候,我已经签了南京的一家软件公司 ...

  9. 从时间管理聊到技术人如何保持竞争力?

    最近时间管理这个词很火,想必大家瓜吃的也差不多,安琪拉吃瓜之余,也有所启发,思考总结了一下技术人如何做时间管理?如何在大环境恶劣的情况下依然保持竞争力?今天安琪拉和大家探讨如何才能在自己的专业领域做一 ...

  10. php编程习惯,PHP 编程的 5个良好习惯

    根据具体的情况,一般的开发人员往往比优秀的开发人员的效率低 10%~20%.优秀的开发人员的效率更高,因为他们拥有丰富的经验和良好的编程习惯.不良的编程习惯将会影响到效率.本文通过展示一些良好的编程习 ...

最新文章

  1. 子窗体更新父窗体控件内容
  2. Linux主机被黑过程和简单处理
  3. 【译】Hard Forks, Soft Forks, Defaults and Coercion
  4. css元素可拖动,使用css-transform实现更好的拖拽功能
  5. 两类传输协议:TCPUDP总结
  6. 数据持久化------Archiving(归档,解档)
  7. Intel Hex概述
  8. Python入门学习:网络刷博器爬虫
  9. 移动端安全测试主要涉及_Android APP安全测试基础
  10. mysql恢复备份快照_MySQL备份恢复:磁盘LVM快照
  11. JavaScript的特效
  12. java版五子棋分析_基于JAVA的五子棋游戏系统设计实现分析.doc
  13. 卓训教育:家长如何管理好孩子的学习?
  14. A级学科计算机技术,全国学科评估结果出炉 四川高校这些学科进入全国A档
  15. jsp+servlet+mysql实现的学生签到考勤请假管理系统源码+教程
  16. 场景解析和语义分割区别_语义分割概念及应用介绍
  17. 又一波利好,FN难道又要起飞了?
  18. 软件设计师上午题简易整理
  19. Android 音频数据传输流程图 - Playback过程
  20. POJ 3579 Median

热门文章

  1. 人工智能行业现状与未来发展趋势
  2. 聚焦新能源与汽车科技 全球汽车发展趋势论坛举办
  3. 从小程序升级成独立APP,“小鹅拼拼”如何帮鹅厂“拼”未来?
  4. 基于Multisim的简易数字钟
  5. 离散概率分布的介绍及Python运用
  6. 超详细wordPress主题制作教程
  7. mac 删除磁盘图标_如何在Mac上更改硬盘图标
  8. Mac谷歌浏览器关闭自动更新,下载历史版本方法,解决不自动提示保存密码的问题
  9. 基于GDAL库读取GRD数据文件的C++代码
  10. 达梦数据库DSC小记