Avatar

Caner Derici, PhD




Welcome to the extended version of my resume! Here you’ll find detailed explanations of the information presented in the PDF version, along with a few additional projects and experiences that didn’t make it into the PDF. Click on the titles to explore further. Feel free to send me an email if you’d like to know more.

View Resume PDF

TL;DR

I have expertise in distributed systems, compilers and programming languages.

My tech stack includes: Go, Python, Racket, C/C++, SQL/NoSQL, LXD, Docker, k8s and more.

I worked at Canonical for over three years on the Enterprise Cloud Engineering team (Juju). There I gained extensive experience in complex distributed systems. I owned deliverables, maintained release cadence, participated in roadmap planning, coordinated cross‑team work, mentored junior engineers and took part in hiring.

I gained experience in distributed orchestration for managing complex cloud workloads for Kubernetes and traditional Linux apps across various cloud providers (e.g. AWS, GCE). My primary focus in Juju was on the eventually consistent, worker‑based distributed back end. I architected full‑stack distributed components, tackled orchestration, fault tolerance, back‑pressure handling and more. I helped API design, improved the facade‑based API server and helped transition the observer‑based data layer from MongoDB to relational DQLite. I maintained client libraries (e.g. python‑libjuju). See my GitHub.

I'm also currently a post‑proposal PhD candidate (all‑but‑dissertation) at Indiana University, specializing in Programming Languages. I also hold a BSc and MSc in Computer Science, with a specialization in Natural Language Processing and Machine Learning.

A lot of hands‑on projects in the academic work all started with adding tail calls to a Racket‑to‑JavaScript compiler for my BSc thesis. For my master’s I developed a question‑answering system for high‑school students. My PhD work focuses on optimizing VM run‑times for dynamic languages. Specifically, I’m demonstrating that rapid prototyping of an efficient run‑time for a self‑hosting dynamically typed language (e.g. Racket) on a meta‑tracing JIT compiler is achievable.

You can see the details for all of them down below.


[click on a title to see details]

Education

PhD Computer Science – Indiana University, IN, USA 2015 – 2021

Specializing in Programming Languages (PL) under the supervision of Sam Tobin‑Hochstadt, minoring in Logic at the Department of Philosophy.

I work on fast run‑times of dynamically typed languages, particularly Racket. Initially, I investigated the effects of using the Racket byte‑code compiler as a front end for Pycket—studying optimizations like heavy inlining and lambda lifting and their effects on the Pycket run‑time.

When Racket decided to become more portable and started adopting Chez Scheme as its run time, I pivoted to help that effort. We had a rudimentary Racket implementation, Pycket, a meta‑tracing JIT compiler automatically generated by the RPython framework. It was designed to demonstrate that efficient sound gradual typing is possible. I helped make Racket more portable and adopt Chez Scheme fully:contentReference[oaicite:0]{index=0}. Mimicking Racket’s self‑hosting on Racket‑on‑Chez, I turned Pycket into a full implementation of Racket with a meta‑tracing JIT as its run‑time:contentReference[oaicite:1]{index=1}.

PyPy showed that fast prototyping of efficient run‑times for dynamic languages is possible through meta‑interpretation. My work takes this a step further to show that fast prototyping of efficient run‑times for self‑hosting dynamic languages is achievable:contentReference[oaicite:2]{index=2}.

Currently Pycket runs as fast as before on prior benchmarks, but self‑hosting introduces giant dispatch loops—similar to issues Mozilla encountered with TraceMonkey. You often lose more when slow than you gain when fast. My work suggests workarounds and shows that an efficient run‑time with a meta‑tracing JIT is still possible for fast prototyping of self‑hosting dynamic languages:contentReference[oaicite:3]{index=3}.

PhD Computer Science – Boğaziçi University, Istanbul, TR 2014 – 2015

This program was a continuation of my MSc in natural language processing and machine learning:contentReference[oaicite:4]{index=4}. After another year of research on the system I built, I decided to pursue a PhD in programming languages instead.

MSc Computer Engineering – Boğaziçi University, Istanbul, TR 2011 – 2014

I was part of the Text Analytics and Bio‑Informatics Lab. I studied the theory of computation and automated theorem proving, then focused on machine learning and natural language processing:contentReference[oaicite:5]{index=5}. I worked on a closed‑domain question‑answering system for Turkish high‑school students (a government‑funded project).


Thesis title
Question Analysis and Information Retrieval for a Turkish Question Answering System: HazırCevap (PDF)

Supervisors
Tunga Güngör, Assoc. Arzucan Özgür, Günizi Kartal

Abstract
This study describes and evaluates the techniques developed for the question analysis and information retrieval (IR) module of a closed‑domain Turkish factoid question‑answering system intended to support high‑school students. It proposes novel methods for two major problems—focus extraction and question classification—by integrating a rule‑based approach with an HMM‑based sequence classifier that leverages dependency relations among words. The IR module searches for relevant documents and passages using both Indri and Apache Lucene:contentReference[oaicite:6]{index=6}.
BSc Computer Science – Istanbul Bilgi University, Istanbul, TR 2005 – 2010

I gained both theoretical and practical experience. I programmed in imperative, functional and logic languages, focusing on the theory of computation and programming languages design and implementation:contentReference[oaicite:7]{index=7}.


Thesis title
Proper Tail Calls From First‑Class Continuations in JavaScript ( PDF | tex)

Supervisors
Chris Stephenson, Shriram Krishnamurthi, Alpaslan Parlakçı, Matthew Edwards

Abstract
This thesis demonstrates that proper tail‑call behaviour in JavaScript is possible without modifying the interpreter. It is based on the paper “Continuations from Generalized Stack Inspection” (Pettyjohn et al.), which presents a program transformation for obtaining first‑class continuations from exception‑handling mechanisms. My work extends their technique to achieve tail‑call optimized computation without touching the interpreter.

[click on a title to see details]

Experience

Software Engineer II, Canonical Ltd. 2021 – 2024

I work in the Juju core team of about 15 people globally distributed. I help develop and maintain Juju’s client packages and libraries, including the CLI and python‑libjuju, and the Terraform Juju Provider. I’m involved in hiring, code reviews and documentation work.

Course Instructor, Indiana University, IN, USA Spring 2021

Taught Introduction to Computer Science (HtDP‑style functional programming) using Racket.

Teaching & Research Assistant, Indiana University, IN, USA 2015 – 2020

I taught Advanced Compilers, Introduction to Programming (in Racket), and domain‑specific language design and implementation with Sam Tobin‑Hochstadt for one semester. I was his research assistant for five semesters and four summers.

Product Development Specialist, Asseco South‑Eastern Europe, Istanbul, TR 2012 – 2013

Worked on developing the back end of virtual point‑of‑sale applications between merchants and banks. Technologies: Java, Spring, Tomcat, Mercurial, Jira.

Hackathonist’14, Istanbul, TR 2013

Developed a Google Glass application (on a mock API) that uses CitySDK data to provide smart‑city tasks such as finding a suitable bus route.

Computer Science RPG, Istanbul, TR 2013

I created an extra‑curricular game for students to “level up” their computer science skills. Each level required learning concepts and solving problems under constraints. I led a team of undergraduates as they leveled up.

Teaching Assistant, Istanbul Bilgi University, TR 2010 – 2013

Taught six semesters: Data Structures & Algorithms (Java), Principles of Programming Languages (Racket) and Database Systems with Data Mining.

Instructor, Nesin Math Village, Şirince/Selçuk, TR 2011

Taught Lambda Calculus to math graduate students and “Programming = Algebra” to high‑school students with Chris Stephenson.

Conference Reviewer, TR 2014

Reviewed two papers on statistical information retrieval for SIU 2014 and a paper on question‑answering systems for COLING 2014.

VII International Conf. on Webometrics, Infometrics & Scientometrics (WIS), Istanbul, TR 2011

Led the preparation and compilation of the book of abstracts and proceedings for the conference.


[click on a title to see details]

Projects

Juju 2021 – 2024

Juju is an orchestration and modeling tool for deploying complex cloud workloads. It manages charmed operators for Kubernetes and traditional Linux apps with declarative relations for automated microservice integration. It also facilitates day‑2 operations such as scaling, upgrading and monitoring. As part of the core team, I help maintain the clients (CLI and python‑libjuju) and the facade API, integrate charmhub, design data schemas for migrating from MongoDB to dqlite, and handle general bug fixes and maintenance. I mostly use Go and Python.

Terraform Juju Provider 2022 – 2024

The Terraform Juju Provider enables integration with Juju while managing Terraform environments. I started developing it as part of my work on the Juju API. I implemented new features, migrated from SDK 2 to the new Terraform provider framework, and maintained the release cadence for new versions. All in Go.

Pycket 2016 – 2021

A meta‑tracing JIT originally designed to reduce the overhead of sound gradual typing, now a run‑time for self‑hosting full Racket. I am the main developer and maintainer. I re‑implemented the front end to make Racket bootstrap itself on Pycket, achieving a full Racket implementation on the RPython framework. I developed performance‑debugging tools, implemented various optimizations and many run‑time primitives, and maintained data‑structure implementations (hash tables, vectors, structs, etc.). For details, see the PhD description.

[Pycket repo]

Rax 2016

A full‑stack nanopass compiler from a small subset of Racket down to x86‑64 assembly. It started for fun, then became a school project and later an open‑source project. I built and tested all the passes (closure conversion, register allocation, code generation, etc.).

[Rax repo]

Correctness Proof of a Closure Conversion Pass 2018

I collaborated with Jeremy Siek and Matthew Heimerdinger on proving the correctness of a closure‑conversion pass of a compiler for a functional language represented via denotational semantics in Isabelle.

[denotsem-compiler repo] (may be private)

HazırCevap 2013 – 2015

A closed‑domain question‑answering system for high‑school students funded by TÜBİTAK. I led research and development with three faculty members (CS and School of Education) and four graduate students. It was my MSc thesis work, so I handled nearly every aspect (see Publications). I developed a hybrid model combining Hidden Markov Models and rule‑based methods for question analysis, a reliability score for web documents, and an IR module using the Indri search engine for answer generation. I implemented both the front and back ends in Python.

Sessizliğe Oku (Read to Silence) 2014

Reading is a kind of foreign language for Deaf people. I collaborated with the Department of Western Languages & Literature to build a web‑based application to teach people with hearing disabilities how to read. Two linguists, one CS faculty and two research assistants were involved. I helped implement the application (for PC and mobile) designed specifically for Deaf users, using JavaScript, HTML and PhoneGap.

Direnaj: Social Network Data Processing Framework 2013 – 2014

A data‑collection, processing and visualization framework for real‑time social‑network data led by Suzan Üsküdarlı. With four faculty members and seven grad students, I developed parts of the processing library in JavaEE, implementing tools for analyses such as centrality and stop‑word collection.

[Direnaj staging site] (may be private due to Twitter privacy policies)

FARS: Functional Automated Reasoning System 2012

A resolution‑refutation automated theorem prover I wrote for fun and later turned into a project. Written entirely in Racket.

[FARS repo]

Tail‑Call Elimination on Racket‑to‑JS Compiler 2009 – 2010

My undergraduate thesis (see BSc description) was part of a project at Brown University supervised by Shriram Krishnamurthi, implementing a compiler from Racket’s Advanced Student Language to JavaScript and HTML. I worked on the compiler and run‑time libraries; my major contribution was adding tail calls. The work is now used in WeScheme for the Bootstrap curriculum.

[moby-scheme repo]


Publications

  • Rebuilding Racket on Chez Scheme (Experience Report) — [PDF] / Supplementary material
    Matthew Flatt, Caner Derici, R. Kent Dybvig, Andy Keep, Gustavo E. Massaccesi, Sarah Spall, Sam Tobin‑Hochstadt, Jon Zeppieri. ICFP 2019.
  • A closed‑domain question answering framework using reliable resources to assist students — [PDF]
    Caner Derici, Yiğit Aydın, Çiğdem Yenialaca, Nihal Yağmur Aydın, Günizi Kartal, Arzucan Özgür, Tunga Güngör. Natural Language Engineering 24(5): 725–762 (2018).
  • Question analysis for a closed‑domain question answering system: Hazırcevap — [PDF]
    Caner Derici, Kerem Çelik, Ekrem Kutbay, Yiğit Aydın, Arzucan Özgür, Günizi Kartal, Tunga Güngör. CICLING 2015, Springer LNCS, November 2014.
  • Rule‑based focus extraction in Turkish question answering systems — [PDF]
    Caner Derici, Kerem Çelik, Ekrem Kutbay, Yiğit Aydın, Arzucan Özgür, Günizi Kartal, Tunga Güngör. SIU 2014, Trabzon, April 2014.
  • Worldwithweb: A compiler from world applications to JavaScript — [PDF]
    Emre Başar, Caner Derici, Çağdaş Şenol. Scheme and Functional Programming 2009, Boston, August 2009.

Natural Languages

Turkish
Native
English
Lived in the USA since 2015. My wife is a native English speaker.

Programming Languages

My PhD is on programming languages, so I feel confident coding in any language. My primary languages (2020‑2024) are Go and Python. I have plenty of experience in functional languages, including implementing new ones. Below is my experience with some languages; indicates my current (2024) confidence level.

Go
My day‑to‑day at Canonical involves working on Juju and the Terraform Juju Provider, both written in Go. Experienced in fault‑tolerance practices, interface design, channels and goroutines, back pressure and more.
Python
At Canonical I develop and maintain python‑libjuju. My PhD work (Pycket) is entirely in RPython (a restricted Python). My MSc work in IR and NLP was also in Python (see HazırCevap project).
Racket / Scheme / Lisp
Programming and teaching in Racket since 2005; used for everyday coding and projects (see sections above).
C/C++
Implemented a file system for Minix on a BeagleBoard. Wrote a garbage collector for the Rax compiler (see Projects). Built some games with OpenGL and studied graphics programming.
Java
Worked a year at a software company that used Java to develop virtual POS systems for banks. Correct and clean code and security were priorities. Also developed toy Android apps for fun.
JavaScript
Implemented tail calls and wrote run‑time support primitives for the Racket‑to‑JavaScript compiler used in WeScheme for the Bootstrap curriculum.
Misc.
At various times I’ve written SQL for DBs; Matlab and R for statistical analysis; CSS, YAML, JSON and XML for configs; and more.

Skills

Clear code & testing
Keeping up with new tech
Time & resource management
Team-work & communication
Attention span & focus
Self-motivation
Coding speed
Testing against careless mistakes

Technical

Linux
Using Linux daily since 2005; entire workflow is on Linux.
LaTeX
Authoring papers and dissertations with LaTeX since 2005.
Emacs
Daily driver for ~6 years; not yet a power user.
GoLand / VS Code
Main IDEs for Go and general editing.

Personal

Electric guitar & music
Former semi-pro musician; now record guitar covers for fun.
Fantasy role-playing
~10 years as player and DM (mostly D&D 3.5e / AD&D).
Tango
Took six months of lessons; still a beginner.
StarCraft II (Zerg)
Masters 3 on NA. See battle-net profile.

Scholarships

  • Research scholarship for M.Sc. (3 years), fully funded by TÜBİTAK.
  • Project scholarship for research on teaching Turkish to the hearing-impaired (2014), funded by the Koç Foundation.
  • Full undergraduate scholarship (2005 – 2010) from Turkey’s Student Selection and Placement Center (ÖSYM).