The more projects I see the results of where the customer lives in a vacuum, the more convinced I become that for a project to be very successful there must be close ties between the developers and the customers. For those of you familiar with the latest buzzword methodologies like Agile and XP Programming, it is becoming pretty popular to say that a member of the customer's team should be placed in the development group to provide instant feedback about features and functionality.
While this type of thing isn't always feasible from a business sense, I have noted in my career that the more involved the development team is willing to get with the customer, the closer the end result gets to being what the customer actually needs.
On an unrelated note, I attended a business event the other week where I met an academic advisor from one of the local universities. Since I've been relatively successful in navigating a career in IT, she was asking me what I would recommend students beginning or currently in a Computer Science program should do to make themselves more attractive as job candidates. I responded with the following:
Writing/Composition/Speaking- Sorry to burst anyone's bubble, but the more experienced and higher you rise in an organization, the more you be required to write whether its specifications, managing relationships with members of other departments, or even external communications. People may not always understand the technical aspects of what you are putting across, but they can make some assumptions about your intelligence based on your ability to communicate. In addition, building and maintaining relationships is the easiest way to get ahead in your career, so do reach out and talk to people.
Minor in Business- Each and every one of you will be working for a business (I consider the government to be a really inefficient business). If you are like the vast majority of programmers, you will be on an internal IT staff or doing consulting work for business customers. That being said the more you understand business terminology and concepts, the better you'll be able to communicate with your customers. Workers who can speak both techie and business jargon are invaluable to an organization since they can help break things down in terms the customer understands and so has an easier time winning approval from other departments. Being strong in business and management is a great way to put yourself on the fast track to increased responsibility, project management, and much higher pay than a heads down developer gets.
Internships- Experience is king. Let me say that again: EXPERIENCE IS KING. There is no replacement for experience. This is why if your college offers an internship program, take as many internships as they'll allow you. If they don't, go beat the doors down at local companies and find one yourself. Having real job experience not only builds your credibility, but it also decreases the risk of hiring you since you've proven you can survive in a business environment.
This officially satisifies my guilt at not posting for a week. I'm on an extremely agressive deadline for a project right now and I just haven't had time...