Skip to content

Instantly share code, notes, and snippets.

@drj11
Created April 5, 2017 10:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save drj11/4caf265ff1ef0074860c675c6eb4eef1 to your computer and use it in GitHub Desktop.
Save drj11/4caf265ff1ef0074860c675c6eb4eef1 to your computer and use it in GitHub Desktop.
sheffield job

My CV is available online at https://github.com/drj11/cv

Open Source has created an incredibly valuable ecosystem. So far, this ecosystem is software tools for professional programmers. I'm keen to see Open Source create value in the scientific community.

Life sciences are being revolutionised by a tsunami of data, personal omics being just one example. Using this data to deliver valuable services to society (without being crushed under the tsunami!) will involve computation and computing skills.

I'm applying for this job because I would like to use my skills to bring the benefits of data-oriented life sciences to society: It is an exciting area to work in. I'm particularly pleased that it aligns with my personal view that biologists (and scientists generally) should hire more programmers.

I consider myself a general purpose programmer. Currently at ScraperWiki we make data-rich web applications and this is something that I've had to learn. But learning something new should not be a barrier to achieving a goal. I enjoy the challenges of solving problems, and learning new things in order to solve problems.

The challenges that programs, and programmers, can help solve do not exist in isolation. They exist in a context that involves a variety of stakeholders with diverse skills, and in a playing field that includes known relevant information, and along a future research path that includes known unknowns and the unknown unknowns. We must reach out to our teammates, our community, and work together to meet those challenges. This entails a cross-disciplinary approach, programmers, scientists, clinicians, community all working together. No programmer is an island.

PUBLIC CODE REPOSITORIES

I'm in a fortunate position where at least some of my code is publicly available. Most of my recent work at ScraperWiki is not available publicly, but some is. At ScraperWiki particularly, most work is paired, and this is not always reflected in the git author and committer (though we do try and reflect this in the merging of pull requests). My github profile is at https://github.com/drj11 but I do not advise exploring without a guide:

https://github.com/drj11/pypng is a small Python library for handling PNG image files, that I rescued from obscurity, extended and reworked somewhat, and now maintain. Sometimes I even get pull requests!

https://github.com/scraperwiki/custard is the (mostly CoffeeScript) source code to one of ScraperWiki's publicly available products. Our focus has now moved elsewhere, so there is no new active development, but we are still maintaining it.

https://github.com/scraperwiki/hanoverd/ is an infrastructure component, written in Go, that we actively use at ScraperWiki. When deploying a new version of a webserver that is running in Docker, it switches seamlessly from the old version to the new version, with no downtime gap.

https://github.com/ClimateCodeFoundation/ccc-gistemp is a reimplementation of NASA's GISTEMP analysis of global surface temperature. In 2008 Nick Barnes and I undertook to take NASA's publicly available code for estimating global historical temperature change and reimplement it in clear Python, specifically to benefit public understanding; this work has been done entirely pro bono, and we have been aided at times by other volunteers. This is the result of that effort. There is still occasional maintenance.

PERSON SPECIFICATION

I am an excellent match for the person specification. The numbered paragraphs following match the Person Specification of the Job Advert:

  1. I have an MA in maths and a postgraduate diploma in computer science, both from the University of Cambridge.

  2. I have over 20 years of software development experience. I have a deep and intimate knowledge of C having spent a nearly 10 year continuous period using C to make memory management systems and program video games. Both sectors required highly technical coding, specialised knowledge, and extreme reliability requirements. Measured mean-time-between-failures were in the million hour range. I've been programming in Python for over 10 years, using it for a variety of tasks: Windows GUIs for novel wireless networks, estimates of global historical temperature change (see climatecode.org), public facing web based applications at ScraperWiki.

  3. Provoked by my interest in biology I started coding a Python API for Ensembl which used Ensembl's MySQL endpoint, before Ensembl had a REST API. This gave me some exposure to genomic data, and insight into how frequently Ensembl change their MySQL schema.

  4. Almost of all of my professional work has been software development in a team. Many unpaid commitments are also in teams: Google Summer of Code mentoring, Software Carpentry and PyConUK workshops.

  5. Collaborating with climate scientists and mentoring them in the Google Summer of Code program has given me some insight into statistical methods and analysis, as has dabbling with R. I have a maths degree which did not cover any statistical techniques directly, but certainly gives me the necessary background in analysis, probability, random processes, and approximation methods.

  6. I have excellent computation and programming skills. I'm aware of the space and time constraints of a range of basic data structures and algorithms, and when these are not enough, I'm able to research to find more unusual algorithms or occasionally invent ones of our own. Sadly in general web programming we don't find much opportunity to use Bloom filters or splay trees, but at least I can explain why a fixed string search that uses Boyer–Moore might be a lot faster than a regular expression match that uses an NFA.

  7. I strive for clarity in my writing. Earlier in my career I studied part-time at the Open University (A103, introduction to Arts and Humanities) specifically to improve my written work, which includes e-mails, blog posts (drj11.wordpress.com), conference talks, posters, and papers. I do not shy from writing software documentation.

  8. I have a high standard of expertise in Python, C, Unix, SQL, HTTP, JSON. I can program in these technologies confidently as well as advise and teach others. I have some expertise in Go, Lua, Docker, XML; enough to use them. I have some exposure to Perl, R, Java, and a host of others. I do not consider it a problem to learn a new language, having learnt Go, CoffeeScript, and node.js in the last couple of years. Programming technologies come and go and I am adept at learning new ones.

  9. I have self-educated to a basic level understanding of biology and molecular biology (which is to say I've read a good chunk of Griffiths et al's "Modern Genetic Analysis" and Taiz and Zeiger's "Plant Physiology"). I have a basic understanding of the Modern Synthesis, Crick's Central Dogma, protein synthesis and transport in the cell, genetics, sequencing. I can read a book like Sean B Carroll's excellent "Endless Forms Most Beautiful" without feeling too stupid.

  10. On a daily basis I interact with almost our whole company. We have daily standup meetings. I routinely work with project management when we encounter engineering issues that affect deliverables, and management work with us when customer needs change. Some of this interaction is routine, some is impromptu; we will schedule specific discussion or meetings when the scope exceeds a 5 minute chat.

  11. I regard myself as a problem solver first, and a programmer second: I solve problems by programming my way out them. This requires my general programming skills, a creative attitude to problem solving, and my ability to apply acquired skills to new situations and acquire new skills while in the midst of solving problems.

  12. Engineering is a discipline of compromise. We can build the perfect solution if we have unlimited budget and time. Real world challenges are met with real world solutions, which necessarily have limited budget and time. I enjoy investing the time and effort that it takes to create long term solutions that are robust, and I realise that often this is not a luxury, it is required.

  13. I am responsible for some of the planning of the work I do, and occasionally planning work for others. Planning is done in concert with the other team members, management, and other stakeholders. This varies in scale from a plan for a day's coding, to a two-week iteration, to long term product planning with quarterly milestones, and vision planning that looks forward to the heat-death of the universe (or at least, until the startup gets funding). Moltke's "no plan survives contact with the enemy" is one of my favourite quotes.

  14. I enjoy conferencing, having been to PyConUK (the UK's Python conference) several times, various FLOSS UK conferences, and a variety of local user groups; this helps me to build and maintain a professional network. I have presented at some of these on a range of programming topics (for example: "An Introduction to Functional Programming in Python"; "Embedding Lua in 5 minutes"). I've led workshops and assisted in others on Python, CoffeeScript, shell, and Software Carpentry. I consider the organisations of Software Carpentry (http://software-carpentry.org/), the Software Sustainability Institute (http://software.ac.uk), and the Open Knowledge Foundation (https://okfn.org/) to be both professional and personal friends.

  15. I work at a startup where to some extent the normal routine is to adapt to new things. In order to seek a product–market fit we are constantly trying to do things that we have not done before (and often, things that no one has tried to do before). This is both on a corporate and a personal level. As a specific example, when I joined ScraperWiki no one at the company knew CoffeeScript or Go, myself included, and now we maintain two products that use these technologies in their core.

  16. At ScraperWiki planning code development tends to merge into general planning. We use a variety of tools from a lab notebook, and github issues, through to the very hipster trello.com, sticky notes, and good-old spreadsheets. Previously, while consulting at Ravenbrook I planned and executed the entire development of some contracts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment