高效程序员工作法(三)

目录

 前言:

 一、向马斯克学习任务分解

一句话总结:

二、测试也是程序员的事吗? 

一句话总结:

三、先写测试,就是测试驱动开发吗?

一句话总结:

 四、大师级程序员的工作秘籍

一句话总结:

 五、一起练习:手把手带你分解任务。

一句话总结:


 前言:

  本篇博客内容来源自:极客时间课程《10x程序员工作法》处于学习记录。将个人认为比较重要的知识点进行摘抄记录。有兴趣的同学去极客时间学习完整课程。

10x程序员工作法_开发效率_10倍效率-极客时间


 一、向马斯克学习任务分解

      一个大问题,我们都很难给出答案,但回答小问题却是我们擅长的。所以,当我们学会将问题分解,就相当于朝着问题的解决迈进了一大步。

       我们最熟悉的分而治之的例子,应该是将这个理念用在算法上,比如归并排序。将待排序的元素分成大小基本相同的两个子集,然后,分别将两个子集排序,最后将两个排好序的子集合并到一起。

       不同的可执行定义差别在于,你是否能清楚地知道这个问题该如何解决。

 如今软件行业都在提倡拥抱变化,而任务分解是我们拥抱变化的前提。

       一方面,对复杂工作而言,给出一个分解是巨大的挑战;另一方面,面对日常工作,人们更容易忽略的是,分解的任务要可执行。每个人对可执行的理解不同,只要你清楚地知道接下来的工作该怎么做,任务分解就可以告一段落。

      比如说达成目标有哪几个方面可以努力,各方面都需要做哪些事,这是路径。这些路径里哪些优先级最高,需要配置哪些组织资源。心里有数之后就是制订计划时间表。

一句话总结:

动手做一个工作之前,请先对它进行任务分解。


二、测试也是程序员的事吗? 

       对于每个程序员来说,只有在开发阶段把代码和测试都写好,才有资格说,自己交付的是高质量的代码。

       我们需要理解不同层次测试的差异。越是底层的测试,牵扯到相关内容越少,而高层测试则涉及面更广。

       比如单元测试,它的关注点只有一个单元,而没有其它任何东西。所以,只要一个单元写好了,测试就是可以通过的;而集成测试则要把好几个单元组装到一起才能测试,测试通过的前提条件是,所有这些单元都写好了,这个周期就明显比单元测试要长;系统测试则要把整个系统的各个模块都连在一起,各种数据都准备好,才可能通过。

       测试是软件开发重要的组成部分,测试应该是软件开发团队中所有人的事,而不仅仅是测试人员的事

      随着人们对于测试理解的加深,各种各样的测试都出现了,也开始有了测试的分类:单元测试、集成测试、系统测试等等。越在底层测试,成本越低,执行越快;越在高层测试,成本越高,执行越慢。

      人的时间和精力是有限的,所以,人们开始思考不同的测试如何组合。在这个方面的最佳实践称之为测试金字塔,它强调的重点是,越底层的测试应该写得越多。只有按照测试金字塔的方式写测试,持续集成才能更好地发挥作用。

一句话总结:

多写单元测试。


三、先写测试,就是测试驱动开发吗?

      测试先行开发和测试驱动开发在第一步和第二步是一样的,先写测试,然后写代码完成功能。二者的差别在于,测试驱动开发并没有就此打住,它还有一个更重要的环节:重构(refactoring)。

     测试先行开发和测试驱动开发的差异就在重构上。

     因为重构和测试的互相配合,它会驱动着你把代码写得越来越好。这是对驱动一词最粗浅的理解。

     接下来,我们再来进一步理解驱动:由测试驱动代码的编写。许多人抗拒测试有两个主要原因:第一,测试需要额外的工作量。这里我特意把额外加上引号,因为,你也许本能上认为,测试是额外的工作,但实际上,测试也应该是程序员工作的一部分,这在上一篇文章中我已经讲过。

     第二,很多人会觉得代码太多不好测。之所以这些人认为代码不好测,其中暗含了一个假设:代码已经写好了,然后,再写测试来测它。

     如果我们把思路反过来,我有一个测试,怎么写代码能通过它。一旦你先思考测试,设计思路就完全变了:我的代码怎么写才是能测试的,也就是说,我们要编写具有可测试性的代码

     所以,如果你要想让你的代码更可测,一个好的解决方案是尽量不写 static 方法

      测试驱动开发已经是行业中的优秀实践,学习测试驱动开发的第一步是,记住测试驱动开发的节 奏:——绿——重构。把测试放在前面,还带来了视角的转变,要编写可测的代码,为此,我们甚至需要调整设计,所以,有人也把 TDD 称为测试驱动设计。

一句话总结:

我们应该编写可测的代码。


 四、大师级程序员的工作秘籍

        这也是我把 TDD 放到这个部分来讲的重要原因,Kent Beck 在做的就是任务分解。任务分解,也是这本书的真正价值所在。

        当时,我已经工作了很多年,自以为自己在写代码上已经很专业了。看懂 Kent Beck 的思路,我才知道,与他相比,我还不够专业。

      Kent Beck 是怎么做的呢?每当遇到一件要做的事,Kent Beck 总会先把它分解成几个小任务,记在一个清单上,然后,才是动手写测试、写代码、重构这样一个小循环。等一个循环完成了,他会划掉已经做完的任务,开始下一个。

      Kent Beck 的做法清晰而有节奏,每个任务完成之后,代码都是可以提交的。看上去很简单,但这是大多数程序员做不到的。

      很多人看了一些 TDD 的练习觉得很简单,但自己动起手来却不知道如何下手。中间就是缺了任务分解的环节。

      任务分解是个好习惯,但想要掌握好它,大量的练习是必须的。我自己也着实花不少时间进行练习,每接到一个任务,我都会先做任务分解,想着怎么把它拆成一步一步可以完成的小任务,之后再动手解决。

       一个经过分解后的任务,需要关注的内容是有限的,我们就可以针对着这个任务,把方方面面的细节想得更加清晰。很多人写代码之所以漏洞百出,一个重要的原因就是因为任务粒度太大。

      TDD 在很多人眼中是不实用的,一来他们并不理解测试驱动开发的含义,但更重要的是,他们很少会做任务分解。而任务分解是做好 TDD 的关键点。只有把任务分解到可以测试的地步,才能够有针对性地写测试。

一句话总结:

将任务拆小,越小越好


 五、一起练习:手把手带你分解任务。

     很多人可能更习惯一个类一个类的写,我要说,最好按照一个需求、一个需求的过程走,这样,任务是可以随时停下来的。

      检验每个任务项是否拆分到位,就是看你是否知道它应该怎么做了。不过,即便你技术能力已经很强了,我依然建议你把任务分解到很细,观其大略人人行,细致入微见本事。

      最后,我要特别强调一点,所有分解出来的任务,都是独立的。也就是说,每做完一个任务,代码都是可以提交的。只有这样,我们才可能做到真正意义上的小步提交。

一句话总结:

按照完整实现一个需求的顺序去安排分解出来的任务。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
10x 程序员工作是一种高效、聚焦和快速迭代的工作论,旨在提高程序员工作效率和生产力。下面是对10x 程序员工作的简要回答: 1. 专注于高价值任务:10x 程序员专注于解决具有高价值和重要性的任务,避免浪费时间和精力在琐碎的工作上。 2. 学习新技术和工具:10x 程序员持续学习和掌握新的技术和工具,使自己保持在技术的最前沿,提高开发效率和解决问题的能力。 3. 自动化:10x 程序员善于使用自动化工具和脚本,通过自动化来减少手动操作和重复劳动,提高效率。 4. 代码质量和可维护性:10x 程序员注重编写高质量的代码,包括良好的命名、清晰的注释和可维护性,以减少代码维护的成本和问题的产生。 5. 持续集成和测试:10x 程序员将持续集成和测试作为开发流程的重要环节,通过自动化测试来保证代码的质量和稳定性。 6. 快速迭代和反馈:10x 程序员倡导快速迭代和及时反馈,通过快速开发、部署和用户反馈来不断改进产品和解决问题。 7. 团队合作和知识共享:10x 程序员懂得如何与团队成员合作和沟通,分享知识和经验,提高整个团队的效率和质量。 8. 注重性能和可扩展性:10x 程序员关注程序的性能和可扩展性,通过优化和调优来提高系统的性能和响应能力。 9. 持续改进和学习:10x 程序员思维开放,乐于接受新的挑战和反馈,不断改进和学习,提高自己的技术和职业能力。 10. 关注用户需求和体验:10x 程序员将用户需求和体验放在首位,注重产品的用户体验和价值,以用户满意度作为最终目标。 总而言之,10x 程序员工作强调高效、聚焦和快速迭代,通过专注于高价值任务、持续学习和改进、自动化和团队合作等方式,提高程序员工作效率和生产力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值