昨天我分享了一篇如何使用 PlantUML 这门简单的语言来绘制复杂的活动图、流程图和组件图等,有的同学看到了以后,询问我,“外行需要多长时间才能学会这玩意儿呀?”,这个问题不知道该如何回答,因为我并不认同“外行”这个词。我始终认为,在编程这件事情上,每个人都是内行,每个人也都是外行。事实上,从不 了解 PlantUML 到能够参考文档绘制出复杂的流程图,我也就学了一个上午,边学习、边实践、边分享,于是就会了。

学会编程没有你想象中的那么复杂。

编程是什么?

编程,说的简单一点,就是通过一系列逻辑将你想做的事情或者想描述的物体表达清楚,然后让它展现出来,或者运动起来。

说的专业一点:

<aside> 💡 编程 = 算法 + 数据结构

</aside>

什么是算法?就是解决问题的办法,或者说通过几个步骤来解决一个问题的过程描述;那么什么是数据结构呢?咱们在解决问题的时候经常需要去放置一些物件,比如把书放到书架上,那么书架就是一种数据结构,把书放到柜子里,柜子就是一种数据结构,书架和柜子就是数据的不同呈现/储存方式。

其实,每个人对编程都不陌生,你进过厨房吧,17:00 回到家,怎么让家人在 18:30 之前吃上饭?这里头的算法就多了去了,你可以先煮上饭然后去买菜,也可以买完菜再回来煮饭,那么哪种方式更好呢?下面我们用程序语言来分析这道题:

编程问题: 17:00 回到家,怎么让家人在 18:30 之前吃上饭?
算法一:先煮上饭然后去买菜
算法二:买完菜再回来煮饭

这里的做饭是一个程序实体,它包含了煮饭、买菜、切菜、做菜,这个程序实体的表达方式是:

做饭 = {
  煮饭() {},
  买菜() {},
  切菜() {},
  做菜() {},
}

把中文换成英文不就是你平时看到的程序代码么?所以说呀,编程对你其实并不陌生,它也没你想象中的那么复杂。

编程的核心是什么?

为什么人跟人之间编写出来的代码有这么大的差异,或者说,为什么存在小白和专家的区别?编程确实不复杂,复杂的原因是很多人不能把问题思考周全,我举个例子你就知道了:

做饭 = {
  开始() {
    煮饭(); 买菜(); 切菜(); 做菜();
  },
  煮饭() {},
  买菜() {},
  切菜() {},
  做菜() {
    if (家里没有油了) { 买油(); 炒菜(); } 
    else { 炒菜(); }
  }
}

做饭->开始();

我们定义了一个程序实体叫做「做饭」,包含了几个步骤,开始、煮饭、买菜、切菜和做菜,在编程语言里头,我们把「做饭」称之为对象,这几个步骤称之为方法,「做饭」这个对象拥有 5 个方法,我们可以一个个地调用它。首先我们调用了「开始」方法,在这个方法里,又依次调用了「煮饭」、「买菜」、「切菜」和「做菜」。