Andrew Cook CV

Andrew Cook
e-mail: andrew@idlecuriosity.org

Personal Profile

A PhD in computer science, Andrew has worked for CritcalBlue since June 1010. He is responsible for the Aarch64 backend of the prism profiling tool and also has worked on research product and optimisation activities. Andrew demonstrates a logical and creative approach to problem solving and software development, with skills in imperative and object-oriented programming languages. He has good communication skills, both written and verbal and is eager to work with new technologies.

Skills

  • Excellent programming and problem solving skills.
  • Knowledge of imperative, object-oriented, functional and logic programming languages - including C, C++, Java, Go, ML, Haskell and Prolog.
  • Understanding of parallel programming issues.
  • Experience building systems with C, Java, C++, Go programming languages.
  • Knowledge of assembly language for Armv7, Aarch64 and x86.
  • Familiar with version control, continuous integration and issue tracking systems such as CVS, SVN, Git, Stash, Jenkins and Jira.
  • Familiar with Linux, Macintosh and PC platforms.
  • Creative and imaginative.
Professional Experience
  • July 2010-Present, CriticalBlue, Software Engineer

    Andrew has worked on a number of projects since joining CriticalBlue. Jointly overhauled the Java system responsible for interpreting data in CriticalBlue’s Prism product. He implemented the low-level instruction decoder for the Armv7 instruction set and the instruction decoder and instrumentation assembly for the Aarch64 instruction set. He has also been involved in research into a Capture/Replay system for prism to allow the capture of programs runtime information at near full speed and then the program replayed exactly with more detailed profiling. He has also been involved in the implementation of optimisation work for x86 architectures inside the Android operating system and a system for binary to binary optimisation. He also worked on several aspects of CriticalBlue’s Approov cloud API security product.
  • August 2009-June 2010, University of Edinburgh & Heriot-Watt, Research Programmer

    Worked on developing a C++ variant of a static program analysis tool. Worked on integrating and extending static analysis of Java developed at Heriot-Watt into the static analysis framework developed at University of Edinburgh, including implementing auto-generation of Java Unit tests.
  • Aug 2005-June 2009, Codeplay Software, Compiler Research Engineer

    At Codeplay, Andrew was primarily responsible for researching new compiler technology. In his first project he built an experimental semi-automatic parallelization system (aimed at multi-core processors) on top of a C++ compiler. That system (named the ‘Sieve’ system) enables parallelism by deferring side-effects until after a parallel block. The work involved significant modifications to the C++ parser, intermediate representation and code generation as well as the implementation of a sieve runtime in C++. He is named as a co-inventor on the Patent application for Sieve. He has worked on prototypes of Sieve for CUDA and PC, Sievethreads(a cut down version of Sieve) for PC and OpenCL, analysis tools for Sieve and other experimental Sieve language extensions. He has represented Codeplay at technology exhibitions in San Jose in USA and Tokyo in Japan and also took on the industrial supervision of a PhD student at Glasgow University.

Other Experience

  • March-December 2004, Heriot-Watt University, Research Associate
    Andrew developed components of the nuSpade system, a proof system for the verification of safety critical systems using Spark-Ada. He also spent 2 months in developing Flash movies as a teaching aid for students learning rippling proof.
  • June-July 2005, Heriot-Watt University, Web Administrator
    Andrew redesigned and reorganised the Heriot-Watt University Web pages relating to the dependable systems group and databases group.
  • Jan-June 2005, Heriot-Watt University, Laboratory Assistant
    Assisted students in computer laboratory coursework assignments for classes on Java and basic IT skills
Education
  • 1997-2002, PhD Computer Science, Heriot-Watt University

    The research was concerned with automatic parallelisation through the synthesis of higher-order function expressions. The synthesis system was part of a larger parallelising compiler project and was implemented as extension to an existing proof planning system. A parser/type-checker was also implemented in C to take ML and output it in a compatible syntax; this was later extended to output various other formats.
  • 1993-1997, BSc Computer Science, University of St.Andrews

    Completed modules on various subjects including Principals of Programming Languages, Automated Reasoning, Artificial Intelligence, Data Encoding, and Databases. The third year project involved designing and implementing a graphical flowchart editor in, C and TCL, as a member of a team. Fourth year project involved designing and implementing a client-server system, in Java, for managing meetings.
  • 1991-1993, A-level (A,A,B), Dalriada School

E-mail: andrew@idlecuriosity.org