If you claim LabVIEW is a "real programming language" then start acting like a real software engineer.
Bogdan Doroslovac
Geek of all trades, agile afficionado and multitasker extraordinaire
There is one premise that makes LabVIEW great, fun and addictive - its visual data flow paradigm and apparent simplicity. Marketing here does not help as complex problems will remain complex (albeit maybe a tiny bit clearer thanks to provided abstraction). This in a sense lowers the bar needed to be a software engineer, helping you with go on a happy hacking spree, but also lays waste to good software development practices and as a bonus here spaghetti code is apparent :)
Who am I to state such a bold claim? Well over years I've kept myself cracking in high-level algorithmic and modeling in Matlab; data acquisition in LabVIEW, low-level C as well as applicative embedded... all and all resulting in humble, but varied working experience. So this is my two cent - take it or leave it. I've always felt more like engineer first of all irrelevant of technology stack used. More important there were always people heavily preaching one or the other as being a "one-to-rule-them-all" silver bullet. People getting fascinated and carried away by particular peculiarities of any given specialization. In my book this is cancerous and dangerous to forming any "big pic" / system level thinking - which is the thing LabVIEW is all about.
Use version control (no excuse - even for a single branch, single developer)
Ok - git does not work straight out of the box in all its glory, but NI does provide LVMerge and LVCompare for LabVIEW Professional Development System users. If this sparks your curiosity check this webcast out. Even without those tools, a simple pure versioning will surely beat named folders. We all had accidents in deleting wrong folder out of the bunch of siblings named : "Project"; "Project1"; "Project_Final"; "Project_Final_Tested". And may God have mercy to all the poor souls out there integrating changes from one such "branch" to another.
Invest time to understand version control systems and learn to use them.
Learn C, in fact learn as much different programming paradigms as you can
As LabVIEW is compiled to C - try mastering it. Absolute minimum - you'll finally understand strings and parsing in LabVIEW. Try understanding functional programming of Haskell, actor pattern of Erlang, Go threading, OOP in Ruby ... at least at conceptual level. Probably you will never use anything of those, but surely they will expand your grasp of such complex matters and shape your understanding enhancing your abstraction abilities.
Add Bruce Tate's "Seven languages in seven weeks" to your //TODO list.
Understand SOLID principles and other good software practices
Single responsibility principle
Interface segregation principle
Dependency inversion principle
Go trough them. Understand them. Apply them.
There is a lot of good software developer literature and references
- "Clean Code" by Uncle Bob Martin
- "Pragmatic Programmer" by Andrew Hunt and David Thomas
To name but a few that are about making your code better and more sustainable as well as making yourself better in the process. Hacking VIs and primitives into a semi-functional non-scalable monolithic monstrosities won't get you far. Constantly improving and seeking deeper levels of understanding of multi-threading, concurrency, reentrancy, synchronization will lead to better architectures. Computer science 101, algorithms and data structures.
Try understanding design patterns and using an simplest, cleanest minimal solutions, only to refine them as needed.
Go agile. Yes it is applicable in embedded / M&C / LabVIEW
Yes... there is that chapter in Core 3 course on Waterfall vs Incremental, but there is also a lot more to it then that. Try understanding the ways of Lean startup, Kanban, Scrum and using them (within reason) when and where applicable. For God's sake don't go all religious about any one of those. Use successive approximation and get better as time progresses and adapt to ever changing tides around you.
There is some wisdom even withing the ADC.
Who is testing the testers?
It seems only natural that people focused on creating bleeding edge functional testers would be as focused on tester software quality and tests. There is a decent Unit testing framework in LabVIEW and there is nothing stopping you in going all TDD berserk (Test Driven Development) on your code. Maybe there is some (/a lot of) potential for some katas and coding dojo sessions. Try integrating Jenkins, git (or alike) for full CI experience. This might be quite a pickle, and will hopefully only get better and easier in time with NI support.
Never compromise, not even in the face of Armageddon.
This is more or less all that I had in mind for now. Please feel free to share, comment and contribute to my rant on current LabVIEW developer attitude and thank you for reading my first LinkedIn blog post. :)
Bogdan Doroslovac
--
7 个月thank you for your insight. Greatly apprechiated!
Applied physics, controls and instrumentation.
5 年Working on shared libraries, CI and documentation integration. Man it's a whole new world and I love it.
The official "Architect of Adventure". I help teams create healthy, human-centered software development processes.
5 年Very Nice Article! Actually that block diagram comes from my second ever post to the LabVIEW forums.? I can assure you that program was every bit as bad as it looks (and you are only looking at frame 17 of the stacked sequence structure.)?? But hey at least the guy used subvis! ?https://forums.ni.com/t5/Western-PA-LabVIEW-Users/I-know-someone-has-run-into-this-before/gpm-p/3390786
Principal Test Engineer at MKS Instruments
5 年You cant post the worst possible code and deduce it's not a real programming language. Sure, there are a lot of terrible coders out there. But, although LabVIEW is something you can learn in a week. It will take 2-3 years to be any good at it. I suggest you rethink your position and be more open minded because the great LabVIEW coders do implement proper programming styles and do use version control. Many LabVIEW programmers have a background in other languages as well. I guess the bad programmers only make the good programmers more marketable in the long run. Thanks for the image of the spaghetti code! After all, that's what brought me here. Good luck to you.
Senior Azure/.NET Engineer at Berlin Brands Group
6 年The whole problem is that when people study LabVIEW, they study just how to work in it, and not SW development principles. That's why, there is a lot of spaghetti code, and other "funny" stuff.