
做为一个有着计算机专业学历,但现在连手机都玩不明白的专业人士来说,编程在日常生活中多少还是有些用处的。
先说比较直接的,就是和编程有关的东西吧,比如我上学的时候虽然也学过些编程,但只李高滚是一些基础知识而已,根本没有能力去做一个系统之类的东西,然后上班以后,我的工作和编程又一点关系都没有,编程是编出来让人用,而我的工作是用别人已经做好的东西。
虽然如此,因为一个系统肯定是尽可能兼容,同时满足大范围需求的集合体,那么对于一些特别的需求可能现有的功能就不够了,要么说工作才是学习最好的老师呢。为了完成任务有的时候真是没办法,不得不去学一些东西。
我们需要的一些数据,直接从系统里拿出来是用不了的,系统跑出来的只是念搭原始数据,必须要后哪余期加工,那么如果用人工来 *** 作的话,那简单的一个小要求可能就够做一整天 的,倒不是说有多复杂,只是太麻烦,需要海量的重复劳动。
为此,领导认为,我既然是学计算机的,那想办法给简化一下吧!提高一下大家的工作效率。我一个打工的能说啥,那就想办法呗。然后就通过我们平时最常用的电子表格给的一个扩展功能,叫宏,来做为突破口。
还好在我的不断努力下,虽然编的东西我自己可能过后都看不懂,但结果还是不错的,通过宏模块的应用,我们的工作效率 大大提高,而且降低了人工 *** 作出错的机率,对这件事其实我也是满有成就感的,那么做了这件事之后的结果呢?领导认为,他的需求都可以被很轻松的实现了!同事一旦遇到了什么麻烦的活,就会想到我是不是可以给编点代码呢。至于工资,没有因为宏的广泛应用而有一点变化。
那么除了实际的应用外,其实编程的思想我认为是更重要的一种能力,我当然也没学过什么高深的东西,甚至连学校学的那点基础都忘差不多了。但是我还是认为程序设计的一些思想对于日常生活中遇到的很多问题还是有着非常不错的指导意义的,比如不论遇到什么问题,都把它看成一个需求,那么一点点的把这个大的需求拆分成小块之后,再看起来这事儿可能就没刚开始想像中的那么不可完成了。
编程的用处有多少,就看你能把它和日常生活做出多大的关联度了。
我来举个例子吧,我做过的.你可以制作一块电路板,用单片机控制的,这可以用C语坦雀言来写单片机的控制程序,然后将这块电路板连接到计算机串口或并口或usb口,用C写一个计算机程序汪没,通过控制这块电路板实现对家用电器的控制,如果加上遥控模块,可以通过计算机遥控各种设备,想想你在外面玩电脑控制家里的电饭堡,微波炉让陵早吧,也可以用手机发消息来控制,这不是想象,是我已经做出的产品. 对了,就是C, 也有Delphi(Pascal)实现的版本.
程乱判序设计主要方法有面向结构的方法和面向对象的方法。\x0d\x0a结构化程序设计\x0d\x0a\x0d\x0a 随着计算机的价格不断下降,硬件环境不断改善,运行速度不断提升。程序越写越大,功能越来越强,讲究技巧的程序设计方法已经不能适应需求了。记得是哪本书上讲过,一个软件的开发成本是由:程序设计 30% 和程序维护 70% 构成。这是书上给出的一个理论值,但实际上,从我十几年的工作经验中,我得到的体会是:程序设计占 10%,而维护要占 90%。也许我说的还是太保守了,维护的成本还应该再提高。下面这个程序,提供了两种设计方案,大家看看哪个更好一些那?\x0d\x0a\x0d\x0a 题目:对一个数组中的100个元素,从小到大排序并显示输出。(BASIC)\x0d\x0a\x0d\x0a 方法1:冒泡法排序,同时输出。 \x0d\x0a\x0d\x0aFOR I=1 TO 100\x0d\x0a FOR J=I+1 TO 100\x0d\x0a IF A[I] >A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T\x0d\x0a NEXT J\x0d\x0a ? A[I]\x0d\x0aNEXT I\x0d\x0a\x0d\x0a 方法2:冒泡法排序,然后再输出。\x0d\x0a\x0d\x0aFOR I=1 TO 100\x0d\x0aFOR J=I+1 TO 100\x0d\x0aIF A[I] >A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T\x0d\x0aNEXT\x0d\x0aNEXT\x0d\x0a\x0d\x0aFOR I=1 TO 100\x0d\x0a? A[I]\x0d\x0aNEXT \x0d\x0a\x0d\x0a 显然,“方法1”比“方法2”的效率要高,运行的更快。但是,从现在的程序设计角度来看,“方法2”更高级。原因很简单:(1)功能模块分割清晰——易读;(2)也是最重要的——易维护。程序在设计阶段的时候,就要考虑以后的维护问题。比如现在是实现了在屏幕上的输出,也许将来某一天,你要修改程序,输出到打印机上、输出到绘图仪上;也许将来某一天,你学习了一个新的高级的排序方法,由“冒泡法”改进为“快速排序”、“堆排序”。那么在“方法2”的基础上进行修改,是不是就更简单了,更容易了?!这种把功能模块分离的程序设计方法,就叫“结构化程序设计”。\x0d\x0a\x0d\x0a面向对象的程序设计\x0d\x0a\x0d\x0a 随着程序的设计的复杂性增加,结构化程序设计方法又不够用了。不够用的根本原因是“代码重用”的时候不方便。面向对象的方法诞生了,它通过继承来实现比较完善的代码重用功能。很多学生在应聘工作,面试的时候,常被问及一个问题“你来谈谈什么是面向对象的程序设计”,学生无言,回来问我,这个问题应该怎么回答。我告诉他,你只要说一句话就够了“面向对象程序设计是对数据的封装;范式(模板)的程序设计是对算法的封装。”后来再有学生遇到了这个问题,只简单的一句对答,对方就对这个学生就刮目相看了(学生后来自豪地告诉我的)。为什么那?因为只有经过彻底的体会和实践才能提炼出这个精华。\x0d\x0a\x0d\x0a 面向对象的设计方法和思想,其实早在70年代初就已经被提出来了。其目的就是:强制程序必须通过函数的方式来 *** 纵数据。这样实现了数据的封装,就避免了以前设计方法中的,任何代码都可以随便 *** 作数据而因起的BUG,而查找修改这个BUG是非常困难的。那么你可以说,即使我不使用面向对象,当我想访问某个数据的时候,我就通过调用函数访问不就可以了吗?是的,的确可以,但并不是强制的。人都有惰性,当我想对 i 加1的时候,干吗非要调用函数呀?算了,直接i++多省事呀。呵呵,正式由于这个懒惰,当程序哗或改出BUG的时候,可就不好捉啦。而面向对象是强制性的,从编译阶段就解决了你懒惰的问题。\x0d\x0a\x0d\x0a 巧合的是,面向对象的思想,其实和我们的日常生活中处理问题是吻合的。举例来说,我打算丢掉一个茶杯,怎么扔那?太简单团悔了,拿起茶杯,走到垃圾桶,扔!注意分析这个过程,我们是先选一个“对象”------茶杯,然后向这个对象施加一个动作——扔。每个对象所能施加在它上面的动作是有一定限制的:茶杯,可以被扔,可以被砸,可以用来喝水,可以敲它发出声音......;一张纸,可以被写字,可以撕,可以烧......。也就是说,一旦确定了一个对象,则方法也就跟着确定了。我们的日常生活就是如此。但是,大家回想一下我们程序设计和对计算机的 *** 作,却不是这样的。拿DOS的 *** 作来说,我要删除一个文件,方法是在DOS提示符下:c:>del 文件名。注意看这个过程,动作在前(del),对象在后(文件名),和面向对象的方法正好顺序相反。那么只是一个顺序的问题,会带来什么影响那?呵呵,大家一定看到过这个现象:File not found. “啊~~~,我错了,我错了,文件名敲错了一个字母”,于是重新输入:c:>del 文件名2。不幸又发生了,计算机报告:File read only. 哈哈,痛苦吧:)。所以DOS的 *** 作其实是违反我们日常生活中的习惯的(当然,以前谁也没有提出过异议),而现在由于使用了面向对象的设计,那么这些问题,就在编译的时候解决了,而不是在运行的时候。obj.fun(),对于这条语句,无论是对象,还是函数,如果你输入有问题,那么都会在编译的时候报告出来,方便你修改,而不是在执行的时候出错,害的你到处去捉虫子。\x0d\x0a\x0d\x0a 同时,面向对象又能解决代码重用的问题——继承。我以前写了一个“狗”的类,属性有(变量):有毛、4条腿、有翘着的尾巴(耷拉着尾巴的那是狼)、鼻子很灵敏、喜欢吃肉骨头......方法有(函数):能跑、能闻、汪汪叫......如果它去抓耗子,人家叫它“多管闲事”。好了,狗这个类写好了。但在我实际的生活中,我家养的这条狗和我以前写的这个“狗类”非常相似,只有一点点的不同,就是我的这条狗,它是:卷毛而且长长的,鼻子小,嘴小......。于是,我派生一个新的类型,叫“哈巴狗类”在“狗类”的基础上,加上新的特性。好了,程序写完了,并且是重用了以前的正确的代码——这就是面向对象程序设计的好处。我的成功只是站在了巨人的肩膀上。当然,如果你使用VC的话,重用最多的代码就是MFC的类库。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)