The wonderful and the woes of the Professor Adjunct

First, let me say that I love teaching. I love talking to my students about my specialist topics and getting into discussions about the future of technology and getting them set for a career in academia. It is one of the best feelings in the world.

In some small way, I help to contribute to the future production of all my students and that gives my life a real impact on the world. I have helped people learn to program that have then gone on to work on new robots for CERN (to upgrade the Large Hadron Collider), I have helped researchers from a variety of fields such as library science, music, history, civil planning, and more. I even had a member of the Royal Society in one of my classes that had an entire Journal issue dedicated to him.

Unfortunately, I can’t survive on a part-time teacher’s salary. Since I withdrew from my research degree I am no longer eligible for a tenure track position (a fact that has been lamented by the Chair of my new dept). Fortunately for me, I have strong technical skills that are highly adaptable to many problem domains so I have a well paid day job that allows me the freedom to spend my spare time as a Professor Adjunct.

I am one of the few, though to be fair this is fairly common in my department.

So that is the great part, I get to teach as a hobby. Now for the problems.

I don’t know semester to semester what my schedule will be like, I am at the whims of the class scheduling staff and I am in competition with the other Professors and as the junior member, I am last in line. Normally since I have a day job this wouldn’t be too bad, but the benefits that I get as a 2 class teacher are better and much cheaper than the benefits options I have at my job. But I don’t know if I can rely on them.

When I was teaching at the IT dept at Oxford it was fairly well established that to set up a new class it would take 9 hours of prep time to 1 hour of lecture time. In my current job, I am paid for 8 hours work a week per class and 3-4 hours of that is just dedicated to giving the lectures. That leaves 4 hours a week for lecture generation, review, admin work, correspondence with my students, office hours, and marking papers/exams. There is no physical way that I can pack all of that into 4 hours of work. I donate a lot of time and energy to helping my students succeed, but if I was trying to do this as a living I would be in a very bad position trying to get this all sorted out while maintaining anything resembling a life or having time with my kids.

My pay is also less than half of what I earn at my day job.

This is the reality of the Professor Adjunct, I love my job but I am not given enough hours to do it properly.


I have just released my entire Introduction to Python course for free on YouTube

If you are interested in learning how to program, I have just finished and released a complete course on Python on YouTube, the course and the book are free, so please take a look and if you know anyone that is interested in learning to program please share the link with them!

Introduction to Computer Science using Python part 1

I’m finally getting around to making another Introduction to Programming series on YouTube, this time for my Introduction to Python course. Here is the first video with more to follow over the next few days/weeks.

The Award Ceremony was last night

Last night I attended the OxTALENT award ceremony where I won one of the runner up awards for the Open Practices category.


This is what they have said about me:

Thaddeus Aid: Use of OER Courseware in an ITLP Online Course

Thaddeus is studying for his doctorate in the Life Sciences Interface Doctoral Training Centre (LSI DTC) in the Department of Statistics, and also teaches for IT Services’ IT Learning Programme (ITLP).

aidBecoming proficient in a computing language takes time and practice. Standard ITLP courses give a brief introduction to programming, but don’t have sufficient time or resources for extended teaching support to the participants. It was felt that an on-line course over a period offour or five weeks might give participants more exposure to the topic, and provide some support from a tutor during the extended self-study that the course would entail.

Thaddeus’ idea was to use an existing course that might be available as OER, so he researched the available courses and found How to Think Like a Computer Scientist: Learning with Python, produced by staff at Luther College in Iowa, USA. Although the course provides a great deal of interactivity, Thaddeus also set up a discussion forum in WebLearn so that he could interact with the students, and they could engage with each other.

The course has proved to very popular, and Thaddeus has used the feedback from students to make improvements: for example, he now holds an introductory one-hour face-to-face session so that the students can get to know each other.

I am very pleased about this. It was a much bigger deal that I was expecting with senior staff from my college in attendance, heads of departments, one of the vice-chancellors of the university, and they got TV scientist Marcus du Sautoy to give a talk.


Thank you OxTALENT judges, I will continue to push open educational practice into my courses.

I just won a teaching award!

I am pleased as can be this afternoon. I recieved an email that told me that I won an OxTALENT award

I think this is for my Introduction to Python mini-MOOC. Last academic year I was approached by my teaching manager at the IT Learning Programme,, who I was providing Perl teaching for, about starting a second programming course. We discussed which programming language to do and what format it would take and eventually we chose Python and an online, supported learning format using an online interactive course text.

I think my manager at ITLP put me forward for this award, but I have won it and I will be receiving it later this month.

I am so happy about it.

Do I think that there are Human races? No, and here is why:

In biology “race” has a very specific meaning, it is a synonym for “sub-species”. Like “theory” the scientific meaning and the common use meaning aren’t the same. So we have to define what definition we are using.

The definition I am using for race is two populations of the same species that can interbreed and produce fertile offspring but don’t due to isolation.

Dogs and Wolves are a good example of this idea. They do produce fertile offspring but don’t breed together in the wild.

So under that definition we can superficially think that humans have races, but looking at the admixture history of our species (Hallenthal, 2014, check out for a history of human population interbreeding, my PhD supervisor was the senior investigator on the project) shows that no population is historically pure and that genetic admixture on a large scale is a common event between populations. 

When we think about dividing populations genetically with humans we fall into another major problem. There are only a handful of common variant locations in the human genome that reside in only one population. One report that I saw said that there are only 4 mutations that can only be found in Europe or Ethiopia and that all other common mutations are found to some degree in both populations. So there is no meaningful genetic delimiter to divide the populations.

As I think was mentioned we also have the problem of genetic diversity. The out of Africa event only happened ~70kya that is a blip in evolutionary time and there are only a handful of recognised selected for traits that have arisen in the time since that split. So we are not a very genetically diverse species having had a major population bottleneck at just about the same time as the diaspora that reduced our species to approximately 10k people. The result of that is that according to one source I read any two Gorillas are more genetically diverse than any two humans. So if you take two Gorilla siblings they will have more genetic diversity than a Northern European and an African of the San people.

So speaking as a population geneticist I don’t accept the premise that there are human races. The last time there was a set of separate human races was when the Neanderthals still walked the Earth.

In regards to the social construct of race: I still don’t buy it. I completely accept the premises of Ethnicity and Culture but if you can convert to a new culture then it cannot by definition be a hard line between groups (in example converting to Judaism.)



Though I don’t believe in race, I do know that racism is real and is a huge problem around the world. Please don’t confuse my scientific stand with an idea that because there are no races that there is no hate in the world.

On the fear of rejection

About three years ago I was about to graduate from the University of Reading and I was looking to do a PhD because I love doing research. My institution at the time had accepted me as a PhD student but there was no money to go with it so I couldn’t afford to attend Reading University even though I had a great project that would have been for the social good. Instead I started to look at other Universities in the area figuring that at least one would be interested and maybe I could get funding for my degree. When I started looking about the University of Oxford was within the geographic area that I was able to travel to for my studies and at first I gave it a pass because why would Oxford want me? I looked at the programs and found them to be fascinating but very intimidating, so I looked at other universities around me until I figured “wait, why I am saying no for them?”

Sure it was going to cost me £50 to apply but I was at a position in my life that I was able to apply at one of the top universities in the world and if I didn’t at least try then I would regret it. I knew I wasn’t going to get in but I wanted to say I had at least tried. So I put together the application form, got my letters of reference and submitted my application and waited for my rejection letter.

Eventually a letter arrived from Oxford and I opened it expecting to read “Dear Mr Aid, We regret to inform you that we aren’t interested” but instead it said that they wanted to interview me. This floored me more than the rejection would have. So I sent back a letter saying that “yes I will come” and went to my interview. I sucked badly at the interview, I was nervous and I messed up on very simple questions because I couldn’t think straight. Not only that but I was being interviewed by a Professor of Biochemistry that was also a biophysicist and the head of one of the national science societies and I was intimidated.

So I went home knowing that I was waiting for the “thank you but no” letter that was sure to come. Instead my letter said “thank you for coming, we would like to invite you to a second interview”. I, of course, accepted the invitation and then I was interviewed by the head of the department and a subject specialist. This time I was more prepared and didn’t make so many simple mistakes but I left thinking that I was going to be rejected but I knew that this time I had given the interview my best and that couldn’t be taken from me.

Again I was waiting for my rejection letter, but it didn’t come. I was offered a place on the program and I was offered a student stipend. If I had let my fear stop me from applying in the first place I wouldn’t be doing my PhD now. So don’t let fear stop you from doing something, make them say no, because you never know when they will say “yes”.

“Yes” is a beautiful thing and you will never hear it unless you take a risk.

Need a better way to work

I’m working on annotating my results at the moment and that means that I have to take each region and input it into a website, search the website for the information that I want and then hand copy it down to my spreadsheet. This is unacceptable, I am a computer scientist. There has to be a better way.

What I have is:

1) a .csv file that contains the regions that I am interested in.

2) a file that contains data about these regions (but single mutations can have 4-6 entries on each variant)

3) a website that I can manually look up to find this data.

If only I had a wheelbarrow, that would be something.

What I need to do is get the data for the areas that I want and then write a new program to take that data, process it and spit out the tables that I want. But first I must ask myself what do I want from these tables?

What I want is:

1) Chromosome and population of sample

2) start and end of region

3) nearest gene and if there is no overlap I need to know the distance to the nearest gene

4) The number of non-synonymous mutations (those that change the expressed protein)

5) The number of non-coding functional mutations in the region

6) if the hit region overlaps a gene (or more)

7) gene function information

This seems like a bigger task than it is, I should be able to do this fairly easy but I am having a mental block on getting started. It is usually about this time that I start asking for advice on how you get past the wall of starting terror.

Answering a question about fractions

This is for a friend who has a question about why one fraction equals another.

The question is why does \frac{45}{-30}=\frac{-3}{2}

Let us take this through the steps one at a time:

The obvious start is that the answer should equal itself to begin with:


By convention the negative sign should be on the top so we multiply both sides by \frac{-1}{-1}


Now we factorise -45 and 30, but we can think of -45 as -1 * 45 so we only need to factorise 45:

30 = {1, 2, 3, 5, 6, 10, 15}

45 = {1, 3, 5, 15}

The largest factor is 15 for each so we will use that for our reduction:


Getting ready for my Transfer of Status and the trouble with MPJ-Express and rJava

I am coming to the end of my time as a Probationer Research Student and I have about 2.5 months to put together a 15-30 page document in order to convince the Dept. that I should be allowed to become a D.Phil student properly and continue my research.  I am hopeful about the process but I am very stressed out about it. The basic idea is to see if I can produce original research and if I can communicate what I find.  I know I can do both. I started doing original research as part of my undergraduate and I don’t really see a problem with striking out on your own. I have written enough papers and essays that I am confident that after a number of drafts I will have a document that will pass muster.

But that doesn’t stop the nerves, I am going to be tested and I will have to answer questions about my research with a panel for an hour or two. I need to remember that I can do this and that I am a capable researcher.

It doesn’t help that today I have had a series of failures of code to deal with. I have moved to a new set of servers operated by the Oxford Supercomputing Centre. This means that I have access to up to 128 cores at a time but I have had to teach myself how to code for supercomputers and I am regretting not taking that class as part of my undergraduate. I have been teaching myself Message Passing Interface (MPI) in the form of MPJ-Express so that I can continue to code in Java and just pass my .jar files to the server for execution.  My main task with MPJ-Express is to parallelise Niall Cardin’s treesim. Treesim is the program that I use to create trees from HapMap and 100 Genomes data and then I analyse it to determine where positive selection is occurring. It has taken me about 2 weeks to get this up and running. The MPJ-Express itself wasn’t too hard, I managed to get the wrapper up and running fairly quickly but not perfectly. It was controlling treesim with Java that proved to be the big problem. I was trying to use Java’s Runtime.getExec() process or ProcessBuilder to launch and manage the single thread process of treesim, but I had to replace that with the Apache common exec library (btw THANK YOU ASF for being there!).

Currently my MPJ-Express code launches all the demons and then the head node send a series of non-blocked command to all the cores. Each core then takes the command and runs the instance of treesim, but I would like to change it so that when a core is free it polls the head node for the next available command. But I am just happy that it is working at this point in time.

I have also been learning rJava to deal with the out put of another Java application that I have written. rJava is a bit of a nightmare because I don’t think enough people blog about it so it took me a long time to find a simple command that fixed my problem. I was having problems translating a Java matrix into a R matrix but the following code sorted out the problem.

This is the signature of the Java method


public double[][] getData()


I tested that within a Java environment and it was working fine. But when I moved it to a R environment it wouldn’t translate. The following code is what was needed to fix the problem of moving a 2d array from Java to R in rJava. Your .class file needs to be in the R/library/rJava/java directory of your install or you need to .addclassPath in R.


library(“rJava”) // loads the rJava library

.jinit(parameters=”-Xmx10240m”) // starts the JVM with the parameter -Xmx10240m since I needed 10GB of memory for my process

s <- .jarray(“string”, “args”) // creates a String[]

javaobj <- .jnew(“NameOfClass”, s) // executes public static void main

array <- .jcall(javaobj, “[[D]”, “getData”) // executes the method of your choice

array <- sapply(array, .jevalArray) // this is what I was missing


After sapply I could use the matrix normally.

In other news, I ran across one of my students and he told me how he used my class and some of my advice to replace a program he was using with a better one he wrote himself. It felt very good. I have been in touch with ITLP at Oxford and they want me to run the Perl class again next term but they also want me to put together a new distance learning Python class. I am very excited about this.

%d bloggers like this: