我之死,有子存焉;子又生孙,孙又生子;子又有子,子又有孙。子子孙孙,无穷匮也。而山不加增,何苦而不平?” ——《愚公移山》,《列子·汤问篇》
1、 编程的精义
仅仅就编程序来说,实在是一件很简单的事,甚至可以说是一件劳力活。两千年前的寓言中,已经成就了一位工程名家:愚公。在这位名家的身上,浓缩了项目组织者、团队经理、编程人员、技术分析师等众多角色的优秀素质。他的出现,远远早于计算机发展的历史,甚至早于一些西方国家的文明史。
汤问篇中所述的愚公移山这一事件,我们看到了原始需求的产生:
“惩山北之塞,出入之迂”
我们也看到了项目沟通的基本方式:
“聚室而谋曰”
然后,我们看到愚公确定了一个项目的目标:
“毕力平险,指通豫南,达于汉阴”
并通过研讨,择定了一个井然有序的、可以实现的技术方案:
“扣石垦壤,箕畚运于渤海之尾”
在这个项目中,动用了三名技术人员和一名工程管理人员:
“(愚公)率子孙荷担者三夫”
并获得了一名力量较弱,但满富工作激情的外协:
“邻人京城氏之孀妻,有遗男,始龀,跳往助之”
基本上,这已经描述了“愚公移山”整个工程的概况。接下来,我们应该注意到愚公作为编程人员的基本素质。在与“河曲智叟”的对答中,他叙述了整个工程的实现程序:
“虽我之死,有子存焉”,这里描述了可能存在的分支结构,即“IF”条件判断。
“子又生孙,孙又生子;⋯⋯子子孙孙,无穷匮也”,这里描述了完成这个工程所必须的循环结构。
作为优秀的程序分析师,愚公论述了这个循环的可行性:由于“山不加增”,所以条件“山平”必将成立(“何苦而不平”),所以这不会是一个死循环。
在愚公的论述中,我们看到了编程的根本:顺序、分支和循环。庞大若“愚公移山”这样的工程,都是可以通过这样简单的编程来实现的。这,就是编程的精义了。
2、 会或者不会写程序的问题
我经常会被人问到“(我)能不能学会写程序”这样的问题。
这个问题由来以久。上溯七、八年,程序员还是少有人从事的职业。听说的人少,真正了解的人也不多。而当一个程序软件被装在电脑里并开始运行时,人们便开始惊讶于程序员的厉害。所以“能不能学会写程序”甚至成了一些人对自己的智力考评,所以便有人向我这样发问。
愚公都能明白的编程精义,那些向我发问的智叟们又怎么会不明白呢?
所以除了先天智障或后天懒惰者,都是可以学会写程序的。如果你能确信,自己知道在早上起床后需要:
如果天冷则先穿衣服后洗漱
如果天热则可反之
日复一日直到死亡
那么你就可以开始编程了。甚至,如果你认为以下条件成立:
如果有类似于生病、不能行动、以及意外的紧急事件,则当日可以略过
那么你就可以开始向设计师发展。因为你已经具备了一项常人不具备的基本素质:折衷。
3、程序 = 算法 + 结构
编程作为一种行为,只需要知道其逻辑方法就可以了。所谓编程实际上是把一件事情交给计算机去做,你认为这件事该如何做,就用“程序语言”的形式描述给计算机。如果你原本就不明白如何去做,那么你也不要期望计算机去理解你想要做什么。
所以编程的第一要务是先把事情分析清楚,事件先后的逻辑关系和依赖关系搞清楚,然后再去代码实现。一接到任务就开始Coding的程序员,通常就是加班最多的程序员。
记住:积极工作和勤于思考都要占时间。
第一个完成关于编程本质的思考的人,提出了一个公式“程序 = 算法 + 结构”。这个公式的精彩之处,在于它没有任何的地方提及到Code。甚至可以说,在这个公式里,代码是不存在的。
存在的只是思想。
算法是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体。只要开发人员将这个程序的算法设计出来了,把结构描述出来了,那么程序就已经定型了。剩下的事,简而言之,就是劳力活。
在计算机专业所学的课程中,同时讲述算法和结构的,是“数据结构”。现在,你放下手边这本书,再去读读被你扔到不知哪个角落的《数据结构》,你仔细看看,在所有的算法描述中,有且仅有三种执行逻辑:顺序、分支和循环。简单若顺序表,复杂如树、图,它们的算法都是用上面这三种执行逻辑来描述的。
4、语言
当你熟悉了一门语言之后,你会发现,编程语言只有喜欢与不喜欢的问题,没有会不会的问题。任何的一门语言,你都可以在两周内掌握并开始熟练编程。因为任何的一门语言,他们的底层函数库都是那么的相似,而他们API都是那样的依赖于操作系统。A语言里有的,B语言里也基本都有。
通常而言,语言的差别主要表现在适用范围上。一些语言适合做数值处理,小数点后可以精确到原子级,而小数点前则可以表达到宇宙之无穷;另一些语言则适合做图形处理,它的底层函数库比其它语言可以快上十倍或数十倍;还有一些语言则适合于做网页,要用它来做一个通讯薄软件都将是史无前人的挑战。
成天讨论这门语言好,或者那门语言坏的人,甚至是可悲的。不但是悲其一叶障目,更要悲叹于那种大愚若智的自得心态。
5、在没有工程的时代
在没有工程的时代,上面所说的就是一个程序员的全部。他们掌握了一门语言,懂得了一些生活中最常见的逻辑,他们用程序的方式思考和学习了一些算法,并根据前人的经验,把这些算法跑在了一些数据结构之上,最后,我们就看到了他们写的程序。
在没有工程的时代,出现了非常非常多的人物。其中算法大师,有游戏大师,有语言大师,有挣钱的大师⋯⋯
唯独,没有工程大师。嗯,可以理解嘛,那是没有工程的时代。好蛮荒,好远古的。
分享到:
相关推荐
7.如何装入一个系统预定义光标?(Visual C++编程 源代码)7.如何装入一个系统预定义光标?(Visual C++编程 源代码)7.如何装入一个系统预定义光标?(Visual C++编程 源代码)7.如何装入一个系统预定义光标?...
《Visual C++编程技巧精选500例》pdf Visual C++编程技巧精选500例.pdf 第1章 消息框 001 如何创建消息框? 002 如何设置消息框标题? 003 如何使用资源串创建消息框? 004 如何使用资源串动态显示消息框内容? 005 如何...
数控编程培训(果义围).pptx
编程环境与预定义对象PPT学习教案.pptx
你的电脑上必须安装有不低于OFFICE 2003版本及以上的可编程资源支持库,这些库文件具体安装方法可以在控件面板的添加删除软件里选择你安装的OFFICE,点击修改安装,然后自宝义安装,选择可编程资源支持,系统会自动...
2.8.2 给数组预定义维 2.8.3 下标或者索引操作 2.8.4 尽量多使用函数文件而少使用非脚本文件 2.8.5 将循环体中的内容转换为c-mex 2.8.6 内存优化 2.9 小结 第3章 matlab混合编程简介 3.1 进行混合编程的出发点 3.2 ...
47、如何访问预定义的GDI对象 48、如何获取GDI对象的属性信息 49、如何实现一个橡皮区矩形 50、如何更新翻转背景颜色的文本 51、如何创建一个具有特定点大小的字体 52、如何计算一个串的大小 53、如何显示旋转文本...
本书是讲述Visual Basic编程标准的一本专著。全书分5个部分,共14章。分别讲述使用Visual Basic编程时总体设计、代码结构设计、用户界面设计和小组软件开发应遵循的标准。全书配有大量应用实例,便于读者学以致用。...
07. 三国故事-桃园结义-项目源码与素材,Scratch少儿编程,经典教学作品,儿童益智游戏
【ASP.NET编程知识】ASP.NET预定义模板介绍.docx
天轰穿老师VS2010趣味编程视频教程,第05讲,预定义数据类型,FLV格式,压缩包自带10%恢复记录
易语言编程 精易模块 V3.2.ec
Linux Shell编程基础 1.调用shell 2.注释 3.执行shell脚本 4.接收用户输入并赋值给变量 5.Bash中的变量 1. 环境变量 1.1HOME 2.2LANG 3.3SHELL 4.4PATH 5.5PS1 6.6PS2 7.7只读环境变量 8.8永久修改环境变量 2. 位置...
实例3 预定义类型 实例4 类型转换 实例5 选择语句 实例6 循环语句 实例7 跳转语句 实例8 数组 实例9 枚举与结构类型 实例10 类 实例11 位运算 实例12 操作符重载 实例13 虚方法 ...
主要介绍ASP.NET网络编程中一些常用的JavaScrip的预定义对象和涵数.
预定义变量 第3章 cgi应用程序--顾客留言簿 html简介 使用cgi创建动态页面 guestbook.cgi脚本程序 定义表单以及处理表单数据 cgi.tcl软件包 接下去的几步 第4章 tcl中的字符串处理 string命令 append...
socket网络编程C++版小实验,有客户端和服务器端的源代码。 socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两...
Linux运维-3.Shell编程-11shell基础-115预定义变量.avi
而且由于中文是方块字,包含的信息量也大,能够见文知义。 通过以上,东西方文化的差异造成对编程学习上的很大区别,中文文化背景决定了中国人还是学自己的编程语言好。 [1] 市场推广 2004年易语言获得《科技查新...