What Should College-Level Programmers Know About The Real World?

On Feburary 1st, I had the opportunity to see a keynote presentation by Professor Brian Kernighan at Princeton University for Drupal Camp NJ. (I know, this entry is at least a month late.) Unfortunately, not everyone knows who he is. However, I would hope that people at least know about his contributions to the field of computer science. These include, but are not limited to:

  • Co-authorship of the AWK and AMPL languages,
  • contributions to the UNIX operating system, including cron,
  • and co-authorship of many programming, UNIX and C books.

The purpose of his keynote was to ask programmers of the real world, in this case, Drupal programmers, what he should be teaching college kids in order to prepare them for the real world. The following is an example of the sheer naivety of a student, quoted by the professor from a course evaluation form.

“Professor lacks expertise on many of the topics he lectured on (he said this); why should I trust what he teaches?”

I’m surprised at the fact that the student expected him to know everything about certain topics. Then again, I guess most, if not all, students who have yet to experience real-world scenarios are somewhat naive in some sense. (Professor Kernighan made a good point, with which I agree: I’d be less likely to trust anyone who claimed they did know everything.) Technology changes so quickly that it’s impossible for anyone to have the capacity for that much expertise in specific frameworks and languages. He explained further that his classes mostly teach concepts and theory rather than specific languages, and that students may leverage their preferred languages or frameworks in order to get their assignments done.

Since the field is constantly changing, programmers have to continue to change with it, but they should have the basic, logical knowledge and be able to adapt to new techniques and languages. Graduates should have a deep understanding of programming theory so that they can just learn the syntax of a new language when necessary. In addition to theory, they should gain some experience with an existing framework such as Symfony (PHP), Rails (Ruby) or Django (Python), which can help them get a foot in the door at most companies. I prefer to see a candidate with knowledge of specific frameworks so that I don’t have to train them in said framework. New hires can also feel a sort of culture shock and feel like they are being thrown into a fire. Personally, lack of confidence is not what I want to feel when just beginning at a new job.

One downside to learning languages/frameworks is spending time learning one that isn’t actively being used by many or any companies. I advise doing some research to help you choose which framework you should learn before you begin learning one. New is not always best because companies haven’t adopted them yet, and anything that is on it’s way out should probably be avoided, for obvious reasons. (Unless, of course, you want to fork it and make your own or simply learn from older frameworks.) Some languages have frameworks that beat out all of the others by a large margin. If you’re going for web development, PHP is a pretty safe language to learn at the moment because of the popularity of it and its frameworks. (80% of the web, last time I checked.) Though I don’t have a single framework that I can recommend because there are so many and I haven’t used them all. Whatever you choose to learn, be flexible and be willing to learn new things.

As for the other side of the spectrum: I was talking with some of my fellow Drupal Long Island meeting-goers in February, who were talking about how they were trying to spread the word about the group to colleges. They explained that when they spoke to a professor at a college I won’t name, he was pretty unprofessional about it and told them that, “Frameworks are bad.” Mmkay. I’m a bit speechless about a professor who doesn’t believe in learning about certain tools which can save people time. The analogy he apparently used was:

If you could build a ferrari for half the price or choose to buy one, which would you choose?

To me, this is a bit of an inappropriate analogy and doesn’t really represent that which frameworks can do. The response someone gave was, why should we spend 100 hours building authentication scripts when thousands of people have written and reviewed the existing code in frameworks? In real corporations, when you’re looking to save time and money, your best bet is to use a framework of some sort.

What do you think new college graduates’ skills should include in order for them to be hired to work with you? What do you wish you had learned during school to better prepare you for the real world?

You can listen to the whole keynote here.