前言
2017年12月份,完成了Reality SmartSwitch (https://www.amazon.com/dp/B07K3TRG6W/ref=emc_b_5_i)的基本功能,以及生产测试程序的基本功能,开始了漫长的布置产线生涯。
之所以漫长,是因为自己的经验不足,能力不足。错误和不利是我造成的,但我原谅自己,毕竟,那是我入行的第一年,回望这一年,能做到这样,我觉得自己已经超过预期了。何况6月份才放下了ESP8266的开发。
今日,2019年,足够的时间去沉淀这一段”出差+开发“的阶段,写下一些回忆和感悟。要感谢公司给我这个成长历练的机会,也要感谢产品经理和Leader的耐心指导,当然还有生产厂商的大力配合。
出差感悟
出差,对于第一次出差的人来说,总是一个不错的经历,有很多成长的历练,以及将自己做的东西放到真正应用的地方可以发现他的很多不足和理想化不足以成为一个友好的产品。这便是我的第一次出差。
- 出差的每一天遇到的事情和解决方法都要及时整理记录,因为每一天的时间不是很能被自己决定,尤其和团队出差,这就要求每天离开产线和应酬后,回到酒店第一件事就是整理当天的收获,没有什么收获也要整理当天做了的事情。产线是一个让人头脑发懵的地方,尤其对于新人,我最开始在产线上调试非常不从容,解决问题经常“瞎猫碰死耗子”,解决了之后自己都不清楚怎么解决的,因为没有时间很细致地思考验证(这是错误的,如果后面不好复现的事情,要及时找到原因,当然要衡量产线停产的影响),以至于一天解决几个问题,但能记住的很少,下次遇到依然要靠蒙。而酒店是一个让人卸下疲惫,忘却烦恼的地方,睡一觉醒来浑浑噩噩就把前一天的事情都忘得一干二净了。而二者之间的衔接,刚到酒店这个时间点就极为重要,要在还没把事情彻底忘记的时候,及时总结回顾,有些当时不能消化的问题,至少要把问题记录下来,可以的话,备份代码,写清问题描述,以便之后消化。初期的我,完全不懂得这个道理,以至于疯狂地解决问题,但没有学到什么东西。
另外,还有一方面也是每日总结的原因,就是在出差的时候,你面对的电脑不是自己的了,很多问题,平时遇不到,就像我每次装系统后,配置系统,总能有些新的收获一样,我要对共用的新电脑做很多平时自己用的电脑不做的事情,这些都是很好的学习。比如如何关闭错误报告,如何修改开机密码,如何关闭Windows 更新服务等等,因为是产测电脑,给工人用的,必须“傻瓜”,单纯到只有一个功能就好。所以很多额外的事情都能让人学到很多新的有意思的东西,及时整理! - 上面提到了备份代码,这真的很重要。在产线上,懵懂的情况下,一切都瞬息万变,不知道怎么就好了,又不知道怎么就坏了,各种可能性交叉在一起,甚至还有硬件的问题。。。所以,要及时备份代码,首先,Git管理当前Code Base,之后,遇到问题的代码:备份,写清问题是什么。修改,将解决问题的代码备份,写清如何解决(当时产线上,可能没有时间细致探究原因)。回头要去比较每个问题对应的备份的两个代码,有些可能并没有真正解决问题,而是运气好,天气好,硬件接触突然好的“不幸”,这时要深入探究,以决定是否合并代码;有些可能是不必要的,甚至错误的改动,要及时清理。
- 产测软件的名字很重要。我TM当时开发完了,觉得起个“Production Test”的名字简直又牛X又上档次,放到产线,经常有人要问我哪个是生产测试软件,开始我觉得告诉他们记住,大家知道就好了,可是发现总是有人问我,我的产品经理提醒我,我是给工人用的这个软件,不是给开发人员,起这个名字不适合。后面就改成了 “智能开关PCBA产测软件”。挺对的,开发任何产品都是这样,要考虑受众,要让它对用户友好,而不是自己一厢情愿,给一个自己喜欢的功能或名字。包括后面的产品易用性讨论,也是开发了一个“给程序员”自己用的产品。
- 关于产测结果的记录。我们当时是租用了一个服务器,在上面开发了一个简单小的查询系统,我在产测软件里面加入了对数据表增删改查的接口,用于将测试结果写入数据库,方便远程调用查询。NaviCat这个小工具还是蛮好用的。以上这些都是正常流程中的。需要提示的有2点,一是,要有本地数据库,尤其是在远程数据库访问错误的时候,这个在最开始设计程序的时候就要考虑到,因为我们确实发生了网络不畅导致丢数据的情况,当时晚上在酒店加班加点学习如何用C++写文件,赶紧补充进去这一重大功能。二是,要在测试一开始的时候产生区分度,并将之增入数据库,区分度就是你要知道你当前测试的是哪一个产品,比如通过SN串码,MAC地址等进行区分,加入增加记录的时间,来更好的追踪。
- 关于数据库,有一点,一定要注意,这是我的Leader和产品经理无数次诟病我的事情,就是,增删改查中的“删”和“改”动作一定要小心,不能直接造作数据库进行“删改”,但可以通过稳定的数据接口进行。即使是错误数据,无效数据,也不能直接改数据库,错误也要保留,并尽量给出合理解释。
- 关于INI文件。产品经理指出,我的这个程序每次调试都要重新编译,是非常愚蠢的,应该使用ini文件,每次一个程序,需要调试的时候,修改ini文件进行调试,比如切换服务器数据库,由正式切换到测试,就是ini里面修改个参数。听闻此法,连夜兼程学习如何使用ini。。。其实还是“写本地文件”的方法,好在有前面的铺垫,很快加入了这个功能,确实大大提高了产线调试的效率。感谢产品经理!
- 关于生产小工具。这里,一定要调动主观能动性,还好我是一个善于动手解决问题的人。生产工具这个事情,我们先要有一个正确的认识,起初我觉得,生产上多花点钱,搞个自动流水线也许是可行的。生产商也说了,这些那些产线站点所做的事情都可以给你搞个气动xx,脚下一踩就压好了、开始了、结束了,再搞个传送带,省着工人来回搬运,但这些的前提不是投入多少钱,而是**你有多大量!**几千几万的就工人多用用,几百几千万的,才会考虑给你加血相对自动化的工具。哎呦我这暴脾气!学自动化的我,非要把这笨拙的流水线给它自动化咯!于是管理流水线,升级流水线,提高生产效率的任务我也担当起来了,先是使用更得心应手的工具,比如螺丝刀不是带磁性的那种,网上查了下,其实后面绑个吸铁石就行,果断动作,工人好评!理线慢,产品经理经验是真的足!来了之后削了个筷子,用筷子将2分钟的任务缩短为45秒!工人好评!哎呦(捂脸)好像也没啥了就。。。。额,牛皮吹大了,一面大旗倒下。。。当然,这里面你还要明白一点,工人也不是傻子,他们有时候觉得生产流程不合理,效率不高的时候也会自己调整,毕竟我们一个4人的产线还给我们分配了个质量员呢,它对质量和效率都有相当高的标准,而且,论生产经验,我们都远不如那些工人的。
以上便是我那一段时间出差的总结。回顾这一段出差经历,学会了很多,不是单纯地只会C语言,还用了C++做了MFC的产测程序,简单学习了C++,系统学习了过时的技术MFC。除了本科做的Visual Basic以外,又可以通过MFC快速搭建一个GUI界面程序。还接触了C#,在官方代码基础上修改出了几个好用的工具,比如OTA工具等,还接触了数据库,mySQL和好用的NaviCat工具。
但这段经历,从我嵌入式的发展和C语言的进步方面,没有太多贡献,以至于这一段时间做了很多很多事情,产品大卖有我很大的功劳(自诩),但却觉得在主要业务上进步不大,以至于工资提升幅度可笑到跟谁说谁都觉得不公平。
也是因为这个原因,公司进行了人事调整,我从原来的Leader下面,转到了产品经理下面,在硬件部门从事嵌入式软件开发,产品经理亲自带我,太幸运了!产品经理对我寄予厚望,并帮我挡掉了很多出差的事情,让我专心在嵌入式开发上面,后期出差的事情就不怎么叫我了。很多产线的事情也稳定下来了。
感谢产品经理!在我出差期间耐心教导,使我大有长进。
感谢产品经理!在我需要提升技能时,及时帮我挡掉出差,让我专心于技术。