Tuesday, October 30, 2007

A moment's respite

Time to take a break from real-time Java. Having worked on our programming languages assignment for most of my waking hours in the past two days, a lot of stress and frustration has built up, and something needs to come out. Unfortunately, I don't need to use the bathroom, so I guess I'll be regurgitating what I've been thinking about in the past few days. This happens to be how not to engineer software.

Our software engineering class has thus far probably taught me more things that are bad practices rather than good. Unfortunately, these practices reflect upon just how bad our development process actually is when executed. Here they are, in no particular order of importance:

  • Using version control without knowing how to use version control. Everyone knows that version control is necessary, especially for larger projects. To argue otherwise is essentially arguing with a brick wall—nobody cares. Unfortunately, knowing that version control is necessary still gives little incentive on how to use version control proficiently. I'm not here to give a lecture on how to be a version control expert, because undoubtedly I'll be wrong about something. However, it's amazing how some people in Computer Science at the senior level simply don't "get" version control. Our department steadfastly believes that teaching tools is a waste of time—such is the job of C&IT. At this point, I'm almost convinced that they're wrong, to some degree. One teammate assumes that checking out a new repository and copying all of his files over before committing is a good way to fix conflicts. This is obviously a very bad idea, especially if you have files that are out of date, and it just so happened to be the case. His solution? Blame Subversion for everything. The problem is between the keyboard and chair. Seriously.
  • Not communicating properly. When an e-mail goes out to your customer, all of the relevant people on your team should receive a copy of that e-mail. For us, that's everyone on the team. There's no reason not to, and leaving out people results in very one-sided communication.
  • Not listening. When a teammate has something to say, learn to listen. Interruptions are not usually helpful. Neither is waiting until the teammate is done talking, but not listening. This really shouldn't have to be mentioned, but this is actually a common occurence. Listen to the other person, and then if he/she is wrong, then explain why. Interrupting because you're 200% convinced your method is infallible is unacceptably rude and arrogant.
  • Project tracking instead of project leading. A recent article on Reddit summarized the problem nicely. A team leader is not responsible merely as a gateway to the customer; a leader is ultimately responsible for keeping the team accountable and heading in the right direction. Can't do that? Please don't be a team leader. You may get this fuzzy, warm "leadership" experience to put on your resume, but the result will be that your team will fail.
  • Allowing feature creep. This seems to be a fairly common problem. On a deadline as short as ours (one semester), it's vital to stick to the defined specification. "I think ______ would be nice" is completely unacceptable. This will result in a traffic jam and a failure to complete the project on time.
  • Not using an issue tracker. Humans are typically not very good at context switching. Typically, when you find a bug, the best way to deal with it is to file a bug report. If you decide to fix the bug immediately, unless you were specifically looking for the bug, you're context switching away from what you were previously doing, which can end up being quite a distraction.
  • Lack of in-code documentation. This is probably something that virtually all CS majors at Purdue are guilty of. When we're working alone, there's no reason for us to comment; we're all brilliant geniuses that always retain understanding of what our code does. Unfortunately, this brilliance doesn't transfer when you work on teams. In-code documentation is important for quick reference. In addition, many languages support extracting the documentation out from code into various document formats, which adds even more benefit to code documentation. This alone should be a good reason to document function headers. Nobody is asking for an essay, but at the same time, nobody understands what your function does.

All in all, this is a very random assortment of pitfalls I've seen among my software engineering team. Some of these are more easily corrected than others, but sometimes I wonder if it's even worth it, with so little time left.

Ah, time. Where did it go? This semester feels like it's gone by faster than the rest, perhaps due in part by the post-graduation stress that I'm experiencing. I'm flying out to Google for an on-site interview on Thursday; Microsoft has invited me to an on-site interview, but I don't know when; grad school applications are still looming over my head. It was probably a bad idea to take three CS classes this semester, of all semesters.

Tuesday, October 16, 2007

Gutsy, Compiz oddity

I got tired of Gentoo on my installed laptop, so I dove in for the Gutsy RC instead. I like the changes from Feisty, but if there's one thing that seriously bugs me, it's the alt-tab/application switcher functionality. A lot of times I use alt-tab/alt-shift-tab for quick switching, but Compiz seems to like to do all sorts of flash fade, opacity, etc. effects on it, which is rather distracting. I turned up the brightness to 100% to stop the fading, and it's less distracting, but not by much.

For some reason, the beta also shipped with alt-shift-tab broken (switch to previous window in the list). CompizConfig wasn't very helpful in letting me bind it, either, so I looked to gconf-editor to solve my problems. Funny enough, there was an entry under apps.config.plugins.switcher.allscreens.options named prev_key that was set to alt-shift-tab. Strange. There was also a prev_button entry that was set to "Disabled", so I changed that to "Tab" and it works now. It's rather odd that both fields exist. I think prev_key should be the proper name (obviously I'm not alone, since someone set it instead of prev_buttom), since there's a next_key and no next_button. It's also odd that I couldn't figure out how to set the shortcut in CompizConfig. Perhaps I'm just stupid.

Saturday, October 13, 2007

The freedom of speech fiasco

A recent turn of events at my former high school have evolved into quite a fiasco as of late. Apparently a video of "scuffle" (as worded by Indianapolis TV news) was posted online, which resulted in the people being in the video being suspended. Unfriendly words were directed at the school administration through Facebook, which somehow reached the administrators themselves—this resulted in more suspensions, which caused even more uproar. Someone reposted the video on Youtube and got suspended as well. A Facebook group was created by a student at the high school protesting all of the recent decisions made by school officials with respect to freedom of speech; this group seems to have a fair amount of students in it, reaching almost triple digits. Of course it's incomparable to those "hey guys I want to make a group with a million people in it", but for being the smallest of the four high schools around here, it's a fairly large percentage of high school students involved.

Apparently this chain of events was made a top story on the local news, and made it to Indy news, so I guess it's no small thing. Since I'm obviously no longer attending high school, it's difficult to get a crystal clear picture of what's going on, but from the picture painted by the media and my brothers, who are attending the high school, the situation is just a continual stream of terrible decisions, and not just from school officials.

The whole thing allegedly started due to a video being posted online. To whoever did this: why on Earth did you think this was a good idea? Are fights cool at school now? Get kicks out of watching your angry peers assail each other? That's really cool. Hilarious. Grow up. I don't care what actually happened the video or where it happened; being pedantic about the school code of conduct isn't my goal. Hell, I'll readily admit that I never read that code. Neither did most people who graduated with me. Most of us were smart enough to know that if we simply behaved, then everything would be cool. Getting feel-goods off of a video like that sounds rather juvenile to me. A video of a school fight isn't going to be a blockbuster that makes you a millionaire and a high-profile film maker, either. Maybe you weren't suspended for speech; maybe you were suspended for being stupid.

Of course, no matter how stupid I think posting the video was, I think suspending the person(s) who did so is just as bad, if not worse. The school should know better; we're humans and high schoolers are young humans, typically more prone to error. If school administrators suspended someone every time they did something stupid, the school would be pretty empty. Remember that cliche, "Don't shoot me, I'm just the messenger"? You just shot the messenger. This isn't Sparta. Please stop shooting messengers.

Some students were also suspended for making derogatory comments about school officials, including the vice principal, who was around when I was still in high school. Oops? I guess high schoolers don't know much about diplomacy. The previously linked Indy news article quoted a student, saying:

I called him an obscene name and he called me into his office and he told me he hated me.

That's a great story, right there. Probably one that'll last for generations to come. Okay, personally, I think that it sounds ridiculous. I'm not sure it could sound more ridiculous than it does. I really don't think that a school official would say "I hate you" to a student (followed by a one day suspension), but maybe times have changed. I guess maybe high schoolers were looking for full disclosure and got it straight on. Free speech aside, I don't know why high schoolers feel like they shouldn't be held responsible for what they say. People can get fired for saying stupid things while representing an organization. Granted, these people are typically people with a fair amount of power and responsibility, but that's exactly the point.

But then again, was a full-blown suspension really necessary? If there's anything I learned from my years of being a staff on a MUD full of kids, it's that the best way to avoid overreacting is to ignore what people say. This entire realm of school ethics is apparently a moral gray area (which needs rectification), and the decision made here clearly had an undesirable reaction. The school should probably be the second avenue of teaching kids how to behave, not the first. If a parent grounds a child for misbehavior, I kind of doubt that the entire high school would get up in arms about it. Of course, that means that a child's parents would have to actually care; this is sadly not always the case.

Both news articles indicate a lack of disclosure from school officials regarding the matter. Why is that? Perhaps they've realized that they've gotten themselves into a pickle and have no easy way out. On the other hand, students have been fairly vocal about it, who seem convinced that they're completely right. However, maybe the students aren't as sure of themselves as they seem. The freedom of speech group created on Facebook was made by a freshman at the high school, and it's interesting how the group has progressed. Or has it? The group administrator has blatantly deleted posts that he didn't agree with. Oops. Sounds like a familiar story to me. It's even worse, because this is true censoring.

A few things probably need to happen in order for this situation to settle down. First, either the school administration should stop holing up in their offices and start talking to the press. They should have nothing to hide, apologies not withstanding. The school needs to make policies that pertain to "free speech" on the Internet. Whether or not they're good policies will be tested in time and possibly in court. Kids need to stop believing that they know what's best. The previous paragraph is a prime example of a good idea gone wrong. Sorry, you are still in high school, and believe it or not, you probably lack the wisdom that your elders have. I flew under the radar in high school, and I still look back on high school wondering how I was so silly. And stop posting stupid videos on the Internet. We have lots of those as it is.