Welcome to the extended version of my resume! Here, you'll find detailed explanations of the information presented in my resume, along with a few additional projects and experiences that didn't make it into the PDF version. Click on the titles to explore further. Feel free to send me an email if you'd like to know more.
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 (in the Juju team). Here, 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 on 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 challenges. Helped API design, and improved the facade-based API server. Helped transition the observer-based data layer from NoSQL MongoDB to relational DQLite (distributed SQLite). 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 as the BSc thesis project. For masters, 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 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.
Specializing on Programming Languages (PL) under the supervision of Sam Tobin-Hochstadt, minoring in Logic at the Department of Philosophy.
I'm working on fast run-times of dynamically typed languages, particularly Racket. When I started, I was initially trying to figure out the effects of using Racket byte-code compiler as a front-end for Pycket, i.e. investigating the individual effects of various optimizations happening in the Racket compiler to the Pycket run-time, such as heavy inlining and/or lambda lifting.
While we were working on that, Racket decided to make the language more portable, and started adopting Chez Scheme as its run-time. So I decided to join the fray and took a different direction.
At that time, we had a rudimentary Racket implementation we were working on, namely Pycket, which is a meta-tracing JIT compiler automatically generated by the RPython framework, designed to demonstrate that efficient sound gradual typing is possible. In the new direction of research, I first helped to make the Racket more portable (see Publications), and helped it to adopt the Chez Scheme fully. And then mimicking Racket's self-hosting on Racket-on-Chez, I turned the Pycket into a full implementation of Racket, thereby having a meta-tracing JIT as a run-time for Racket.
PyPy project has shown that fast prototyping of efficient run-times for dynamic languages is possible through meta-interpretation (tracing not the user program, but the interpreter that runs it). The aim of my research is to take the meta level one step further, and show that with this setup, fast prototyping efficient run-times for self-hosting dynamic languages is also achievable.
Currently, Pycket is able to run just as fast as before on the benchmarks in previous studies. However, self-hosting comes with a big problem for tracing JITs; giant dispatch-loops. This is essentially the same problem that Mozilla has faced quite a while ago with TraceMonkey, which is basically that you lose more when slow than you gain when fast. My work suggests some workarounds for this problem and tries to show that an efficient run-time with a meta-tracing JIT is still achievable for fast prototyping self-hosting dynamic languages.
This was the continuation of my masters on natural language processing and machine learning. After researching for another year on the system I built, I decided to pursue a PhD on programming languages instead.
I was part of the Text Analytics and Bio-Informatics Lab. Studied the theory of computation, automated theorem proving, then focused on machine learning and natural language processing. Worked on closed domain question answering systems for Turkish high-school students. (government funded project)
Got both theoretical and practical experience. Programmed in both imperative, functional, logic languages. Concentrated on the theory of computation, and programming languages, design and implementation.
Working in the Juju core team, which is 15 people globally remote. I'm helping to develop and maintain client packages and libraries of Juju. In particular I work on the juju's own cli, and python-libjuju, a Python library that allows programmatically interacting with Juju, and also the terraform juju provider, which allows using Juju with Terraform. I do a bunch of hiring, code review, as well as documentation work.
Taught Introduction to Computer Science (HtDP Style Functional Programming) with Racket.
Taught Advanced Compilers, Introduction to Programming (in Racket), and the domain specific language design and implementation with Sam Tobin-Hochstadt for 1 semester. I was a research assistant for Sam for 5 semesters and 4 summers.
Worked on developing the back-end of the virtual point-of-sale applications between merchants and banks. Used Java, Spring, Tomcat, Mercurial, Jira.
Developed a Google Glass application (running on a mock glass API) that talks with the CitySDK, and enables the use of open city data provided by Istanbul Municipality for various smart city tasks (such as finding a suitable bus-route).
I created an extra-curricular game for students to "level up" their computer science skills. Each level required learning some concepts and solving some problems in a constrained way. I lead a team of undergraduate students as they try to level up.
Taught 6 semesters; Data Structures & Algorithms (in Java), Principles of Programming Languages (in Racket), Database Systems (with Data Mining).
Taught Lambda Calculus to Math graduate students, and “Programming=Algebra” to high-school students with Chris Stephenson.
Reviewed two papers on statistical information retrieval for SIU2014, and a paper on question answering systems for COLING 2014.
Lead the preparation and compilation of the Book of Abstracts and the Proceedings.
Juju is an orchestration and modeling tool for deployment of complex cloud workloads. It manages the life-cycle of the charmed operators for Kubernetes and traditional Linux apps, with declarative relations between operators for automated microservice integration. It also facilitates day 2 operations, such as scaling, upgrading and monitoring. I work in the core dev team (of 15). I'm involved in maintaining the main clients (e.g., cli, python-libjuju) and the facade API, charmhub integration, worked on data schema for moving from MongoDB to dqlite, and general bug fix and maintenance. Mainly in Go and Python.
Terraform Juju Provider is a terraform provider that enables integration with Juju while managing terraform environments. Started developing as part of my work on the Juju API. Implemented new features, worked on moving from using sdk2 to the new terraform provider framework, maintained release cadence of new versions. All in Go.
A meta-tracing JIT initially designed to reduce the overhead of sound gradual typing, nowadays a run-time for self-hosting full Racket. I am the main developer and maintainer. I re-implemented the front-end to make the Racket bootstrap itself on Pycket, i.e., achieved a full Racket implementation on RPython framework. Developed performance debugging tools, implemented various optimizations and large number of run-time primitives. Maintained and improved the data structure implementations (hash tables, vectors, structs etc.). For details, see my PhD description.
A full-stack nanopass compiler from a small subset of Racket all the way down to x86_64 assembly. Started for fun, collaborated with a friend to turn it into a school project, then it turned into an open source project. Built and tested all the passes (e.g. closure conversion, register allocation, code-gen, etc.).
I collaborated with Jeremy Siek and Matthew Heimerdinger to help prove the correctness of a closure conversion pass of a compiler for a functional language represented as denotational semantics in Isabelle.
[https://github.com/madheime/denotsem-compiler] (might be a private repo)
A closed domain question answering system for high school students. Funded by TUBITAK (The Scientific and Technological Research Council of Turkey). I lead the research and development, 3 faculty members (both from CS and also School of Education) and 4 grad students were involved. This was my MSc thesis work, so I worked on pretty much everything about it (see Publications). I developed a hybrid model for question analyzing (Hidden Markov Model along with a rule-based model), developed a reliability score for web-pages/documents, used the Indri search engine for processing and retrieval for answer generation, implemented both the front and back-end in Python.
Did you know that it's very hard for Deaf people to read? Well I didn't. Apparently reading for Deaf people is a sort of learning a new foreign language. This is a joint work with the Department of Western Languages & Literature to build a web-based application to teach people with hearing disability how to read. Two faculties from Linguistics, one from CS, and two RAs were involved. Project aims to develop a stable framework on which the Turkish grammar lectures and exercises for Deaf people can easily be provided. I collaborated with the linguists to implement the application (available on both PC and mobile) that’s designed specifically for Deaf people. Used JavaScript, HTML and PhoneGap.
Data Collection, Processing and Visualization Framework for real-time social network data, lead by Suzan Üsküdarlı. 4 faculty members and 7 grad students were involved. I developed parts of the processing library with JavaEE, implementing certain tools used for various kinds of analyses, such as centrality analysis, stop-word collection, etc.
[http://direnaj-staging.cmpe.boun.edu.tr/] (might be private because of the Twitter privacy terms)
This is a resolution-refutation style automated theorem prover. I developed it for fun at first, then I turned it into a project for school. Written all in Racket by myself.
This was my undergraduate thesis (see BSc description). It was a project from Brown University under supervision of Shriram Krishnamurthi, a compiler from Racket Advanced Student Language to JS and HTML. I participated in the development of both compiler and run-time libraries. My major contribution was to add the tail-calls. Nowadays it is used on WeScheme by the Bootstrap curriculum.
My PhD is on programming languages, so I feel confident in coding in any language. My main language between 2020 and 2024 has been Go, and Python. I have plenty of experience in functional languages as well (including implementing new ones). Below are some of the languages I have used. s indicate my current (2024) level of confidence in writing programs in the corresponding language.
Technical
Personal