写点什么

筷子定理(二)

  • 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:23849

评论

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

MobPush iOS推送功能最佳实现推荐

MobTech袤博科技

ios 消息推送

开源是什么意思?开源软件优缺点有哪些?

行云管家

开源 软件 开源软件 开源协议

2022年云堡垒机采购就选行云管家五大理由

行云管家

云计算 网络安全 数据安全 云堡垒机

web技术分享| 虚拟列表实现

anyRTC开发者

Vue 前端 Web 音视频 虚拟列表

多云管理的挑战以及如何克服这些挑战

Java-fenn

Java

计算机网络——数据通信基础知识

StackOverflow

编程 计算机网络 9月月更

前端食堂技术周刊第 52 期:Babel 7.19.0、Fresh 1.1、React Native 0.70、新的 Web 性能指标 INP

童欧巴

供应链金融能否成为汽车行业发展的驱动力?

旺链科技

区块链 产业区块链 汽车 供应链金融 企业号九月金秋榜

C++ 学习 ------cmath 头文件的源码学习 02

Java-fenn

Java

三个Spring的问题把我问懵逼了

知识浅谈

spring 9月月更

性能之巅-优化你的程序

Java-fenn

Java

给分库分表的 ShardingSphere 提了个PR,这Bug居然改了

Java全栈架构师

MySQL 数据库 程序员 面试 分布分表

TDengine 3.0 的 Update 有何区别?

TDengine

tdengine 时序数据库 企业号九月金秋榜

如何设计一个面向未来的云原生数据库?

Zilliz

深度学习 数据库 云原生 信息检索 向量数据库

用typescript类型来实现快排

Java-fenn

Java

不是吧,还有人不知道三目运算符的BUG

自然

Java core 9月月更

CSS 有了:has伪类可以做些什么?

Java-fenn

Java

聊聊如何利用p6spy进行sql监控

Java-fenn

Java

Kubernetes 集群中日志采集的几种玩法

观测云

华为云为网站安全搭建一道智能高效屏障

科技怪咖

敏捷发版:让灰度发布像commit一样简单

Speedoooo

小程序 灰度发布 小程序容器 A/B 测试

一个不用写代码的案例,来看看Flowable到底给我们提供了哪些功能?

江南一点雨

Java springboot flowable

Java基础之Java枚举

自然

9月日更 Java core

【1-2 Golang】Go语言快速入门—数组与切片

Java-fenn

Java

组装式应用小程序化,小程序容器技术必不可少

Speedoooo

小程序 小程序容器 组装式应用 组装式创新

边缘计算和云计算之间的区别

Java-fenn

Java

JavaScript 闭包难点剖析

Java-fenn

Java

阿里双十一是怎么做全链路压测的?

程序员小毕

数据库 程序员 架构 面试 系统设计

FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)

矜辰所致

FreeRTOS 9月月更 任务通知 事件标志组 邮箱和消息队列

Java基础知识(一些需要注意的点)

自然

9月日更 Java core 9月月更

Java 流处理之收集器

Java-fenn

Java

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