朋友问我,程序员和非程序员的思维模式有什么区别?
英文 | https://javascript.plainenglish.io/what-is-the-difference-in-thinking-model-between-programmers-and-normal-persons-8ff8e2e9e94b
翻译 | 杨小爱
首先,我们必须明确我们的需求,例如:
我打算买两斤苹果。
我能接受的价格是每斤低于 1.5 美元。
那么,我们可以设计如下流程:
程序员需要以严谨和准确的方式考虑问题。
在上述过程中,我们需要记录周边的水果店,所以需要定义变量 friutShops。
我们需要依次访问不同的水果店,这叫做遍历。
然后我们需要判断边界条件,比如水果店不开门怎么办?如果苹果的价格超出我的预期怎么办?
我们在买苹果时,需要不断地把苹果放在袋子里,直到超过两斤,这个过程叫循环。
这些是程序员考虑问题时最基本的步骤。
如果我们用代码来表示这个过程,可能是这样的:
Query surrounding fruit shops to get fruitShops;
for(fruitShop in fruitShops){
if(fruitShop.isOpen == false){
break;
}
if(fruitShop.apple.price > 1.5){
Ask the shop owner whether he is willing to lower the price;
if(the shop owner does not agree){
break;
} else {
fruitShop.apple.price = newPrice;
}
}
Take a bag;
Start picking apples;
while(the weight of the apples in the bag is less than two pounds){
Pick an apple from the pile of apples;
Put the apple in the bag;
}
Calculate the total price of apples in the bag;
Total price = (weight of apples in the bag) * (unit price of apples);
Pay money;
Leave the shop;
return;
}
Take apples home;
朋友听了我的描述后说:嗯,你解释的很好,看起来很简单。
然后,我接着说:过程其实并不复杂,但是在实际开发中,我们要考虑的东西很多。
例如,在上述情况下,只要我们找到一家苹果价格低于 1.5 美元/斤的商店,我们就会立即购买苹果。但是如果现在,我们想要找到一家苹果最便宜的水果,我们应该做什么?
朋友说:那很简单呀,直接去每个水果店询问价格,然后我们就可以找到苹果价格最低的水果店了。
我说:可是我们很懒,不想走太多路。现在我们周围有10家水果店,分布在不同的位置。如果我们想遍历这 10 家水果店的同时还要尽量少走路,那我们如何安排关顾水果的顺序,并且尽量减少总路程?
想了半天,朋友回答:嗯,这个问题听起来很复杂,我不知道。
我说:没关系,这实际上是编程中的经典算法问题,现在你不会想到答案是正常的。程序员在编程开发时,不仅要正确解决问题,还要尽可能高效地解决问题。在开发过程中,我们正在逐一解决类似的问题。
然后,我接着继续说:而当我们选择苹果的时候,我们都希望买更大更红的苹果。现在你需要从一堆苹果中选择 N 个苹果。你需要确保它们是最好的苹果,并且它们的质量总和刚刚超过 2 斤,你该如何选择?
朋友:嗯,还是有点难。
我说:有些人会先把苹果堆按质量分拣,然后再挑选最好的苹果,但如何快速分拣苹果,这又是另外一个问题。
朋友:好了,别说了,我脑子有点晕,看来我还是不适合做程序员。
我说:哈哈,没关系,我现在有点饿了,我们先去买些苹果充饥吧,^_^^_^。
学习更多技能
请点击下方公众号