原创

我的第一个项目——说说那些年我们一起写过的代码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://mysoft.blog.csdn.net/article/details/48443201

我的第一个项目——说说那些年我们一起写过的代码

 

时间回拨到15年前,那是2000年的夏天,天气正热的时候,我刚从大学毕业了,来到了改革开放最前沿的城市--深圳。坐火车到了广州之后,就搭乘长途大巴从广州省站出发,当车开出广州之后,看到广深高速两边全是楼房,一栋接着一栋,没有间断的地方,可谓让我吃惊不已。因为与西安那边相比,只看到公路两旁都是没有草木的黄土高原,那是形成极大的反差。当大巴车驶离高速公路之后,进入深圳的公明镇,就到达了我的第一个公司,远远看到公司的建筑群是那么宏伟,那么大范围,这是一个8000多人的电子工厂。

 

进入公司之后,就是实习三个月,在这三个月里,会经历不同的工种,不同的工作岗位,体验不同的工作经历。经历最深刻的就是注塑车间了,在那里看到一袋袋的塑料胶粒,经过入料,加热,进入模具,出成品,再抛光,到喷漆,产品就做好了,全自动化的过程,不过那里车间的气味都不好受,整天要带着口罩的。也经历了两班倒的12小时工作制,那是全自动化的PCB插件机,主要看着机器运行,当看到那种物料短缺之后,人工添加上去即可。

 

经历三个月的实习之后,就进入研发中心进行实际的工作岗位了。我选择的是软件工程师的岗位,顺利进入软件开发部门,接着就开始准备把四年学习到的知识派上用场了。在部门周会上,20多个人同时开会,接着经理说有一个小项目要求做,问谁开发过PC的软件,结果所有人里只有我举手了,经理立即同意把这个小项目交给我来开发。这是我第一个有商业价值的项目,也是我第一次参加工作写的第一个程序。这个项目主要背景是由于工厂每天生产30万台电视机,而每一台电视机出厂前都需要写入设置好的参数,比如音量的大小,亮度的大小,而这些参数都是储存在一个小小的EEPROM里,每生产一台就要拷贝一份这样的数据。在我没有开发之前,都是通过一般的EEPROM烧写工具煤写,每次只能烧写一个,这样的效率非常低,只能通过工人来加班完成,每天几个人连续24小时烧写,即使这样每天30万片的压力还是比较大的。经理让我想办法提高烧写EEPROM的方法,并没有提供我详细的方案,也没有参考资料,对于刚毕业的我来说,也是一个挑战的项目。虽然我的部门有20多个开发工程师,但他们都是跟我一样,刚毕业过来,也没有什么经验。因此,我决定先去工厂现场烧写EEPROM的岗位上,仔细观察她们操作过程,以便发现有什么方法可以提高效率。从现场来看,一次只能烧写一个EEPROM,操作过程浪费比较多的时间,接着我想到的解决方案就初步定下来了,就是设计成这样:让一片已经写了数据的EEPROM作为母片,其它16片作为空白片,这样点击一下鼠标就可以一次性烧写16EEPROM。方案定下来了,经过跟经理的讨论一下,就决定这样做了。接着下来,就到项目实施阶段了,在PC上使用VC++5.0来编写人机交互界面和功能,通过并口编程实现对EEPROM进行烧写。

 

原来以为我只是负责开发PC的软件即可,但是实际的工作过程中,我不仅仅编写PC的程序,还需要对这个项目的硬件进行相关的设计。在刚开始的阶段,我还是走了一些弯路的,比如认为并口的电平与EEPROM的电平都是5V,那么在01的表达上,应可以通用的,后来的实验结果告诉我,这是不一样的,要在它们之间添加一个器件。在这个实验的过程中,不断使用示波器来查看通讯的波形,发现都是OK的,但是还是结果不对,才认识到需要添加这个IC,以便适应并口的电平与EEPROM的电平。经历这个挫折之后,感觉做一个小项目,需要的知识点要太多了,每一个关键的知识点不过关,都没有办法把事情做好。由于使用这个IC还不是公司常用的IC库里找得到的,只能自己出差去采购,呵呵,做一个小项目,还真锻炼人,需要学会公司的出差流程,报销流程,什么发票、车票等全部收集全。把所有采购物料准备好之后,自己就在简易电路板上焊接,连线,然后接到PC的并口上,打开示波器,然后才可以进入编程开发阶段。

 

到编程阶段了,总算可以使用上VC++5.0,创建一个对话框的应用程序,接着在上面布局了三个按钮,一个是开始读取母片,一个是烧写检验,一个是退出,再添加一个文本显示框,以便显示从母片里读取出来的数据。在这个阶段里,编码也是碰到比较多问题的,一个就是第一次使用C++来写完成真正的项目,与以往在学校里使用TC2.0C代码来编写是有区别的,因此在这个项目的代码编写上,尽量还是使用C的方式,只使用了函数,没有敢使用类,也不敢使用类,因为使用类的项目还没有做过。从现在看来,自己15年前写的代码,总是那么可笑,这些代码是我写的吗?呵呵,有面向对象之名,无面向对象之实,只是把C++当作高级的C来使用。这就是当初入行的可笑之处,现在看到很多小鲜肉也是这样使用C++,感慨万千,仍然前赴后继。在编写过程之中,发现VC++里不能使用TC2.0里最有用的端口地址操作函数,需要使用内嵌汇编代码才可以对地址进行操作,当使用汇编编写完成之后,就可以调用这些函数来实现I2C的通讯协议了。把并口的8位数据端口保留两位数据线作为I2C通讯使用,其它6位用来进行地址编码,在这里实际只需要把5位编码,就可以分别选中17EEPROM了。在大学里并没有学习过什么叫做I2C通讯,因而又需要拿起一本I2C的通讯资料硬啃,通过一天学习之后,就可以对着编程,查看示波器的时钟信号是否正确,数据信号是否正确,确认都没有问题之后,就可以让程序对EEPROM进行数据读取,然后再写入相应的位置,就这样反复地读取写入,不断地调试着程序。从这里可以体会到,工作与学校里有本质的区别的,工作上需要学习到什么知识,就需要立即学习,没有办法提前学习所有知识的可能。

 

经历几天之后,总算把程序调试完成,并验证通过。接着下来的工作,还是没有完成的,还有很多工作等着做。主要下来的工作就是画好原理图,呵呵,到这里才理解,做软件开发不仅仅是编写程序,调试程序这么简单,还需要会画原理图。还好在大学里选修了单片机原理,也懂得使用PROTEL软件,打开这个软件,画出了同时可以读写17EEPROM的原理图,并且标写所有物料编码,这时就可以把原理图文件发送给相关的硬件工程师了,让他来布板,接着下来就是打样。由于我这里是大公司,打样都是快,今天发PCB,明天样板就回来。物料采购就没有这么快了,这些只能等。在等的过程里,不断完善软件的界面,完善软件检查EEPROM的流程,比如采用全检,或者采用部分抽检的方式,这样可以大大地提高烧写速度。当所有物料采购完成之后,我自己还要动手焊接器件,这时才发现前三个月的实习时焊接岗位的知识又可以使用上了,原来很多前面打下基础知识都会在为后面的工作打下了基础。

 

PCB全部焊好之后,再通过万用表检查所有连接线是否有虚焊,是否有短路,如果一切没有问题,就可以上电测试,否则就会遇到测试过程中冒烟的、烧坏IC的。把PCB的连接线接着电脑的并口,再把母片插入,把其它空白的16EEPROM插入插座,安装软件进行测试,一次性就可以测试成功,并且很快就把16片烧写完成。同时使用两个并口,就可以让工人先安装16片,点击烧写,接着再安装第二个16片,这样轮流安装EEPROM,可以不间断地进行,大大地提高了烧写速度。

 

最后跟踪工人的使用,听取他们的意见,再通过修改软件,添加防呆操作等等,整个小项目通过了工程部门的验收,开始在工厂里大量使用。

 

 

这个就是我入门的第一个软件开发的项目,在这个项目里,发现开发软件只是其中很小一部分工作,其它大部分的工作都是需要做的,否则软件开发完成了也是没有办法使用的。通过项目的实践,可以把很多以前不相关的知识点串在一起了,也把一些以前认为没有用的知识也使用上了。真正体验到“书到用时方恨少”,工作的过程就是一个不断地学习的过程,在这个小项目里,使用了C++来编写,其实只是使用C的函数式编程,没有对象,没有抽象,没有继承,没有虚函数,更加没有设计模式,后来想一想都觉得可笑,也许这是一个小项目,让我成功实现了,也导致后来一些的项目失败。到现在针对大规模的项目,都是100万行代码之上,持续开发10多年,发现没有这些面向对象的基本技能,已经很难对项目进行可维护,可持续交付,可持续测试,可降低成本,可提高竞争力,可满足数万用户的要求,可快速响应用户的需求,可以国际化的需求。

 

 


蔡军生  微信号:shenzhencai  深圳

文章最后发布于: 2015-09-14 18:42:45
展开阅读全文
0 个人打赏
私信求帮助

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览