Wednesday, 15 October 2014

Programming for Scientists

I'm assuming that everyone has come to the conclusion now that programming is a necessary part of any scientific pursuit. Computers are an integral part of how we all gather, analyse and present our data. There are also techniques of code abstraction, version control and code testing that facilitate writing error free code that is easy to maintain and over time becomes a resource. These techniques are slowly making their way from the computer science field to the behavioral sciences. Unfortunately it has taken some high profile retractions of journal articles to push this issue forward.

As those I have been studying with have entered their PhD phase, there is a growing realisation that learning to program is essential. Along with that realisation I am also hearing a common statement. Most people assume that somewhere along the line, they would be sat down and shown how to program, that there would be some course to teach them what they need to know about programming. At least enough to analyse fMRI, MEG or EEG data. Most are shocked when they are handed a data set and told to 'now go analyse it'.

I went looking for teaching materials to meet this need and help my friends out. We talked a lot about what was necessary and arrived at a few realisations.

1. You learn best when the problem you are trying to solve is your own.
2. Everyone is too busy to learn programming right now but they will be busier any time in the future.
3. The easiest way to get someone into programming is to teach them something that will benefit them right now.
4. Teaching what you have learned to someone is of huge benefit and therefore absolute beginners who can be taught by those who are a little more advanced are a valuable resource for any learning group.
5. There needs to be a certain level of uncertainty, it greatly improves the internalisation of the material once the uncertainty is removed through experimentation. We are mostly scientists and the process of hypothesizing and testing is a skill we can use here too.  

The Facebook page gets a lot of views and a good amount of 'likes'. There are three or four people who turn up on a regular basis and are making great progress. The big struggle now is to get more people to actually turn up and do some coding.

The weekly sessions have taken on a definite style and are challenging but really enjoyable. The general format is to propose a common task and work slowly through the steps needed to solve this problem. The main feature is to pause at the start of each step and have everyone talk about their expectations. Having people talk about possible strategies and how they might use ideas from other solutions helps understand where everyone is in their thinking. It usually clears up misconceptions before they become too confusing.

Learning these techniques is very similar to learning a musical instrument. You can study the subject as much as you like but  you won't really improve until you practice. Trying things out and making mistakes is much more valuable that having the final answer presented to you with all the anguish removed.