Hacking the University

Learning a craft

Andy Evans

Andy Evans

Lecturer, University of Leeds

Posted in lecturer geography uk leeds java

Who are you, and what do you do?

Andy Evans, and I'm a Lecturer in GeoComputation. I work in a geography department, which is a great place for hackers of all kinds, as it's one of the few places you can still get away with studying pretty much anything - Geography is the last bastion of the Renaissance ideal that it's possible to study the world as a whole, rather than breaking it into separate subjects, which means it's continually interesting and varied. I teach programming (Java at the moment) and a variety of Artificial Intelligence bits and pieces. This might seem strange for a geography department, but actually we've got 40+ years experience at Leeds of using AI to do all kinds of spatial work, from finding crime clusters to predicting floods. Geographical problems tend to be very hard and very messy, because you're dealing with open systems containing massive numbers of variables, and AI techniques cope well with that kind of thing.

Who taught you how to do what you do?

I owe a huge debt to my dad, who was a GPO electrical engineer working in phone exchanges back in the day, and a real advocate of computerisation. Our house was full of machines when I was growing up, and one of my earliest memories of computing is feeding Star Trek on 5-bit Baudot tape off my finger and into a machine he'd built around a Motorola 6800. We played it one move at a time using a Telex printer for output. Strangely, he's come full circle, and is currently playing with PIC chipsets. He taught me C when I was about 11, and gave me little, but real-world, jobs to do that used it - which is the secret with teaching coding. The other big influence on me was having ZX80s at primary school, and then a Spectrum at home when I was at secondary school. These were the days of Tron and War Games, and as kids you really felt like time spent coding was time at The Edge. I spent hours copying out BASIC code from magazines, which seems fruitless, but I can't stress enough how good it was at getting you to understand the core ideas, and it really encouraged you to experiment with your own game development. I'm a big fan of Scratch, which is the modern equivalent, and I'm really excited to see how the Raspberry Pi digs in.

When I left school, I went on to study some computer science at Aberystwyth University, as part of a degree in Geography and Geology (back then, in Wales, you studied three subjects in Year One, two in Year Two, and one in Year Three). Aber is a great place to study, and they were doing lots of interesting stuff, but I'm not sure the limited computing courses I did really taught me anything extra, other than to hate pointer manipulation. One of the really great things about computing is that it is there for anyone. You don't need to have a degree in it to engage with it, just a willingness to learn and hack - I know lots of people who didn't fit in with their schools more generally, but found a home in computing. After Uni, the rest I learned from books and by putting myself in the position of having to code problems. More recently, I find teaching Masters students and supervising PhDs teaches me a great deal - they really engage at depth, and push you into difficult areas. I love not knowing the answer to difficult questions, and working with students to explore potential solutions - it really keeps you on your toes.

There are a few useful things I learnt as I was going along:

1) Reading is definitely key. This is obviously important when you want to learn a language, but what's less obvious is you need to carry on reading after that, especially books written by experienced coders. If you can't sit and watch experienced coders code, or have them look over your shoulder, this is the next best thing. The code experienced coders produce can be amazing - what takes you a hundred lines can be shrunk to ten, and once you see it done, you never look back. If you want elegant and efficient code, this is the way to get it. Having just said a computing degree is unnecessary, it has to be said that what they do provide is a complete view of the subject and how it hangs together, which is difficult to get from language or software-centred books - so if you are going it alone, it's definitely useful to look at the stuff covered by computer science degrees. For example, it's good to get a solid grounding in the basics of how computers work, and data storage structures, which aren't things that books on learning languages tend to cover, but are the kinds of things experienced coders have got their heads around. But also coders need to read other stuff. It is very easy to get caught up in computing and forget what's going on in the real world, and there's also a lot of material out there that will teach you good coding practice without actually being about programming. My favourite computing book, and the one I recommend to all my students, is Penguin's Basho collection "On Love and Barley". Basho was a 17th C Japanese haiku writer, and displayed amazing elegance and efficiency - a really inspirational writer of concise, clear, and creative language. Any coder can learn from him.

2) You should never stop learning. Computing moves ridiculously fast. If you're a scientist, you find yourself arguing vociferously that conference proceedings are perfectly decent publications, because by the time journal papers come out they're generally very out of date. Given the storm-force wind of novelty, it's very easy to give up and think "I can code in X therefore there's no point in trying to stay on top of this new stuff". This partly explains why there are so many FORTRAN programmers in academia. Given the amount of computer stuff that comes and goes as a fad, you can hardly blame the attitude, but it is really counterproductive - things improve, and they do so because the older stuff got in the way or encouraged you to make errors. The secret is to recognise what's worth investing in, which is a real art. If programming isn't your day-to-day job, I'd definitely recommend trying to read up one new computing area every three months at least; if nothing else it keeps you in the learning habit.

3) It is important to remember you're a real live girl/boy. One of the things that frustrates beginners is trying to compile code, and it not working. Beginners tend to think it means they're rubbish, whereas actually it just means they're a human being, with all the beautiful crazy capricious illogical messiness that brings - they're just trying to communicate with something with the innate intelligence of an earthworm. Computers are thick, and inhumanly logical; whereas people are not. When something doesn't work, that's to be celebrated - it means you're human - it's the same thing that makes you tingle at a first kiss, shout at politicians on the TV, and think about striking matches into boxes of fireworks. I doubt anyone would really have it the other way around. You just have to learn to talk down to computers, slowly and clearly. The thing beginners often fail to realise is that writing code is maybe 30% of what programmers do, the other 70% of the time is spent debugging problems to get it running - that's what programming is. None of us write perfect code first time - what kind of human would? All that happens as you get better is that the problems get harder, because you feel confident enough to try difficult stuff. You know you're a coder when you enjoy the challenge of debugging - that's when you've been fully institutionalised.

What tools do you use?

I like to code Old Skool, so generally tend to use a text editor and compile at the command line these days. However, after years of dipping in and out of an on/off love/hate relationship with Netbeans, I have recently developed a new-found admiration for Eclipse, just because there are so many great plugins for it. I have to admit that I'm one of that rare breed of coders who will actually admit to liking Microsoft software, and will happily face down any shame on it. Having started on systems where you had to write your own OS, and having moved up through various DECs, Solaris releases, and Mac systems, I'm happy to let Windows and Office do the basics. I'd also agree with Linus Torvalds on Visual Basic's massive contribution to programming - albeit I don't like the language and the stuff it hides from beginners. On the library/software side, I'm really into Processing at the moment, not least because of its underlying philosophy of making things beautiful and easy to use, while not getting in the way of you doing high-end stuff. I'm also slowly exploring, somewhat belatedly, R, which is equally fantastic, but for other reasons. I'm looking forward to experimenting with the new Repast release for High Performance Computing and Nick, one of my ex-students-now-colleagues, has me really convinced of the advantages of the Amazon EC2 cloud, so I'm looking forward to playing with that. In terms of stuff I'd like to get my head around, there's so much of excitement out there at the moment - it's a really great time for developers. It would be nice to do more with social network feeds and camera-based interaction/augmentation, for example. Academically I'm interested in error propagation in complex systems, which is a really tricky problem that pulls together lots of modelling techniques, visualisation, data manipulation, and the sociology of policy making, and I'm enjoying finding out how other people, like climate scientists, deal with it.

Describe your dream working environment.

Somewhere where people are committed to solving real world problems, but equally have the space to try new things that may go nowhere useful. In that sense, Universities are the perfect environment - you have the freedom to work on the big issues the world faces, but equally you have the space to try new stuff. I try to get a good balance between the two. The times I really enjoy are just meeting up with colleagues over a coffee and yacking about the latest software or a coding issue we're having, sparking off one another. We currently have a really great team, in that we all have different skills we can bring to bear on problems. I'm lucky in working with some really smart and friendly people who are much better than me at heaps of things - coding (certainly), managing projects (definitely), and kicking me to do stuff when I could easily spend the day answering administrative emails (essential). Being surrounded by smart and warm people who are socially committed, but with a hacker ethic, really is living the dream.