前言
4年本科,2年研究生,3年工作生活, 那些年,我试过一些开发环境,形形色色…
不同的平台,不同的操作,不同的语言,那些年,我开发过各种程序,千奇百怪…
用着用着,渐渐明白,君子生非异也,善假于物也,只有在合适的时机,使用正确的工具,才能顺利的解决工作中的问题。
语言的魅力
小时候,喜欢看小说,喜欢打游戏,一直觉得写小说和写程序的人是非常厉害的,因为在他们的手中,可以创造一整个世界。
后来上学就有意识的往程序的方向发展,接触接触过不少语言:
按上学时的掌握度来说
- 硬件编程: C > Verilog
- 软件编程用: LabVIEW>C++>Python,C#
- 算法方面: MATLAB
按照工作后的标准来看,不常用的基本退化到了初级阶段,常用只有LabVIEW、C++、Python
语言的选择
接触这些语言后发现,如果每一个的掌握程度都只停留在初学者阶段,很多问题都无法彻底解决,只能疲惫的应对各种实现不了的难题。因此,精通或者说是深入一门语言,成为了编程者所必须面临的问题。我的选择随时间推移在不断变化,不同阶段思考的内容也不一样。
开始选择
在大三的时候,曾经问黄晶学长(全国虚拟仪器国赛特等奖大神): "我会好多语言,究竟应该以哪一门语言为主呢?"
学长反问我:“你确定会好多种?只拿LabVIEW来说,我也不能说会。”
当时心想,学长LabVIEW已经超级厉害还说自己不会,那我这个小菜鸟岂不是什么都不懂,羞愧之下决定好好精通一门。
当时LabVIEW最熟悉,而且能够快速做漂亮的界面,有学习的偶像,所以选择了它。
第二次的选择
熟练LabVIEW是非常有帮助的,它解决过各种工程问题,包括我的毕设、上学期间做的许多上位机、工作后的各种自动化控制程序。整体而言,LabVIEW的深入让我可以应对大部分的工程问题,无惧很多很棘手的问题。
然而,随着工作时间的增长,越加发现LabVIEW不适合在私企做更大的程序。
LabVIEW优势是快速原型验证,在时间紧迫,任务重的时候,可以降低学习成本,加速开发。然而,它面向的通常是硬件工程师或者不太懂软件编程的研究者。为了达到容易上手的目的,很多复杂的功能都通过封装简化,很多软件理论也都进一步弱化,从而达到的短时间内出成果的目的。,这也导致LabVIEW易学难精。
但是,在程序开发过程中,不可避免的遇到需求不断增加,功能不断累积。当程序规模越来越大时,打包,编译,框架,人员等初期验证并不需要太多关注的问题反而成为制约开发的重要因素。
公司一款商业测控程序,打包需要1天多的时间,而且经常失败。其实,产品本身没有问题,但定位比较宏大,选择LabVIEW进行开发就不再明智。
某创业公司想要做原型产品,选择NI方案人员不好招募,自己培养又没有太多的时间。
某创业公司在做消费类电子的自动化产品,由于公司规模不可能用盗版,NI的软件较高,远不如自己开发特定需求的功能"便宜".
我为了回避LabVIEW带来的一些瓶颈,学习更好的架构体系,写"牛的程序,开始尝试资料丰富的C++作为第二语言,用于系统的学习软件理论,学习面向对象,学习设计思想。
第三次的探索
半年多过去了,当C++可以解决工作中大部分问题时,又遇到另一个问题。
工作中还是要写Client程序,C++由于UI操作极其不便,设计UI界面仍需大量编码,单人开发效率并不高。
也可能是习惯了LabVIEW的节奏,用C++开发UI速度降低太多。
于是,业余时间探索了一下Python和C#,发现:
Python作为一个胶水语言,能找到各种各样的库文件,写小的测试脚本非常方便。在不复杂的程序,如测试序列,非常适合使用Python。
C#为C++的升级版本,在Windows上开发客户端程序比C++效率高太多了,除了LabVIEW在工业显示的控件比较有优势外,大多炫酷的界面在C#中都有很好的库支持。
复盘总结
回顾我的学习曲线,过去的时间和精力已经全部投入且无法挽回。如果可以重来,我希望在最开始有一些建议,这里可以给学习的是自动化,测控相关专业同学一些小的参考。
如果你将来想从事工业控制相关的工作
- 毕业留高校研究所:优先熟悉LabVIEW,掌握基础C语言
理由:高校研究对成本不是特别敏感,可以使用较贵的NI仪器,配合LabVIEW可以加快研究的步伐,减少软件学习成本。
使用C/C++语言可同时帮助开发硬件程序,毕竟研究所通常要求一个人完成一整个软硬件体系的搭建。
- 毕业去测控、自动化类私企:优先熟悉C#,掌握基础LaBVIEW
从公司角度讲:测控类的私企对成本很敏感,虽然在初创的时候使用LabVIEW可以迅速打开市场,快速完成给定目标,但长期发展受到硬件成本限制。自研软硬件是公司发展到一定程度的必然选择。
从个人角度讲:私企人员流动比较大,LabVIEW就业范围较窄,同一行业的优秀公司只有一两家,未来如果想要去其他方向或者行业,文本编程占据主导地位的概率大,所以尽可能的掌握一门文本编程语言。
- 毕业去测试类国企:优先熟悉C#,其次熟悉python
理由:较大的企业通常会有话语权,不用选择语言。供应商使用LabVIEW做硬件驱动开发,你只需要掌握容易的编程语言来调用即可(甚至不再编程)。
- 如果将来想从事互联网相关行业,建议精通java,C++,python中的一门,并且熟练使用Linux系统。
注意:这里的建议仅供参考,每个人的选择还会受到各种因素的制约,比如老师的课题要求,公司的团队语言,甲方的项目需求等等。
未来发展
从事工控行业,使用C#+python/MATLAB做开发一直是我认为比较看好的方向之一。较低的学习成本,简单明确的框架体系,较多的成熟UI库,后续可以深入的软件理论,这些都是工程师软件开发的必备之物。并且,中国工程方面的强大软件还很缺乏,能够有自主创作的软件出来,对于工程控制方向发展还是大有裨益的。
然而,当下来看,C#对于工业控制的支持力度还是不够,远不像LabVIEW一样成熟,需要更多工程师的去完善和发展。
中国本土的企业也逐渐出现自己的东西,简仪科技在不停学习NI公司,推广基于C#的一些开发库。虽然功能和解决方案都还处于比较初级的阶段,但麻雀虽小五脏俱全,作为国内的测控发展,还是很期待他们的发展。
最近刚好有两个思考分享给大家:
2018年3月23日,中美贸易战,美国针对高科技软硬件进行限制。虽然这次的限制概率不大,但无疑给我们工程技术人员一个警钟,将来限制进口的风险不可避免,只有提前储备自研的软硬件,才可避免未来依旧受制于人。
一直可以看到国内IT软件发展迅速,却不见任何工业级别软件有所建树。国内工程开发所用的软件基本上都来自国外,工程软件在项目中基本都是附赠产品,接项目总是靠关系和忽悠,自动化设备永远是你抄我,我抄你,处于原始竞争状态。
所以,工程行业需要搅局者,需要变革者,需要引领者。对国内出现自主创新的企业,我们当以包容的态度去看着他们成长,静静的等待他们壮大,等待有一天撑起中国的工程发展。