I just wasted an hour tracking down a problem with an application that controls Sharp projectors via a RS-232 (serial) connection. On sending the projectors a “POWR 1″ code to turn the projector on, we were getting “ERR” in response. The problem ended up being that the bulb on the projector was burnt out, so the projector was intelligently unable to turn itself on.
This is one case where a simple problem turned out to be a fairly annoying one.
My coolest project from work as of late has been to write a program to control the Sharp LCD projectors in RIT’s Software Engineering department through a serial interface. I really like writing code that interfaces with hardware, so this was one I enjoyed doing.
One thing I learned quickly is that debugging serial applications is hard. When my code wasn’t working, I didn’t know if it was because of the hardware, the software, or the command messages I was sending. If serial consoles or line printers were still widely available, it wouldn’t be hard to see what was going on. Since they aren’t, an alternate solution was devised utilizing GNU screen.
With two Linux boxes running Debian, I set one up with my code to send data from, and the other with screen attached to the serial device at /dev/ttyS0. Screen functions normally, but with the added bonus of displaying messages recieved from the serial device, and when entered, sending messages to the device. Screen makes it possible to visualize serial communications and send test messages without having to write or modify any code, making it an infinitely useful tool in debugging serial applications.
My bug turned out to be twofold: one hardware, and one software. The first was that the serial connection to the projector was not complete; there is a break somewhere in the wall. The second was that the manual states only that the command message be followed by a newline character. I was sending Unix newlines, like ‘\n’. The projector was written expecting Windows style newlines, which is a newline prepended by a carriage return, or ‘\r\n’. This simple fix, which I would have never stumbled over without the help of screen, was the source of my software based problems.
I am a team player.
Notice I’m not saying it to a recruiter or in an interview, it is something I actively seek in all avenues of my life. I play soccer because I love the interdependence everyone has on one another for the collective to succeed. I am a part of Computer Science House because I like the feeling of belonging to something larger than myself. It is this attitude that makes me bond with my peers in work and school to form truly kick-ass functional units. Put me in a group where we can form a team, give us enough freedom to be autonomous, and presto-chango: you’ve created a self-reinforcing productivity monster.
I put a lot of effort into my teams. Regardless of the role I play, I never expect more out of anyone than I have given and am prepared to continue to give. If everyone else feels the same, your teammates are happy, respect one another, and bond at a depth that goes beyond the work at hand. However, there are people that destroy teams.
They look good on paper, but truthfully their successes have little to do with their individual abilities. The material on their resume comes from the effort of other people, their previous teams, which they have used as a cover for their own incompetence. They exploit their personality, physical appearance, or the good nature of the people they interact with to get assistance in every avenue of their work. They handle the basics, but the real shine comes from many other used, uncredited individuals.
Their results look good, but they are not their own. True team players put forth completed work as the result of the group’s effort, fully understanding that the goal would have been unattainable without utilizing the skills of their teammates. The user, however, abuses the efforts of the group for their own personal gain. As the efforts of the team go from working for the collective to furthering the agenda of an individual, the team suffers. Members will be unfairly burdened by the work, becoming burnt out, unhappy, and suffering the pains of missing deadlines while hearing no praise for their successes. Meanwhile the individual stands out in the group, appearing to produce quality work while the rest of the team is straggling.
These individuals may not be conscious of their actions. But it doesn’t matter. Either they are unaware of the effects of their actions and are too oblivious to see them, believe what they are doing is normal, or they understand what they are doing is not right but continue to do it anyway. In any case, keep them off my team. I want individuals who are fully capable of doing their job, people competent enough to do their work without changing the position to better fit their lacking skill set. Bring me people who are both reliable and willing to rely upon others, and cast out those toxic individuals who will serve themselves over the group.
So to any hiring managers reading this entry, don’t take a chance on that individual. See past their credentials and degrees, and ascertain whether that person really got to where they are from their own efforts and contributions. Because while that candidate may look incredible on paper, with a 4.0 GPA and more letters behind their name than are in the English alphabet, their pristine throne may rest upon the backs of everyone they’ve used to get there.
And that is not a person I want on my team.