Curriculum Vitae of Ryan Francis Kelly

I am a freelance software developer and consultant living in Melbourne, Australia. The best way to contact me is by email:

Professionally, I have worked as a programmer and system administrator for the better part of the last decade. I am particularly experienced with the Python programming language, which I have used to develop both web-based and desktop applications. I also enjoy logic programming using languages such as Prolog and Mozart.

Academically, I have completed a PhD in Computer Science with the Intelligent Agents Laboratory at the University of Melbourne; you can read all about my thesis here. My undergraduate studies were a double bachelor's degree in Engineering and Computer Science.

Personally, I enjoy public speaking, theatre and performance arts of any persuasion. I am a keen hiker and camper, even though it means being disconnected from the Internet for days at a time.

You can find more details in the sections below:

Employment History

Freelance Developer and Consultant November 2008 to Present

I am currently self-employed as a freelance developer and software consultant. My projects have involved developing Python-based desktop and online applications, and code maintenance and translation services for Prolog.

Programmer, The Victorian Partnership for Advanced Computing March 2004 to November 2008

After completing my Summer Internship with the Victorian Partnership for Advanced Computing, I undertook ongoing programming work on a casual basis. My roles have ranged from developer to software architect to project leader, handling the design and development of software for engineering applications. Most recently, I was the lead architect and developer for a web-based project management portal used to coordinate research and development activities among several large organisations.

Casual Tutor, The University of Melbourne July 2005 to June 2006

While studying for my PhD, I undertook two semesters of casual teaching work in the Department of Computer Science and Software Engineering at the University of Melbourne. I tutored the subject "Algorithms and Data Structures", a second-year subject focusing on the development and formal analysis of common algorithms and data structures. I was also a lab demonstrator for the subject "Logic and Computation", a second-year subject focusing on the theoretical aspects of logic and computability. Duties included preparing and running both tutorial sessions and practical programming sessions, along with assessment of assignments and marking of exams.

As a result of significant positive feedback from both students and faculty, in 2006 I was awarded an "Excellence in Tutoring" award from the department.

Computational Engineer, The Victorian Partnership for Advanced Computing December 2003 to February 2004

In late 2003 I was selected to undertake a Summer Internship with the Victorian Partnership for Advanced Computing. This was a paid position which involved developing a piece of engineering software for use in the organisation's computational engineering projects. The project involved heavy use of the Python programming language, which as since become my favourite language for general development work.

IT Manager, Whitley College January 2003 to December 2004

This position was a formalisation of many aspects of the volunteer role I had played at Whitley College in previous years. Whitley College is a Residential College of the University of Melbourne as well as a teaching organisation of the Melbourne College of Divinity. Aspects of my role as IT Manager included:

  • Coordinating meetings of the IT Committee, the group charged with the practical aspects of running the College's IT infrastructure.
  • Attending meetings of the Computer Committee, the group charged with overseeing the College's IT infrastructure by the Board of Directors.
  • Acting as Project Manager and Lead Programmer for the College's website development project.
  • Providing technical support for the College's residential and academic staff.
  • Providing strategic planning advice to the College leadership
  • Evaluating, testing and implementing new technologies for enhancing IT service.

System Administrator, Whitley College July 2000 to December 2003

This is a voluntary role that students at Whitley College may take on in order to help maintain and develop the College's information technology facilities. The IT infrastructure of the entire College is run by such volunteers – including both the technical aspects of administering servers, email, web-services and so-on, and the personal aspects such as technical support and liaising with College administration.

Vacation Work, Agilent Technologies January 2001 to February 2001

As part of my undergraduate scholarship with the University of Melbourne's Faculty of Engineering, I obtained vacation employment with Agilent Technologies in Melbourne. The division to which I was assigned was responsible for updating a major portion of the company website, and my tasks included web-page development and maintenance, content solicitation from other employees, and testing and debugging of the site.

Education

I have a PhD in Computer Science from the University of Melbourne, Department of Computer Science and Software Engineering. My thesis, entitled "Asynchronous Multi-Agent Reasoning in the Situation Calculus", was submitted in October 2008.

Prior to this, I obtained a Bachelor of Engineering (Mechatronics) and a Bachelor of Computer Science from the University of Melbourne, graduating with first-class honours. The subjects undertaken and a summary of my results are available here: summary of results.

Programming Languages

I enjoy programming languages of any shape or form, and have a passing familiarity with many including Java, C++, Haskell, Perl and Lisp. I have listed below only those in which I consider myself fluent.

Python

Python is currently my language of choice for general-purpose development, as evidenced by its prevalence among my current software projects. Like many Pythonistas, I appreciate the language's simplicity and its elegant conceptual model. I've come to depend on Python's comprehensive standard library and the great variety of software available on the Python Package Index to get things done quickly and easily.

However, there are a few things I miss from other languages – anonymous function definitions, logic variables, and futures being the main offenders. I have a secret plan to copy Mozart's first-class computation spaces into Python, if I ever find enough contiguous free time to do so.

JavaScript

JavaScript was the first programming language I ever learned and I have been using it sporadically for over ten years. Aside from the obvious list of warts and browser incompatibilities, I find JavaScript to be very powerful and highly productive language, and I'm looking forward to its increasing adoption as a general-purpose tool.

PHP

I have used PHP for professional web development for over 5 years. Like many developers who also work in other dynamic languages, I have an uneasy but stable truce with PHP – while I bemoan its gratuitous lack of elegance and its hollow mockery of a meta-programming system, I have a deep respect for its ability to get things done fast on the web, and am more than happy to adopt it when it's the right tool for the job.

Prolog

I have used Prolog throughout my academic career, as it is the language of choice for research in symbolic artificial intelligence. I also taught Prolog to undergraduate students for two semesters, an experience I thoroughly enjoyed. My sentiments on Prolog echo those of ESR on Lisp: learning Prolog will make you a better programmer, even if you don't use it for your day-to-day programming. And let's face it, most people probably shouldn't use Prolog for their day-to-day programming – but for problems that fit within Prolog's domain of expertise, it's hard to beat.

Mozart

Mozart is a multi-paradigm programming language with some incredibly powerful features. In my thesis I used its strong support for distributed logic programming to implement a planning system that automatically distributes its workload across a team of agents. More than any other language, Mozart has introduced me to features that I now wish I could use everywhere - examples include dataflow synchronisation, futures, lightweight micro-threads, and first-class computation spaces.

C

While I rarely choose to develop in C, my involvement with open-source projects ensures I have sufficiently regular exposure to the language to maintain a comfortable familiarity. I also taught an algorithms and data structures class using C as the implementation language, so I have significant experience at reading a wide variety of C code – from the very good to the very hard to decipher.

Publications

  • Ryan F. Kelly and Adrian R. Pearce. Property Persistence in the Situation Calculus. Artificial Intelligence 174, pp. 865-888, 2010.
  • Ryan F. Kelly and Adrian R. Pearce. Complex Epistemic Modalities in the Situation Calculus, in Proceedings of the 11th International Conference on Principles of Knowledge Representation and Reasoning, 2008.
  • Ryan F. Kelly and Adrian R. Pearce. Knowledge and Observations in the Situation Calculus, in Proceedings of the 2007 International Conference on Autonomous Agents and Multi-Agent Systems, 2007.
  • Ryan F. Kelly and Adrian R. Pearce. Property Persistence in the Situation Calculus, in Proceedings of the 20th International Joint Conference on Artificial Intelligence, 2007.
  • Ryan F. Kelly and Adrian R. Pearce. Towards High-Level Programming for Distributed Problem Solving, in Proceedings of the 2006 IEEE/WIC/ACM International Conference on Intelligent Agent Technology, 2006.

Awards and Scholarships

  • Excellence in Tutoring Award, University of Melbourne (2006)
  • Australian Postgraduate Award, University of Melbourne (2004)
  • Faculty of Engineering Dean's Honour List, University of Melbourne (2004,2002,2001,2000)
  • W.S. Robinson Prize for Professional Practise, University of Melbourne (2004)
  • David Silver Prize, Faculty of Engineering, University of Melbourne (2000)
  • Partnership Scholarship, Faculty of Engineering, University of Melbourne (2000)
  • TJ Ryan Memorial Medal and Scholarship, Queensland Government (2000)

Positions of Responsibility

  • Registration Manager, PyCon Australia Conference (2010)
  • President, the Computer Science and Software Engineering Postgraduate Group, University of Melbourne (2006)
  • President, the University of Melbourne Inter-Collegiate Council (2003)
  • Residential Adviser, Whitley College (2003)
  • President, the Whitley College Student's Club (2002)
  • Secretary, the Whitley College Student's Club (2001)
  • President, the Whitley and Ridley Theatre Society (2001)

Personal Interests

Outside of computer science, my interests include the following:

Public Speaking: I have completed 2 years of training in Effective Communication, and area encompassing public speaking and general communications skills. I achieved a pass with distinction (91%) in Grade Four of the Trinity College London Effective Communication Examination, an internationally-recognised award. I enjoy debating and during my residence was a long-standing member of the Whitley College debating team.

Theatre: I have had major roles in a number of amateur theatrical/musical productions include Into the Woods, Cosi, The Baker's Wide and Bugsy Malone. I also enjoy impromptu theatre and I am a keen participant in theatrical challenges such as Theatre Sports.

Hiking and Camping: I have a growing interest in hiking, camping, and related outdoor activities, and have been exploring local Victorian attractions such as the Grampians, Croajingolong National Park, and most recently a five-day hike through Wilson's Promontory. Free-time-pending, I hope to expand my horizons in the near future by hiking Tasmania's Overland Trail.