程序员和普通人的思维模式有什么不同?
最近,一个朋友联系我,说想学编程,但是不知道自己适不适合做这个职业。于是问了我一个问题:程序员的思维模式和普通人有什么区别?
我知道他以前从未学过编程,而向毫无编程经验的人介绍编程思维相当困难。嗯,想了想,我打算换一种方式来解释这个问题。
我问他:如果你现在买两磅苹果,你会做什么?
他说:直接去水果店买吧。
我说:如果我们要把买苹果的过程用程序来表达出来,可能是这样的。
首先我们要明确我们的需求,例如:
-
我打算买大约两磅苹果
-
我可以接受的价格是每磅低于 1.5 美元
那么我们可以设计如下流程:
-
查询周边水果店,获取店铺列表;
-
逐一访问列表中的水果店,并执行以下操作:
- 去水果店;
- 如果水果店没有开门,则结束当前流程,然后访问下一家水果店;
- 如果水果店里没有剩余的苹果,则结束当前流程,然后访问下一家水果店;
- 如果苹果的价格高于每磅 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磅。你该如何选择呢?
我的朋友:嗯,还是有点困难。
我说:有些人会先把苹果堆按照品质进行排序,然后选出最好的苹果,但如何快速地对苹果堆进行排序又是另一个问题。
我朋友:好了,别说了,我脑子有点晕了,看来我还不适合当程序员。
我说:哈哈没事,有点饿了,先去买点苹果吧😁😁
文章来源:https://dev.to/bytefish/what-is-the-difference-in-thinking-model- Between-programmers-and-normal-persons-4c6m