In my career, several times I’ve ended up being the pet programmer for a team of engineers and CNC operators, which frequently meant helping them do automation in their CAD tools. At its peak complexity, it resulted in a (mostly unsuccessful) attempt to build a lens/optics simulator in RhinoCAD.
Which brings us to the code Nick L sends us. It sounds like Nick’s in a similar position: engineers write VB.Net code to control their CAD tool, and then Nick tries desperately to get them to follow some sort of decent coding practice. The result is code like:
<span class="hljs-comment">'Looping Through S_Parts that have to be inital created</span>
<span class="hljs-keyword">For</span> <span class="hljs-keyword">Each</span> Item As Object <span class="hljs-keyword">In</span> RootPart.S_PartsToCreate
<span class="hljs-keyword">If</span> Item.objNamDe IsNot String.<span class="hljs-literal">Empty</span> <span class="hljs-keyword">Then</span>
<span class="hljs-keyword">If</span> Item.objNamEn IsNot String.<span class="hljs-literal">Empty</span> <span class="hljs-keyword">Then</span>
<span class="hljs-keyword">If</span> Item.artCat IsNot String.<span class="hljs-literal">Empty</span> <span class="hljs-keyword">Then</span>
<span class="hljs-keyword">If</span> Item.prodFam IsNot String.<span class="hljs-literal">Empty</span> <span class="hljs-keyword">Then</span>
<span class="hljs-keyword">If</span> Item.prodGrp IsNot String.<span class="hljs-literal">Empty</span> <span class="hljs-keyword">Then</span>
<span class="hljs-comment">'Checking if the Mandatory Properties are in the partfamilies and not empty</span>
<span class="hljs-keyword">If</span> Item.Properties.ContainsKey(<span class="hljs-string">"From_sDesign"</span>) <span class="hljs-keyword">Then</span>
<span class="hljs-comment">' I omitted 134 lines of logic that really should be their own function</span>
<span class="hljs-keyword">Else</span>
<span class="hljs-built_in">MsgBox</span>(<span class="hljs-string">"Property From_SDesign is missing or empty."</span>, MsgBoxStyle.DefaultButton2, <span class="hljs-string">"Information RS2TC"</span>)
<span class="hljs-keyword">Exit</span> <span class="hljs-keyword">Sub</span>
<span class="hljs-keyword">End</span> <span class="hljs-keyword">If</span>
<span class="hljs-keyword">Else</span>
<span class="hljs-built_in">MsgBox</span>(<span class="hljs-string">"Property prodGrp is missing or empty."</span>, MsgBoxStyle.DefaultButton2, <span class="hljs-string">"Information RS2TC"</span>)
<span class="hljs-keyword">Exit</span> <span class="hljs-keyword">Sub</span>
<span class="hljs-keyword">End</span> <span class="hljs-keyword">If</span>
<span class="hljs-keyword">Else</span>
<span class="hljs-built_in">MsgBox</span>(<span class="hljs-string">"Property prodFam is missing or empty."</span>, MsgBoxStyle.DefaultButton2, <span class="hljs-string">"Information RS2TC"</span>)
<span class="hljs-keyword">Exit</span> <span class="hljs-keyword">Sub</span>
<span class="hljs-keyword">End</span> <span class="hljs-keyword">If</span>
<span class="hljs-keyword">Else</span>
<span class="hljs-built_in">MsgBox</span>(<span class="hljs-string">"Property artCat is missing or empty."</span>, MsgBoxStyle.DefaultButton2, <span class="hljs-string">"Information RS2TC"</span>)
<span class="hljs-keyword">Exit</span> <span class="hljs-keyword">Sub</span>
<span class="hljs-keyword">End</span> <span class="hljs-keyword">If</span>
<span class="hljs-keyword">Else</span>
<span class="hljs-built_in">MsgBox</span>(<span class="hljs-string">"objNamEn is missing or empty."</span>, MsgBoxStyle.DefaultButton2, <span class="hljs-string">"Information RS2TC"</span>)
<span class="hljs-keyword">Exit</span> <span class="hljs-keyword">Sub</span>
<span class="hljs-keyword">End</span> <span class="hljs-keyword">If</span>
<span class="hljs-keyword">Else</span>
<span class="hljs-built_in">MsgBox</span>(<span class="hljs-string">"objNamDe is missing or empty."</span>, MsgBoxStyle.DefaultButton2, <span class="hljs-string">"Information RS2TC"</span>)
<span class="hljs-keyword">Exit</span> <span class="hljs-keyword">Sub</span>
<span class="hljs-keyword">End</span> <span class="hljs-keyword">If</span>
<span class="hljs-keyword">Next</span>
All of their code is stored in a single file called Custom.vb
, and it is not stored in source control. Yes, people overwrite each other’s code all the time, and it causes endless problems.
Nick writes:
I really wish we’d stop letting engineers code without supervision. Someone should at least tell them about early returns.
Source: Read MoreÂ