写点什么

筷子定理(二)

  • 2020-01-17
  • 本文字数:919 字

    阅读完需:约 3 分钟

筷子定理(二)

我的筷子定理

还拿开头的 TDD 为例,一般我们大多数人习惯的方式是遇到问题后(例如实现一个计算前 n 位斐波那契数的函数),采用的是自上而下的设计实现方式,就是先想一个解决方案(例如递归啊什么的),然后写代码实现,这很自然是吧,相信大多数人也是这么做得。


而 TDD 所使用的方式是自下而上的设计实现方式,就是先快速解决 n 是 1 的情况,再快速解决 n 是 2 的情况,以此类推,通过不断地“红-绿-重构”来驱动实现的一步步演进同时驱动出好的设计。


乍一看 TDD 所使用的方式有点古怪,而且这个思路的转换对于大多数人都很难,难到让人本能的就想抗拒。所以才会有了这个问题:既然自上而下的方式已经可以解决问题了,为什么还要去自讨苦吃地去学习 TDD 自下而上的方式呢?


看来……是时候掏出我的筷子了…… (▭-▭)✧


如果说解决一个具体问题的过程,可以类比成寻找一根筷子平衡点的过程。


传统的自上而下的设计实现方式就像从左向右寻找筷子的平衡点。



而 TDD 中所描述的自下而上的设计实现方式则像是从右向左寻找筷子的平衡点。



两种方式虽然方向不同,但目标是相同的,自然也没有好坏之分。


既然都可以做到,为什么我还需要学两种不同的方式呢?


答案很简单:因为你会的越多,选择才会越多,也才有可能融会贯通,突破极限,达到一个更高的境界。例如,在找筷子平衡点这个问题上,就可以通过结合这两种不同的方式让整个过程变得更快,且更加容易(我闺女都能轻易做到)。而面对复杂的软件问题时,知识越多,视角越多,同样也可以帮我们从不同方向快速的逼近真正的目标。



那什么是经验呢?在我看来经验就是可以帮我们从一个比别人更接近最终目标的起点开始,而且速度更快一些而已。



那大神是什么?简单来讲大神就是经验丰富到一定程度后,起点无限接近于最终目标而已。



作为大神级人物,当然不止这些,还可以做到触类旁通,融会贯通。甚至突破一些我们认为不能突破的限制,快速的学习和掌握类似的知识技能。


所以

  • 不要问我为什么要学,尝试去问我为什么不学。

  • 不要给自己设围墙,勇于乐于尝试各种不同的语言、工具、思想、甚至看问题的角度。

  • 要持续不断地练习、反思、改进,大神之路就在前方。


本文转载自健荐公众号。


原文链接:https://mp.weixin.qq.com/s/GoG2DGRRkTMF1mA_ARb48w


2020-01-17 11:23662

评论

发布
暂无评论
发现更多内容

线程如何实现保持同步

编程江湖

Java 多线程

Python Qt GUI设计:QComboBox下拉列表框类(基础篇—14)

不脱发的程序猿

Python qt PyQt GUI设计 QComboBox下拉列表框类

Spring中的Controller和Service是线程安全的吗?我有点懵

热爱java的分享家

Java spring 程序人生 编程语言 经验分享

Spring Bean生命周期你除了会背八股文面试,真的会用了吗?

热爱java的分享家

Java spring 程序人生 编程语言 经验分享

如何判断一个需求是真的用户需求,还是伪需求呢?

石云升

产品思维 需求分析 11月日更

终于把性能测试这事儿讲清楚了

博睿数据

一次搞懂SpringBoot核心原理:自动配置、事件驱动、Condition

热爱java的分享家

Java 程序人生 Spring Boot 编程语言 经验分享

提升研发效能的低代码思路

赫杰辉

研发效能 低代码平台 x-series

Python代码阅读(第61篇):延迟调用函数

Felix

Python 编程 Code 阅读代码 Python初学者

Spark面试题大全

编程江湖

大数据 Spark面试题

Go WebSocket开发与测试实践【gorilla/websocket】

FunTester

Java websocket 接口测试 Go 语言 FunTester

【AI最前线】精准优质-资讯|分享|热议第41期

百度大脑

人工智能

钉钉小程序快照技术初窥

阿里巴巴终端技术

小程序 ios android 快照 体验优化

通过 for 循环,比较 Python 与 Ruby 编程思想的差别

Python猫

Python

App 端自动化的最佳方案,完全解放双手!

星安果

Python 自动化 爬虫

快上车丨直播课“Hello ArkansasUI:初识Slider组件(eTS)”来啦

HarmonyOS开发者

HarmonyOS

GitHub霸榜月余的24万字Java面试手册,竟是阿里机密

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

Java 项目中使用 Resilience4j 框架实现客户端 API 调用的限速/节流机制

码语者

Java 限速 节流 Resilience4j RateLimit

分布式系统的架构演进过程(一)

卢卡多多

分布式, 11月日更

如何运用Camtasia中的交互性?

淋雨

Camtasia

看完源码记不住?掌握这套方法,Alibaba不会少你一个工位

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

华为顶级安全专家分享出来这份‘典藏版’Linux开发实战笔记

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

EMQ 出席 2021 ArchSummit,打造全连接时代的数据基础设施

EMQ映云科技

大数据 物联网 IoT 智能

拒绝卡顿,揭秘盒马鲜生 APP Android 短视频秒播优化方案

阿里巴巴终端技术

android App 短视频 移动开发 体验优化

远程工作的这几年

程序员铮铮

程序员 代码人生 远程工作

构建多云战略的注意事项

云计算

贪心:柠檬水找零、跳跃游戏🍋

空城机

JavaScript 贪心算法 11月日更

如何设计一款跨平台低延迟的RTMP|RTSP直播播放器

音视频牛哥

WebRTC HLS RTMP RTSP

海康摄像机RTSP地址格式(官方最新版)

音视频牛哥

WebRTC RTMP RTSP 播放器

在 JavaScript 中如何检查对象为空

编程江湖

JavaScript 大前端

如何实现在线播放mpeg-ts文件?

Changing Lin

11月日更

筷子定理(二)_语言 & 开发_王健_InfoQ精选文章