在愚公的论述中,我们看到了编程的根本:顺序、分支和循环。庞大若“愚公移山”这样的工程,都是可以通过这样简单的编程来实现的。这,就是编程的精义了。编程作为一种行为时,我们只需要知道其逻辑方法就行可以了。所谓编程实际上就是把一件事情交给计算机去做,你认为这件事该如何做,就用“程序语言”的形式描述给计算机。如果你原本就不明白如何去做,那么你也不要期望计算机去理解你想要做什么。在SIP+RTP中实现mark拖动时,我对这句话深有体会,在编码以前,一定要先用自然语言描述好逻辑流程,否则到后面自己都搞不清楚哪儿有问题,到处都是缺陷!所以编程的第一要务是先把事情分析清楚,把事件的先后逻辑关系和依赖关系搞清楚,然后再去写代码实现。一接到任务就开始Coding的程序员,通常就是加班最多的程序员。任何一门语言,你都可以在两周内掌握并开始熟练编程。因为任何一门语言,它们的底层函数库都是那样地相似,它们的API都是那样地依赖于操作系统。在没有工程的时代,上面所说的就是一个程序员的全部。他们掌握了一门语言,懂得了一些生活中最常见的逻辑,他们用程序的方式思考和学习了一些算法,并根据前人的经验,把这些算法运行在一些数据结构之上。最后,我们就看到了他们写的程序。
勤快的愚公创造不了方法。这我已经说过了。对于要把“一百万行代码写到一个文件里”,并且查找一个函数要在编辑器里按5000次Page up/Page down键的勤快人来说,是不能指望他们创造出“单元文件(Unit)”这样的开发方法来的。要是我够懒的话,我能把性能测试自动化起来吗?感觉要是做出来了的话,一定很爽,对于以后的测试很有借鉴意义,可以思考一下。我当时便反问他:“你既然知道如何把书分类、规整得整整齐齐地放在书桌上,那怎么没想到如何把所学的知识分类一下,归纳一下,整整齐齐地放到脑子里呢?”而与“面向对象”是否出现完全无关的一个东西,却因为“过程”和“单元”的出现而出现了。这就是“工程(engineering) ” 。