I have worked for VisionNet Inc ( so called the first laboratory-based venture company in S.Korea ), Samsung Electronics, Wilshire Associates and Harris.
Also, I met lots of S/W engineers from my university years until now. There were many good programmers and bad programmers. It’s not only about their skill but their personality.
In CS, people always emphasize on simplicity, easier to read and write, more well organized structure for easier maintenance. However in reality, people often write hard to maintain code due to their lack of understanding of programming or intentionally.
One genius person in W* was a guy whom others can’t dare to ask, because he literally made the W* possible to be established.
However, he always wrote variable names like, pp, ppi, ii, ik, ili….
What the heck? It makes things easy to be written wrongly.
Also, there was another guy at H*. He is EE backgrounded person. He has written lots of code but it is different from that of CS/E backgronded person.
He understood class inheritance weirdly, and I found some implementation which was totally wrong, but due to some side effect of C++ implementation, it worked under that condition correctly. However it was totally wrong in method overriding.
Also, he used macros too much and the way it hindered people from understanding or analyzing code.
They have something in common. When people with good experience approach them, they say harshly to those people like “Are you a programmer?”, “Do you understand this?” (I can’t express the tone. Tone is very important for this. )
it is very effective tactic to protect them in work environment, because their manages are usually non-CS/E majored people. If something is said in difficult way or if they mumble some techie, or buzz words, their managers tend to think of them as a “better” engineer.
One day at CocoaHeads LA, one guy who was a marketing person in an advertisement company told his story one day. he laid off during the economy crisis period. Instead of feeling really down, he decided to do his own business. he decided to make an iPhone app. So, he hired some contract-based small company to ask them to build an app based on his idea. Those guys wasted his time and couldn’t implement the program. Sometimes it can take more time to implement a program. it’s OK. But the way they responded and behaved was totally non-sense. I could see the they lied and incapable of making iPhone apps.When promising expected project finish date, it is different when the lie or they guess sincerely but wrongly.
However, because he was not CS background and he, anyway, was betting his life at that moment, he kept the contracted S/W development company.
Just like that when people who don’t understand what they work on, he can’t judge his colleagues and his workers correctly. It is very often that he thinks good engineers as bad engineers and bad engineers as good engineers.
So, under that situation, people write code like this.
( If you can read Korean it will be better, but the code in the linked pages will reveal what they are. )
- How to write almost impossible-to-maintain code (1)
- How to write almost impossible-to-maintain code (2)
Those are totally against Software Engineering.