伪代码、幽默和 Google 的艺术!

承香墨影

最快捷的技术进阶之路

作者 | Joseph Cardillo

翻译 | 承香墨影

授权 承香墨影 翻译并发布

Hi,大家好,我是承香墨影!

最近在 Medium 上看到一篇文章,挺有意思的,叫《伪代码、幽默和谷歌的艺术》,很少看见外国的技术博客里,引用了老子的《道德经》,把老子已退为进的处事哲学放在了学习编码的过程中。

有时候,为了更快的看到成效,我们埋头去干,解决当前最棘手的问题,但是它并不是一个高效的解决问题的思路。有时候,停下来,退一步,你能看到更多你之前忽略的细节。

在编码的过程中,伪代码帮我们看清楚更多的细节。

原文可以点击底部“阅读原文”查看,以下是我的意译,或者说重新写了一遍!


到目前为止,我在编程的过程中,学到的最重要的东西,都与编码无关。相反那些让我觉得重要的事情,都发生在编码之前已经编码的间隙发生的事情。

当我第一次遇到棘手的问题需要解决时,我的直接反应是直接在 Google 上搜索答案。做别的事情,好像都是在在耽误时间,除了搜索。

但是我很快意识到,这是不正确的。

用兵有言:"吾不敢为主,而为客;不敢进寸,而退尺。"

— 《道德经》 No.69

大概意思:

用兵的人曾经这样说,“我不敢主动进犯,而采取守势;不敢前进一步,而宁可后退一尺。”

我从来没有参加过战争,但是我认为我理解上面《道德经》中的这个想法。

在战争中,看起来向前进攻是你能做的最有成效的事情,撤退都是失利于敌人,给他们带来好处。但是,情况并非一定如此。

当我保持这样的思想,在编写代码的时候,我发现它有助于我后退一步,看清楚大局。

通过编写伪代码,并用铅笔和纸张思考问题,让我对现有问题进行更深层次的思考,以带有远见的眼光,从全局去看待问题,从而从不同的角度,发现不同的见解。长远来看,这实际上节省了我的时间。

编写伪代码

当我第一次要求自己编写伪代码的时候,我并没有看到它的好处。也许这是因为我们正在研究不需要大量伪代码的简单逻辑。

但是,随着逻辑变的更加复杂,以这种方式让编写伪代码这件事情变得无价。它给了我一个从头到尾,屡清楚问题的机会。

我的伪代码编写步骤:

1、阅读该问题

2、以最清楚的形式,描述问题,拆解问题。即使在这个过程中,逐字的描述同一个问题。我从哪里开始?我要去哪里?我采取什么样的路线?一路上我选用什么交通工具?我需要什么工具?我需要什么样的功能?

3、回到#2,并为每个子问题,填充解决方案。我可以问自己、他人或者 Google 我不知道的问题,我会一直问下去,直到找到答案。

4、开始编码。

5、测试解决问题的每一个实现步骤。

6、重复#5

7、重复#5

8、重复#5

……

首先想想,然后 Google

碰到问题,我的另一个直觉反应是立即在 Google 上搜索答案。我们被告知,80~90%(或者更多)的开发者,日常工作花费的时间,就是从 Google 上搜索解决方案。那为什么我不这么做?

我无法证明这一点,这是否是一个成熟的开发者应该做的。但是我能意识到的是,Google 确实有很多方法可以帮助到我,可有些方法实际上却是适得其反的。

我发现,当我遇到问题首先转向 Google 时,我大脑中有一个部分正在关闭。

如果我在思考之前就转向 Google,我实际上并没有像程序员那样思考。

我的意思是:如果我不花时间编写伪代码,并仔细考虑项目的细节,那么我将以低效的方式,漫无目的在 Google 上搜索。这最终会浪费我的时间。

问题实际上比答案更重要!

在短期内,尽管编写伪代码可能让我觉得自己要走两步然后退一步,但是实际上这样可以节约时间并且没有那么头疼。这将有助于我更深入的了解我在 Google 上提出的问题。我更明白我在问什么?为什么会问这个问题。

Log 输出一切

使用 Log 输出一切,这是一个巨大的改变。

起初我并没有意识到这一点,但它也节省了我大量的时间和精力。它让我有机会在 Console 中测试每个想法,看看它是否真实有效,以及是否存在任何错误。

一次失败等于一次机会。

这是我想到的一句话,Console 是无情的。

但是正因为如此,它也是我最好的工具,它并不会安慰我说,我的代码看起来很棒,我很帅,做的很好等等。

如果有功能是失败的,Console 会让我知道。它不赞美或者贬低我。它让我保持谦虚,这让我感动。

如果伪代码帮助我将流程分解为婴儿般的步骤,那么 Console 会帮助我将其分解成更微小的步骤。

例如:假如我的想要创建一个函数,其中需要使用 findViewById 来获取一个 View。

当我们通过 id 来获取目标 View 的时候,如果调用 findViewById 一切正常,我将得到一个 View 对象,如果失败,Console 会将错误抛出来,让我知道我这里错了。

Console 让我有机会在错误中吸取教训。它可以帮助我更好的找到问题、提出问题。

带着幽默感

编程可能令人沮丧!我只是一个初学者。但是,如果我能一路上保持幽默感,它可能有助于缓解我的紧张情绪。

我尝试用伪代码编写一些幽默的东西,即使是在自嘲,因为自嘲有助于缓解我的紧张情绪,并帮我保持冷静。

fun letsConnect(yes) {
 if (yes === true) {
   Log.i("cxmy","关注承香墨影(cxmyDev)")
 } else {
   Log.i("感谢阅读");
 }
}

公众号后台回复成长『成长』,将会得到我准备的学习资料,也能回复『加群』,一起学习进步;你还能回复『提问』,向我发起提问。

推荐阅读:

听说友善留言的人,运气都不会太差

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值