搭建应用程序框架,从一个文本编辑器聊起
文本编辑器,是我们那个时代的,要想成为程序员,第一个要编写的大程序。因为它会让你,开始具备软件设计、软件工程思维。
哈哈。//本篇是讲课备课材料,翻出来发到这里,是为了先占住知识产权的,供有需要的家庭参考:
搭建应用程序框架,从一个文本编辑器聊起
爱上编程一学期之后,我面临一些问题。
以我的数学基础,轻松理解了算法与数据结构的精妙,理解了“程序=算法+数据结构”。也编写了若干几百行代码的程序。积累了一批自己的库函数,编程熟练度很高了。
当时我写了一个工具,启动后指定目录,能把这个目录下的源代码文本文件,按顺序打开前四行给我看。DOS时代,每次只能显示一个文件,按一下键盘,就能打开下一个文件的前四行。实现方法也简单啊,设计一个链表,每个链表提取一个文件的前4行,每次显示一个文件的就行。
为什么要设计这个工具呢?因为我写的库函数,前四行是注释,说明这个文件,有什么作用。但光看文件名,我并不能判断这个文件里有什么我要调用的库函数啊。毕竟写了这么多。就需要这个工具打开来看看。
但如果我想同时打开n个文件来看呢?就需要一个文本编辑器了。
当时呢,编程之余,我在图书馆啃书。有源代码的书,我都去看看。有的书上,用若干行大程序帮你微积分计算,这是计算机帮我们做工程计算;有的书上,数千行代码,能帮你做数字电路分析设计,这是工程设计……
但基本上,都是没有什么用户界面的,简单输入后,程序运行,出结果。我认为这都只是程序,但不算应用程序。毕竟基本的用户界面都没有啊。而我,想写应用程序了,这个想法,驱动我继续啃书。很快,有几本书,不约而同,都提到了设计一个文本编辑器的办法。大概有至少三本书提到了,哈哈,我大学时候,习惯同一个主题,同时看三本书,这次也没例外。
其中两个文本编辑器,我认为没有什么扩展性,不值得借鉴。但有一个设计很有意思,它把用户界面抽象出来了!你简单改改,增加一些菜单项,就能增加很多功能。比如,批量显示文档前4行。我抄袭了这个编辑器的代码,并增加了我要的功能。
但这个设计,其实有些奇怪,有些地方,为了实现用户界面和其他部分的隔离,多写了很多代码。好像有点多此一举。后来我知道了,这叫解耦。让用户界面,和其他部分,接口最少。让应用程序,更加高度模块化。我抄袭修改为我所用、再领悟之后,欣赏了这个设计。改变了自己的编程习惯,我吸收了这个思想,我的编程水平,上了一个台阶。
再后来,我啃到了一本讲应用程序框架的书。那本书,用PASCAL写的演示代码,要命了,但还好,对我不是问题,我再次领悟应用编程框架的概念,学到了更多设计模式,当然也看到了更多算法和数据结构的应用。这一次,我知道真实可用的应用程序,和我们一般写代码的区别了。这一次,我快速写了一个编辑器。再后来,我模仿着,手搓了一个应用框架;再后来,我把这个框架的底层,像Windows一样,搞了一个抢先式多任务,哈哈,我就觉得我可以接活开发任何嵌入式系统了。虽然应该还有bug,虽然穷学生,找不到开发板写入来测试下(当时可以邮购,我舍不得。学校的工控机,同组的研究生,怕我折腾坏了)。但DOS上,DEMO下,没问题了。
进入Windows时代了,各种应用框架满天飞。我那个框架,就显得很简陋了。
但是,我还是建议今天的学生,先随便选一个框架,先实现一个文本编辑器,理解框架编程的特点。
如果还想更进一步。自己手搓一个简单的应用程序框架,等你实现了。你对应用框架的理解,会更上一层楼;你的编程水平,会一下子上好几个台阶的。你看很多事情,都通透了,你可以开启你的软件架构师之路了。
NOTE:
当然,当你跨越过这个阶段后,理解了各种设计模式之后,你又回到了最开始的状态,懂算法,懂更多底层应用,才是你的核心竞争力。因为别人啊,数学一般,学这些更难。但会用应用框架,懂某个行业,在某个行业里应用,还是简单的。最后,又回到了,你要在哪个领域,深入的问题了。
NOTE2:
有了插件系统,应用程序,它也可以是一个小型操作系统啊。所以,小程序的出现,很自然了。何况,张小龙的Foxmail,以前的插件系统,就设计得很好啊。

@爱编程的魏校长,微博头部教育大V;家长辅导孩子,中小学生学习类用书:《艾宾浩斯记忆法:打造过目不忘的学习脑》作者;少儿编程,编程入行图书《 C语言零起点精进攻略——C/C++入门·提高·精通》作者。原创大量以脑科学、认知心理学为基础的学习方法文章。这里是他的微博文章精华汇集处,欢迎关注!
推荐阅读:
夜雨聆风