伪代码、幽默和 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("感谢阅读");
}
}
公众号后台回复成长『成长』,将会得到我准备的学习资料,也能回复『加群』,一起学习进步;你还能回复『提问』,向我发起提问。
推荐阅读:
听说友善留言的人,运气都不会太差