0818 【万泉河】工控工程师需要对垃圾程序脱敏
我发现,许多工控工程师同行,对垃圾程序这个词怀有很深的敌意,只要听到垃圾程序四个字,就会立马上头, 肾上腺分泌加速,脸红脖子粗, 恨不能下一步就要撸起袖子吵一架了。
前天,我朋友圈里转发了一套程序的文章,并评价这个程序是垃圾程序。
然后就有朋友瞬间上脑了。 来稀里糊涂不知所云地评价了一通。
但唯独可以清楚的是,垃圾二字给他带来了极度的不适,想来也是产生了共情了,等于是我评价别人的程序是垃圾程序,被他等同于了对方人是垃圾人,然后对照到他自己,做程序的能力也只够做垃圾程序的水平, 那么四舍五入约等于我也骂了他是垃圾人了。 自然就不高兴了。
这个朋友,在朋友圈里面跟我这几个回合以后,还把我删了好友了。 可见,虽然争没争过我,但仍然带着一肚子气。
垃圾程序这个词汇来自隔壁的IT程序员。 指的是,程序员设计的程序虽然功能上可以实现要求,但其代码的组织架构比较杂乱无章,比较垃圾。 所以重要的一点是做的作品垃圾,而不是人垃圾。
周星驰的电影《唐伯虎点秋香》里面,唐伯虎的好友祝枝山所画的《小鸡吃米图》就是个垃圾作品。
但任何人不能因为听到这样的评价,而理解成祝枝山是个垃圾,坏蛋。 而唐伯虎也更不可能从他的好友再共情到自己身上,以为自己也被骂成了垃圾。
所有人的技能水平都是会逐渐成长的,每个人,在入行初期,只能做简单的设计,作品也只能是入门级别的垃圾作品。 不管是达芬奇还是米开朗基罗,其成名之前,学徒时期的临摹作品,绝大多数后来都进了垃圾桶。
然而,工业化时代, 程序员的入门门槛都低,时代不可能允许一个程序员先做上十几年的学徒,作品全部作废,而是只要能让系统运转, 也都将就着可以用了。
所以,可以说,每一个编程高手,在其职业前期,做的程序都是垃圾程序。 后来随着技术技能水平的提升,为了更好的传承,也为了自己更方便维护, 会逐渐升级自己写程序的架构方法,让程序逐渐逐渐不垃圾。而到最后可以骄傲地宣布自己的程序已经达到完美境地,有信心接受任何人的最严格的挑剔。
因为,这世界上,编程恐怕是最没有技术含量的事了。 只要输入输出接口固定,工艺算法明确,仅仅通过写程序来把功能实现,实在算不上需要什么技能门槛。
比如现在流行的少儿乐高编程,你来出一道题目,给红绿两个按钮,一个电机单元,编程来实现电机的绿启红停,任何一个幼儿园的小朋友经过简单地入门指导后就可以实现。 幼儿园的文凭都完全不需要。
那么,你长大以后参加工作了,让你设计一组水泵或者风机的启停程序,并且你要以此作为谋生的技能, 你会认为这里面有什么技能门槛?你如果仅仅停留在能让设备跑起来就行,能抓到老鼠就是好猫,能让设备跑起来的程序便是好程序, 那你儿子在幼儿园阶段就已经达到这个水平了。
工程师之间的技术水平当然有不同,也当然需要有高低。 总不能所有人都还和幼儿园一个水平线上竞争吧。所谓的人无我有,人有我精。 编程行业,人人都能做得到的情况下,那需要比拼的就是有人能做更完美无可挑剔,可传承,可复制,效率高。 而不是闭门造车自我欣赏。
我见过不少IT程序员高手,在跟他们请教编程经验的时候,他们都会毫不客气地承认,自己做的大部分程序都是垃圾程序,维护了多年的祖传代码,都是屎山代码。 也见过一些管理者,创业者,有过编程经验,但承认自己玩不转,只配做垃圾程序,所以后来转型了。
甚至GITHUB上所开源的大部分程序代码,其中的大部分也都是垃圾程序。 所实现的功能固然比较惊艳,作者在其中投入的精力也令人敬佩,但客观评价代码本身是不够精炼,架构是不够完美的。
前些年,听闻硅谷出来的程序员评价那些科技大厂的程序,其中的大部分代码也都很乱,很垃圾。 具体谁家的差我记不得了。 但有记得最赞赏的是谷歌,所有程序代码都传承有序,都可以作为教科书级别的精品。
而有一些还相当不错的软件公司后来倒闭了,据闻都是代码杂乱无章,垃圾如屎山。 后来的倒闭恐怕也与代码垃圾有关。
当隔壁的IT程序员对垃圾程序现象早就习以为常, 甚至成为一种文化符号,大多数的程序员毕生的工作只不过在小心翼翼在屎山代码基础上谨慎前行的时候,工控工程师们显然也要对垃圾程序有个客观准确的认知,需要脱敏了。
来做一个论断,市面上能见到的绝大多数的无私分享的PLC项目资料和例子程序,大部分都是垃圾程序。
比如,经常有一些公众号文章出了一些多泵轮起,电梯控制,红绿灯控制等的题目,然后他们自己又不辞辛苦地给出了源代码。我就经常想,什么时候行业可以发展到人人都可以对这样的代码提出优化改进的方法,逐渐让这些代码越来越合理完善到无可挑剔呢?而不仅仅是能实现功能本身。
凭我自己一个人一己之力,显然很难撼动。 甚至,对烟台方法的学员们,我跟他们说,嗨,这儿有个题目不错,你们要不要在他们的基础上用烟台方法重新写写好?我也都很难指挥动他们。 或者他们也只是自己学习了,掌握了,也未必肯再公开分享出来。
对了, 前些年我有免费分享过80系列的例子程序, 会不会有人看到我上面的论断而推导出我这些例子程序也都是垃圾程序呢?
垃圾程序的判断要基于事实,而不是基于抬杠。 欢迎对80例子程序做法提出探讨和改进意见。 尤其是80例子程序做到了几乎所有的流行品牌平台, 也很显然,程序可以在这些平台之间简单移植。
总有人把TIA PORTAL中的OPENNESS选件应用当成工控编程的天花板。 有没有想过,你们用OPENNESS做出来的程序,能不能平移到其它PLC品牌平台呢?而你所掌握的OPENNESS技能,到其它平台又该如何实现?
到乐高积木编程呢?你会不会带着你儿子学乐高编程的时候,还要教他学会OPENNESS?