前言
最近一段时间一直没有更新,一方面是时间精力的问题(PS:懒癌犯了),另一方面是小黑大部分的时间都在学习C++相关知识,恶补了许多的知识(从大学C语言水平强制拔高了一段)。
本文谈谈自己近期的一些感受和感悟,算是对一段时间的总结和记录。
为什么要去学习C++
用LabVIEW好多年,在利用LabVIEW做开发,解决问题方面,深感LabVIEW的强大,但是为什么还去学习另外一门语言呢?
事实上,随着项目越来越大,LabVIEW中的一些限制会慢慢暴露出来。一方面,LabVIEW为我们做了很多封装的工作,简化我们的工作,但需要去接触底层时,LabVIEW的便捷性反而限制了软件的设计。另一方面,LabVIEW编程让我们很容易的上手,却也将软件设计的很多核心概念屏蔽掉,让我们在软件设计思想上的深入变的非常困难
总结一下自己的问题和客户的问题,发现LabVIEW在开发到不同的阶段,普遍会遇到下述的问题。
1. LabVIEW写出来的程序效率比较低
效率问题我见过N多次,从学校毕业的学生,航天、汽车、电力等行业的客户,很多人都遇到了相关的问题。罗列几个常见的描述:
- 信号量特别多,界面刷新特别慢
- 功能全部都好使,但是控制周期不知道为什么特别长
- 程序越写越大,也越写越卡,卡到编程开发者根本不知道原因在哪里
- 算法的执行时间比想象中的长....
2.LabVIEW写的程序拓展非常困难
遇见很多客户来咨询,大部分的问题是程序添加一个功能非常困难,有的甚至可以说异常困难。
举例两个场景,我觉得肯定不陌生:
案例一:编程经验不足导致程序拓展困难
公司招来几个应届生,开发一个新业务程序,不长时间开发的有模有样,要界面有界面,要功能有功能。领> 导很开心,发现原先只能想一想的项目也能实现,迅速推出产品计划,需求也源源不断。
LabVIEW工程师卖力维护,程序越来越大,但添加一个功能的时间却越来越长,添加到一段时间后,整个程序就是意大利面条,无论是单个的代码框图还是整个的软件架构全都混乱不堪.....
案例二:频繁换人,团队风格不一致导致拓展困难
公司让一个老员工开发LabVIEW程序,老员工用过很多的编程语言,熟练也懂业务。开发程序一段时间后,程序迅速的跑起来了。
一段时间后,老员工休假,让另外做LabVIEW相关开发的去接手这个项目,再过一段时间这个员工由于其他原因没时间维护,再换一个人。
每次领导都认为LabVIEW开发程序比较简单,一个人就可以搞定,当换了2次之后,程序已经难以维护,混乱的编程风格让维护者不堪代码修改的重负,整个项目处于半吊子状态无法继续。
这两个案例不说人人都会遇到,但大部分LabVIEW工程师中都会存在这些问题,而且越是遇到问题的工程师,越认为LabVIEW编程非常简单...这也是很多研究所,甚至好多小企业的通病。在项目中,如果没有很好的开发风格和团队管理,单枪匹马不注重软件质量的开发,只能让软件始终停留在勉强能用的阶段。
3. LabVIEW有天花板,有需求实现不了
LabVIEW写程序的问遇到的最多题是软件能力的问题,这些问题是由LabVIEW高度封装的特性导致,为了方便工程师使用,做出了很多反软件工程的一些设计。
LabVIEW初衷为工程师降低语言依赖,关注核心业务,在快速原型和解决研发性质项目的时候,它可以让我们加速项目进度,是研发的利器。
但随着软件功能的强大临,测控软件也面着所有软件开发通用的问题,原型验证与产品研发在需求和最终效果上都有很多的差别。
那C++比LabVIEW好用吗?
既然你说这么多LabVIEW的坏话,那C++好用吗?
答案非常遗憾,C++还不如LabVIEW好用,在解决问题方面,C++是LabVIEW万分之一都不到。C++学习初期,大量的时间都在解决指针问题,语法问题,学习曲线很陡峭。即使你懂了一些基本语法,在解决问题上也很困难,还需要学习面向对象思想,泛型编程等一系列的概念,等所有内容学完出师,LabVIEW工程师都做完好多个项目了。
以我亲身经历而言,用惯LabVIEW再去学习C++反而更难入手,有一次,读写配置文件读取的程序都花费了我1天的时间,而LabVIEW只要几分钟。
以前写LabVIEW程序大家都努力做成Windows风格,而使用C++之后发现不是Windows风格好,而是VC++只能做成这样子...做其他界面的代价太大...
以前写LabVIEW多线程没觉得有什么难,而用C++去做,感觉就是难于上青天,线程之间的概念理解不清楚,还不如不用多线程。
很多优秀的软件概念已经封装到LabVIEW的基本语法,使用C++需要我们重新把理所当然的东西深入的学习一遍。
那你学C++干嘛
虽然C++各种不便于工程。但,正所谓,尺有所短,寸有所长,不同的软件工具在不同的地方各有优劣。C++虽然学习曲线陡升,但是在效率和设计思想上的书籍,非常丰富。长期的软件工程思想都能在这里找到影子。
我们能找到大量的资料探讨,如何去使用指针,如何节约内存,如何避免复制。
我们可以通过C++可以摆脱很多低效的编程操作,如LabVIEW中大量的图标设计和右键操作
我们可以实现相同的功能,开发的程序都在K级别,而LabVIEW至少要上M
当然,世界总是公平的,上帝为你关了一扇门,就会开一扇窗,仔细寻找不同工具之间带给你的便利性,你会找到最适合自己的解决问题的方案。
后记
后续小黑还会继续充电C++,在陡峭学习曲线上攀爬,写文章可能会偏向于C++和一些碎片化的心得,共勉之。
记得很有意思的两个段子对我感触很深,分享给大家:
1. LabVIEW
硬件领域(硬件开发&测试)的工程师们,一般不懂软件。
所以,本来在硬件工程师眼中“写程序这么反人类的事情”。
突然间,硬件工程师们发现,自己用LabVIEW居然可以编写程序了。
“哎,居然特么实现了”
“哎,程序跑起来了”
“哎,我擦,出结果了”这种感觉真是太酷了,奏这样!
2.C++
C++跟其他语言有一点区别,就是早期你才刚学习一点点的时候,什么靠谱的程序都写不出来,等到你学的差不多了,突然就变的牛逼了