程序员和普通人的思维模式有什么不同?

2025-06-04

程序员和普通人的思维模式有什么不同?

最近,一个朋友联系我,说想学编程,但是不知道自己适不适合做这个职业。于是问了我一个问题:程序员的思维模式和普通人有什么区别?

我知道他以前从未学过编程,而向毫无编程经验的人介绍编程思维相当困难。嗯,想了想,我打算换一种方式来解释这个问题。

我问他:如果你现在买两磅苹果,你会做什么?

他说:直接去水果店买吧。

我说:如果我们要把买苹果的过程用程序来表达出来,可能是这样的。


首先我们要明确我们的需求,例如:

  • 我打算买大约两磅苹果

  • 我可以接受的价格是每磅低于 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;
Enter fullscreen mode Exit fullscreen mode

朋友听了我的描述后说:嗯,你解释得很好,看起来很简单。

然后,我继续说道:这个过程其实并不复杂,但在实际开发中,我们需要考虑很多事情。比如,在上面的案例中,只要我们找到一家苹果价格低于每磅1.5美元的商店,我们就会立即购买苹果。但如果现在我们想找到苹果价格最低的水果店,该怎么办?

朋友说:太简单了,去每家水果店问问价格,然后找到价格最低的那家水果店就行了。

我说:但是我们很懒,不想走太多路。现在我们周围有10家水果店,它们分布在不同的位置。如果我们想在遍历这10家水果店时尽可能少地走路,我们怎样安排访问顺序才能使总路径最小?

朋友想了很久之后回答说:嗯,这个问题听起来很复杂,我不知道。

我说:没事。这其实是编程里一个经典的算法题,一时想不出来答案很正常。程序员写代码,不仅要正确地解决问题,还要尽可能高效地解决问题。在开发过程中,我们也是在一一解决类似的问题。

然后我继续说:我们选苹果的时候,都希望买到更大更红的。现在你需要从这堆苹果里选出N个苹果。而且你需要确保它们是最好的苹果,并且它们的质量总和刚好超过2磅。你该如何选择呢?

我的朋友:嗯,还是有点困难。

我说:有些人会先把苹果堆按照品质进行排序,然后选出最好的苹果,但如何快速地对苹果堆进行排序又是另一个问题。

我朋友:好了,别说了,我脑子有点晕了,看来我还不适合当程序员。

我说:哈哈没事,有点饿了,先去买点苹果吧😁😁

文章来源:https://dev.to/bytefish/what-is-the-difference-in-thinking-model- Between-programmers-and-normal-persons-4c6m
PREV
15 个 CSS 相对单位,你知道多少个?em、rem、ex、cap、ch、ic……
NEXT
为亚马逊编写代码是什么感觉(结论)一线希望正在继续……