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.
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).
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}.
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.
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.
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.).
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.
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.
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
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.
Skills
Technical
Personal
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).