前言

最近一段时间一直没有更新,一方面是时间精力的问题(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. What Is The Promiscuous Mode

    What Is The Promiscuous Mode? Some Network Interface Cards (NICs) may not allow network traffic afte ...

  2. 【刷题】BZOJ 1468 Tree

    Description 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K Input N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 接下来是 ...

  3. 解题:APIO 2014 回文串

    题面 初见SAM 洛谷数据太弱了,我SAM写错了居然有90pts=.=??? SAM求一个子串$(l,r)$的出现次数:从右端点对应状态开始在parent树上倍增,当目标节点的$len$大于等于子串长 ...

  4. 解题:POI 2012 Cloakroom

    题面 首先,单独处理每个询问复杂度显然不可承受,还是考虑通过排序使得限制更容易达到:按照$a$将物品排序,按照$m$将询问排序,这样肯定是要不断添加物品才能达到要求,顺着做一遍就行了 然后发现$b$的 ...

  5. [知识点]C++中STL容器之set

    零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 继上期的vector之后,我们又迎来了另一个类数组的STL容器——set. 二.用途与特性 set,顾名思义,集合 ...

  6. 音视频处理之FFmpeg程序的介绍与使用20180302

    一.FFMPEG程序介绍与使用 主要介绍一下ffmpeg工程包含的三个exe的使用方法. 1. FFMPEG程序介绍 1.1.下载 ffmpeg的官方网站是:http://ffmpeg.org/ 下载 ...

  7. (转)IOS 的一些资源汇总

      UI界面类项目: Panoramagl —— 720全景展示 Panorama viewer library for iPhone, iPad and iPod touch MBProgressH ...

  8. Linux系统之路——python多版本共存问题(ps:自行切换python版本,pip安装遇到的一些问题)

    经常遇到这样的情况: 系统自带的Python是2.6,自己需要Python 2.7中的某些特性: 系统自带的Python是2.x,自己需要Python 3.x: 此时需要在系统中安装多个Python, ...

  9. Git之安装及使用

    学习使用Git来管理平时自己写的demo代码和阅读的一些源码,因为一直在windows中操作所以开始学习用Git Bash操作在github上的代码.git命令和svn命令是很相似的,我觉得没有必要把 ...

  10. 4.UiCollection API 详细介绍

    一.UiCollection类介绍 UiCollection类两大功能:从集合中查找对象:获取某种搜索条件组件的数量 1.UiCollection类说明 1)UiCollection是UiObject ...