资讯专栏INFORMATION COLUMN

完美的编程节奏

nanfeiyan / 3021人阅读

摘要:打开和项目,编程工作开始。一般我的节奏是写个最简单的测试用例。要点你未必使用同样的技术栈,但你仍然可以拥有同样的编程节奏感这种的配方是依赖于,并且频繁。不要试图一次写出完备的测试。

超爽感觉

写程序的时候最爽的感觉可能就是一切顺利了:

每段代码一写出来就立即可以工作。

自己心里对于新代码的工作能力极为自信。

不会被 bug 或者一个问题卡住,而是不断向前进展,即使遇到问题也可以在很短时间搞定

在我们有这些感觉的时候,往往也是生产力最高的时候,而且结果一般也非常好。反之,我们代码磕磕绊绊的时候、被一个问题卡住动弹不得的时候、对代码没有任何自信的时候,一般实际的结果也确实糟糕。

尽管我们经常会期待学习新的技术会带来更多这样的流畅时刻,所以不断投入精力和时间去学习新的技术,但新技术却常常带来更多的麻烦和困惑,看起来并非这种 flow (流状态、请参考 flow)的可靠来源。

而糅合了 git、测试驱动的编程节奏感往往能带来这种超爽的感觉!

一段节奏

这是我自己记录一段的编程节奏:

已经决定特性 auth-svc 的开发,我打开 SourceTree 软件,按下 git-flow 按钮,开始一个新的特性分支 auth-svc。

打开 intelliJ IDEA 和项目,编程工作开始。

立即打开一个终端窗口,在里面运行 lein midje :autotest,让自动测试开始运行。如果项目已经处于良好健康状况,应该很快看到 all tests passed 的绿灯。

新建一个测试单元,或者在现成的测试单元中开始写 midje 测试用例。在 clojure 下和 midje 下,这一般非常容易,每个测试用例一般就 1-2 行代码。一般我的节奏是写 4-5 个最简单的测试用例。

把测试用例中假设会实现的函数制造出一个空实现。

按下 save all files 按钮,这时 idea 下的终端窗口会出现测试失败的红灯。

仔细检查所有的错误都如同预期,而且所有的测试都会失败。

将这些失败的测试 commit 进 git,commit message 一般是“完成测试代码写作”。

鉴于我已经完成了些东西,我会起身喝口水聊聊天什么的,或者简单走动下,预防颈椎病。

重新坐下开始实现真正的代码,让测试通过。每次完成一段代码,存盘后终端上应该会告诉我又有一个新的测试用例通过了。因为我的测试很少而且很小——往往仅仅完成一个功能的一个部分:

如果功能还没实现,我不会处理错误输入。(我也还没写错误检查用例)

如果这个实现就是在检查错误,我会将为每个要检查的错误写至少一个测试用例。

全部测试通过后,又可以看到令人心情愉悦的 all tests passed 的绿灯了!

把成功的实现 commit 进 git,然后再起身转一圈去。

重复上面的循环,直到这个特性全部实现。

大大地休息一下。

回来开始补充文档,顺手重构一下刚刚完成的代码。

将新的改动 commit 回 git。

在 sourceTree 里再次按下 git-flow 按钮结束这个特性。

要点

你未必使用同样的技术栈,但你仍然可以拥有同样的编程节奏感!这种 flow 的配方是:

依赖于 git,并且频繁 commit。极大提高安全感。你不会担心在代码里做实验,毕竟它比 ctrl-z 要可靠得多。我一般每完成5-20行代码就 commit 一次。(当然这是代码密度极高的 clojure 程序,如果是 Java 估计要 x4 或者 x5 了)

写小的测试,先写。这里的测试驱动目的其实倒不是质量,也是提高完成感。相当于给自己先设置了一个小关卡。

不要试图一次写出完备的测试。这样实现时心理压力会太大。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64176.html

相关文章

  • 微服务横行今天, 你文档跟上节奏了么?

    摘要:纳尼隔壁少林派表示自家金刚技压群雄在座各位都是。。。纳尼你觉得写太繁琐了你不喜欢我们还有或者等等一大堆工具呢。纳尼没有你还是觉得无法接受好吧那么笔者推荐类似这类更友好的工具你可以导入导出其他格式也可以使用其来撰写。 说起微服务, 想必现在的技术圈内人士个个都能谈笑风云, 娓娓道来。的确, 技术变革日新月异, 各种工具框架雨后春笋般涌现, 现在我们可以轻巧便捷地根据自己的业务需求, 构建...

    liaoyg8023 评论0 收藏0
  • Java™ 教程(面向对象编程概念)

    面向对象编程概念 如果你以前从未使用过面向对象的编程语言,那么在开始编写任何代码之前,你需要学习一些基本概念,本课将向你介绍对象、类、继承、接口和包,每个讨论都关注这些概念如何与现实世界相关,同时介绍Java编程语言的语法。 什么是对象? 对象是理解面向对象技术的关键,环顾四周,你会发现许多现实世界中的东西:你的狗,你的桌子,你的电视机,你的自行车。 真实世界的对象有两个特征:它们都有状态和行为,...

    FuisonDesign 评论0 收藏0
  • Google 以 Flutter 作为原生突破口,移动端即将统一了

    摘要:的前生今世系统系统作为全球第一大系统,基于开发的移动端有着诸多的性能优势。官方提供了丰富的原生接口封装系统结构图像处理引擎年图像处理引擎成立,用来展示火狐和其他自家的产品使用。而语言早已突破阶段,正稳步迈向阶段。 showImg(https://segmentfault.com/img/remote/1460000018724305); Android 的前生今世 Android 系统...

    skinner 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<