前言

最近一段时间一直没有更新,一方面是时间精力的问题(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++跟其他语言有一点区别,就是早期你才刚学习一点点的时候,什么靠谱的程序都写不出来,等到你学的差不多了,突然就变的牛逼了
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/EltonLiang/p/7554322.html

从LabVIEW到C++相关推荐

  1. gpio引脚介绍 树莓派3b_如何让LabVIEW程序运行在树莓派3B(此处有坑)

    上次转载了LabVIEW部署树莓派的文章后,很多小伙伴很兴趣,一个个都说要把压箱底的树莓派拿出来清下灰尘,也不知道到底拿出来没有. 放个之前文章链接如下: 零基础上手树莓派+免费正版LabVIEW C ...

  2. labview简易计算机实验报告,labview实验报告..doc

    学院:电气工程学院 班级:自112班 姓名:何富裕 学号:1112011060 实验一 一.实验目的 熟悉LabVIEW软件的基本编程环境. 二.实验内容 创建并保存一个VI程序.此VI要实现的功能是 ...

  3. LabVIEW设置应用程序显示标签透明

    在美化应用程序时,有时候需要将某些标签设置为透明状态,之前在LabVIEW设计自定义滚动条博文中制作的滚动条是一种方式,但是这种方式明显过于复杂. 本篇博文将介绍一种简单方法,还是以我们分享的LabV ...

  4. LabVIEW实现应用程序停止或退出

    我们在做应用程序开发时,最后必然会用到应用程序停止或退出功能,本篇博文将分享实用LabVIEW如何实现应用程序停止或退出. 其实非常简单,两个组件就可以实现,在LabVIEW中右键鼠标:编程→应用程序 ...

  5. LabVIEW做一款科学计算器

    目录 1.设计思路 2.功能设计 最近学习LabVIEW基础知识,使用其制作一款简易科学计算器,可以实现基本的数学运算功能,效果如下所示: 下载链接:LabVIEW实现科学计算器-嵌入式文档类资源-C ...

  6. LabVIEW实现CRC校验

    目录 1.内部控件计算CRC校验 2.公式节点计算CRC校验 CRC(循环冗余校验),是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存 ...

  7. 一个LabVIEW控件,生成模拟波形效果

    LabVIEW实在强大方便,今天为各位分享一个小技巧:如何制作一款模拟波形效果小软件. 这里依托于LabVIEW内置的波形生成VI,本篇博文仅仅仅介绍基本函数发生器VI,仅仅是一个抛砖引玉,感兴趣的朋 ...

  8. LabVIEW保存、读取配置文件

    目录 1.保存配置文件 2.读取配置文件 在软件项目开发过程中避免不了要将数据保存到本地,例如,登录信息.账户.密码等.保存数据到本地的方式有很多种,本篇博文主要分享LabVIEW内置的保存.读取配置 ...

  9. LabVIEW设计自定义滚动条

    在讲解自定义滚动条之前,我们先了解一下,如何动态控制常规的滚动条控件,效果如下所示: 这是使用LabVIEW自带的滑动控件,鼠标右键,选择:"数值",可以看到各式各样的滑动杆控件, ...

  10. LabVIEW跳转访问网页

    在设计LabVIEW应用程序时,点击按键,跳转访问网页的功能十分常见. 使用LabVIEW跳转网页的方式有很多种,本篇博文推荐一种比较简单的方法:执行系统命令. 执行系统命令实质上就是LabVIEW调 ...

最新文章

  1. 网易有毛病,我的账号被锁了,去解锁时候又几把提示不成功,浪费劳资感情啊
  2. 奥鹏南开大学18春学期计算机作业,南开18春1709、1803学期《办公自动化基础》在线作业答案.doc...
  3. 配置Java_Home,临时环境变量信息
  4. 计算机科学和机器学习中的代数学、拓扑学、微积分以及最优化理论
  5. 异步http 超时_具有CompletableFuture的异步超时
  6. (转载)spring配置hibernate 事务。
  7. rs232接口定义_RS485通讯接口定义和特点
  8. centos yum 安装mysql
  9. centos安装docker详细步骤,如何配置阿里云镜像加速
  10. 自定义Repeater数据控件的一个页面显示效果
  11. pytorch---模型加载与保存(6)通过设备保存/加载模型
  12. shell应用之习题一
  13. HDU2516 取石子游戏
  14. 计算机网络参考模型与5G协议
  15. win10、win8/8.1、win7系统激活工具-----也可激活Office各版本
  16. mc用什么版本的java_我的世界网易 Java 版哪个版本比较好?
  17. android 周月切换日历,vue-week-picker实现支持按周切换的日历
  18. AQS: CLH 介绍
  19. 蓝牙Ibeacon室内定位和微信摇一摇周边原理分析
  20. dpdk mempool的逻辑

热门文章

  1. linux 文件查找及定位
  2. 用 GStreamer 简化 Linux 多媒体开发
  3. 使用Nagios监控网页
  4. linux ”我的草稿“
  5. php手机定位导航,js实现网页定位导航功能
  6. python凯撒密码详解_Python基础题目集--课堂案例
  7. 简述Linux目录结构和系统结构
  8. Linux 中 rsync 备份数据使用实例
  9. 从业5年,教你学习Linux开发
  10. linux 支持7代cpu型号,win7最高支持几代cpu