One of the things I do to stay sane (always a questionable goal) is to disappear into the woods or onto the water. Saturday I was fishing and unlike the serious bass fishermen on the lake at the same time – was actually catching fish.
You may ask – “what does this have to do with CS or being a professor or care of graduate students?”. A lot.
Do Your Homework. In order to catch fish you have to know where each species is, when it is there, and what it likes to eat. You can have the best technique, fanciest lures and nicest boat – but if the fish aren’t there or aren’t feeding then you won’t catch them. It took three months of being “skunked” while studying the lake and its life cycles before I began to catch fish. I don’t get “skunked” now. In science, in order to identify a significant problem you have to be aware of the state of the art – this means you have to read the literature and (what is more difficult) understand it and its context.
Choose the Right Tools. The bass fishermen where looking for bass (DUH), but at this time of the year the bass are in the shallows chasing minnows. (the minnows themselves are chasing the water fleas and fresh water shrimp, while hiding from the bass). So if you want to catch bass, you need to be able to get into the shallow water. Modern bass boats cost $10000-$30000, have a 2-3 foot draft (all right 1/2 meter). They are designed to quickly move the fisherman from one spot to another and easily make 40mph. Running into a stump or grounding at 40mph is not good for your boat. On the other hand my canoe cost $700 or so, has a draft measured in inches and easily makes 2mph (4 with a strong tailwind). But I can get wherever I want. In CS, the tools are critical – both the formal and mathematical ones as well as mundane things like languages. We don’t use assembly languages (most of the time – except hardware people), and in most of my classes I insist that the students learn new languages. Java may be great but it’s not the best tool for everything.
Don’t Do What Everyone Else is Doing. The bass fishermen were seeing that I was catching fish. (Binoculars help). They would come racing up and try to catch some as well. The trouble was – I wasn’t catching bass. I was looking for mid-column fish (Crappy or Catfish) and catching them. It must have been intensely frustrating to see this (relatively) low-tech fisherman hauling in fish (if two counts as hauling in) while not getting any strikes yourself. This is one lesson I have trouble teaching the students – if everyone is doing it then you shouldn’t do more of the same. Last year the fashion was SVM’s. Nice algorithm, reasonable code, and you didn’t need to write much to make it work. Every student wanted to work on secondary structure prediction with a SVM or some conglomeration of SVM’s. Trouble is, it’s really hard to make a significant improvement in that field by tuning parameters on a piece of code that other people are using and moving from 83% accuracy to 83.5% accuracy isn’t going to win you a Turing prize.
Build the Resource Base. I release most of the fish I catch. My family cleans our section of the shore and builds fish attractors. We encourage cover for wildlife (not just fish). We practice conservation. In science – publish, publish, publish and make the code available. Build servers (yuck practical stuff), and try to educate the next generation.