前言

最近一段时间一直没有更新,一方面是时间精力的问题(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++,在陡峭学习曲线上攀爬。

记得很有意思的两个段子对我感触很深,分享给大家:
1. LabVIEW
硬件领域(硬件开发&测试)的工程师们,一般不懂软件。
所以,本来在硬件工程师眼中“写程序这么反人类的事情”。
突然间,硬件工程师们发现,自己用LabVIEW居然可以编写程序了。
“哎,居然特么实现了”
“哎,程序跑起来了”
“哎,我擦,出结果了”这种感觉真是太酷了,奏这样!
2.C++
C++跟其他语言有一点区别,就是早期你才刚学习一点点的时候,什么靠谱的程序都写不出来,等到你学的差不多了,突然就变的牛逼了



从LabVIEW到C++的更多相关文章

  1. LabVIEW 吸星大法 - 看见的好东西都是我的(下篇)

    前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...

  2. LabVIEW 吸星大法 - 看见的好东西都是我的(中篇)

    前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...

  3. LabVIEW 吸星大法 - 看见的好东西都是我的(上篇)

    前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...

  4. 有哪些LabVIEW快捷键让你相见恨晚

    前言 任何一门工具,当你使用它到极致的时候,往往都朝着这样子的两个方向发展 1. 具有鼠标操作功能的软件,他的使用的极致就是脱离鼠标,迈向键盘 2. 主要是键盘操作的,他的极致就是脚本自动化,或者说一 ...

  5. 【LabVIEW技巧】路径依赖解除方法

    前言 LabVIEW程序开发,让我们的程序设计变的简单容易,但是设计过程中也不乏大量的重复性工作,其中最让人头痛的莫过于依赖冲突问题. 事实上,只要你对文件进行了修改或者移动,必不可少的依赖冲突就会产 ...

  6. 01 LabVIEW的类中各个Scope的范围

    范例地址: D:\Program Files (x86)\National Instruments\LabVIEW 2015\examples\Object-Oriented Programming\ ...

  7. 06@LabVIEW发布功能总结

    前言 在没有接触到LabVIEW强大的发布功能前,我时常发愁如何把自己的工具包给别人装上,有时候为了一些特定的安装,需要自己写一个一键安装的程序,时间长了发现还不如直接复制来的快,就是苦了那些用工具包 ...

  8. LabVIEW类方法浏览器-Class Method Browser

    随着LabVIEW的类编程应用增多,当打开较多的VI进行编辑时候,添加该类对应的VI方法到程序后背板上操作显得繁琐(需要在Project浏览器或类浏览器或库浏览器中找到该类的方法VI,然后再拖到程序背 ...

  9. LabVIEW如何调用C#Winform

    界面交互并不是Labview的强项,使用Labview创建UI时候总会受制于VI有限的控件,有限的皮肤和有限的控件事件.而当需要实现UI的多文档的窗口,窗口的浮动停靠,动画等功能时还需要花很大的功夫. ...

  10. LabVIEW之生产者/消费者模式--队列操作 彭会锋

    LabVIEW之生产者/消费者模式--队列操作 彭会锋 本文章主要是对学习LabVIEW之生产者/消费者模式的学习笔记,其中涉及到同步控制技术-队列.事件.状态机.生产者-消费者模式,这几种技术在在本 ...

随机推荐

  1. Day 2 笔记 数据结构

    Day 2 笔记 数据结构 1.栈.队列.链表等数据结构都是线性数据结构 2.树状数据结构:二叉堆,线段树,树状数组,并查集,st表... 优先队列其实与二叉堆的存储方式并不相同. 一.二叉堆 1.二 ...

  2. poll() 与 select()比较

    比较poll() 与select() 尽管poll()和select()所做的是相同的工作,不过poll()优于select(),原因:    1.poll()不需要用户计算并传递作为参数的最高编号的 ...

  3. 【loj2133】【NOI2015】品酒大会

    Portal --> loj2133 Solution 虽然说这题貌似用后缀树之类的好像会更加简短一点..但是还是因为在智力康复所以就还是用后缀数组好了嗯(哇好感动啊难得那么顺畅写了一道noi的 ...

  4. 前端PHP入门-028-文件操作-掌握级别

    作为刚入门我们员经常会干的意见事情是ctrl+c和ctrl+v,鼠标右键删除文件.会control+c(或右键)复制.粘贴文件以及新建文件,还可以设置文件的是否为只读文件等等 可不可以写入修改配置文件 ...

  5. [DeeplearningAI笔记]序列模型2.8 GloVe词向量

    5.2自然语言处理 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.8 GloVe word vectors GloVe词向量 Pennington J, Socher R, Mannin ...

  6. [DeeplearningAI笔记]序列模型1.10-1.12LSTM/BRNN/DeepRNN

    5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10长短期记忆网络(Long short term memory)LSTM Hochreiter S, Schmidhu ...

  7. Java的StringAPI的小练习

    //-------------String类-------------- //求两个字符串的最大相同子串 /* 思路: 1.找出较短的那个字符串 2.找出短串的所有子串,使用contains函数判断是 ...

  8. echart图跟随屏幕自适应变化

    var myChart = echarts.init(document.getElementById('main'),'macarons');// var option = { //...一些配置 / ...

  9. 谷歌地图 API 开发之添加标记(解析以及补充)

    今天又看了下官网,发现官网上有地图标记的详细说明.当时居然眼瞎看不见,还琢磨了好久...#$%^&,一定是项目太急,没看到(^o^)/~地址:https://developers.google ...

  10. UVA 818 Cutting Chains

    https://vjudge.net/problem/UVA-818 题意: 有n个圆环,其中有一些已经扣在了一起.现在需要打开尽量少的圆环,使得所有圆环可以组成一条链 n<=15 因为n< ...