英文 | https://javascript.plainenglish.io/what-is-the-difference-in-thinking-model-between-programmers-and-normal-persons-8ff8e2e9e94b
翻译 | 杨小爱
最近,我的一个朋友来找我,他跟我说,他想学编程,但不知道自己是否适合这个职业,于是,他问了我一个问题:在思维模式上,程序员和非程序员的人有区别吗?
我知道他以前从来没有学过编程,向没有编码经验的人介绍编程思想是相当困难的。我想了想,打算换一种方式来解释这个问题。
我问他:如果你现在买两斤苹果,你会怎么做?
他说:直接去水果店买。
我说:如果我们要以编程方式表达买苹果的过程,可能是这样的。
首先,我们必须明确我们的需求,例如:
- 我打算买两斤苹果。
- 我能接受的价格是每斤低于 1.5 美元。
那么,我们可以设计如下流程:
程序员需要以严谨和准确的方式考虑问题。
- 在上述过程中,我们需要记录周边的水果店,所以需要定义变量 friutShops。
- 我们需要依次访问不同的水果店,这叫做遍历。
- 然后我们需要判断边界条件,比如水果店不开门怎么办?如果苹果的价格超出我的预期怎么办?
- 我们在买苹果时,需要不断地把苹果放在袋子里,直到超过两斤,这个过程叫循环。
这些是程序员考虑问题时最基本的步骤。
如果我们用代码来表示这个过程,可能是这样的:
朋友听了我的描述后说:嗯,你解释的很好,看起来很简单。
然后,我接着说:过程其实并不复杂,但是在实际开发中,我们要考虑的东西很多。
例如,在上述情况下,只要我们找到一家苹果价格低于 1.5 美元/斤的商店,我们就会立即购买苹果。但是如果现在,我们想要找到一家苹果最便宜的水果,我们应该做什么?
朋友说:那很简单呀,直接去每个水果店询问价格,然后我们就可以找到苹果价格最低的水果店了。
我说:可是我们很懒,不想走太多路。现在我们周围有10家水果店,分布在不同的位置。如果我们想遍历这 10 家水果店的同时还要尽量少走路,那我们如何安排关顾水果的顺序,并且尽量减少总路程?
想了半天,朋友回答:嗯,这个问题听起来很复杂,我不知道。
我说:没关系,这实际上是编程中的经典算法问题,现在你不会想到答案是正常的。程序员在编程开发时,不仅要正确解决问题,还要尽可能高效地解决问题。在开发过程中,我们正在逐一解决类似的问题。
然后,我接着继续说:而当我们选择苹果的时候,我们都希望买更大更红的苹果。现在你需要从一堆苹果中选择 N 个苹果。你需要确保它们是最好的苹果,并且它们的质量总和刚刚超过 2 斤,你该如何选择?
朋友:嗯,还是有点难。
我说:有些人会先把苹果堆按质量分拣,然后再挑选最好的苹果,但如何快速分拣苹果,这又是另外一个问题。
朋友:好了,别说了,我脑子有点晕,看来我还是不适合做程序员。
我说:哈哈,没关系,我现在有点饿了,我们先去买些苹果充饥吧,^_^^_^。