Coding agents are, well, surprisingly good . Maybe I'm telling on myself by this, but I sometimes learn by inspecting the way the agent leverages an API, or the way it solves a problem that I couldn't wrap my head around in the first place. As agents are able to do more things, do them reliably and tirelessly, the position of a software engineer is ever-increasingly questioned, what is…
Two days ago, I've defended my 5 year, 5 chapter Ph.D. thesis. Today, I write about what's next, a spiritual 6th chapter! My dissertation, titled "Designing Effective Property-Based Testing Frameworks", comprises of the results of four research papers and projects I've worked on during my Ph.D. Two of these papers are about PBT libraries I have worked on, and two are about PBT…
Representation is an overloaded term in computer science. Colloquially, the term representation represents a concrete object that is the reflection of an abstract object. The representation carries over the properties of the abstract object into a new domain that is presumably more convenient for a purpose the representer has in mind. We use arrays to represent collections of items, we use…
I wanted to write this as a sequel to "What is a property?" where I would talk about how Property-Based Testing libraries generate random structures, don't worry, I'll still do that! But I realized that without talking about randomness in computers, the writing would be incomplete. So the first part of this article will go into a core problem that we consider "solved" in PBT, which is…
Will Wilson of Antithesis is a terrific public speaker, his latest keynote "We won, what now?" at the flagship Antithesis conference, BugBash 2026, was another great hit. There are some other nice accounts of the conference and Will's keynote from Alex Weisberg and Murat Demirbaş , so I won't go into a detailed description of all the talk, but rather take the key idea and mash it…
Just yesterday, Bryan Cantrill published a short piece that touches something that I think most of us fundamentally understand, but don't have the words. The article is very short, titled "The peril of laziness lost" . I recommend you all read it. I plucked out one sentence for you: The problem is that LLMs inherently lack the virtue of laziness. The essence is, our laziness is the reason we…
When talking about Property-Based Testing, we typically talk in very abstract terms. There are properties, which define the correctness; there are generators, which define the domain; the PBT framework gives us APIs for writing property-based tests that combine the properties with the generators to find bugs. It's all very nice and simple. A (surprisingly) large chunk of my time goes into…
This is a mirror entry of an article I co-authored published in Datadog AI Blog . AI agents can now produce software faster than any team can verify it. The bottleneck has moved from writing code to trusting what was written. We have seen this pattern before. Early programmers resisted compilers because they could write better assembly by hand. Often they were right. Compilers earned trust because…
This is a mirror entry for my article published in The Consensus . Welcome to a snapshot of my multi-year long journey of inferring types from jq programs in order to produce better, understandable errors messages. Programmers are peculiar people, they, actually we, develop odd affections to otherwise impersonal concepts, such as programming languages, such as types. I am guilty of this affection,…
Almost a year ago, I wrote my first ever blog post on AI-assisted programming, Verifiability is the Limit . The core idea was a push against the school of thought that AI-assisted programming would scale to an infinite productivity level, because someone had to verify that the outputs conform to the given specification, the prompt . I predicted that this had, and would, give rise to uneven levels…
2026 started with a boom of AI-assisted autonomous translations, on 14th of January, Cursor published their post on Scaling long-running autonomous coding in which they created translations of a browser, Java LSP, Windows emulator and Excel. This was followed by an Anthropic post on Building a C compiler with a team of parallel Claudes , which has only further fanned the flames of the hype. Both…
I’ve been going round and round in my mind about a particular discussion around LLMs: are they really similar to compilers? Are we headed toward a world where people don’t look at the underlying code for their programs? People have been making versions of this argument since Andrej Karpathy’s “English is the hottest new programming language.” Computer science has been advancing language design by…
AI is making formal verification go mainstream. AI-assisted mechnical proving companies are raising funds on billion dollar valuations , new people are trying proof assistants, overwhelmingly Lean, at unprecedented rates. Models achieve fascinating results in competitions previously considered to contain some of the hardest problems in the world, such as IMO, ICPC, Putnam; as well as open problems…
Hatalar, günümüzde programlamanın ve yazılım mühendisliğinin ayrılmaz bir parçası. Yazdığımız programlarda hatalar olacağını, bu hataların kaçınılmaz olduğunu, bu kaçınılmazlığın değiştirilemez olduğunu kabul ediyoruz, programlama etrafındaki kültürü bu şekilde geliştirdik. Linux Kernel'ından kullandığımız tarayıcılara, tarayıcılarda ziyaret ettiğimiz web sitelerine, bu sitelerin mobil…
Random testing, in isolation, is a stupid idea. You take a program, which has a practically infinite amount of possible inputs, you randomly pick one of those infinite possibilities in the hopes of breaking the program, or some assertion about the program, and it actually works (discovers bug) in even the most naive form possible, which is essentially the following loop: while True : input =…
This post is a sequel to my thoughts on "What are the limits of LLMs" ( Verifiability is the Limit ) and "What are the domains I believe LLMs will shine at autonomously" ( Breaking Verifiable Abstractions ). As I see verifiability as part of the mainstream discussions more and more, I decided to break down on the limits of verifiability, focusing on how verification as a general principle…
I had the second system design interview of my career last week, the first one was 7 years ago, I was a junior at college, the question was boring, and I fumbled it quite bad. That just made me scared of system design interviews, so I was pretty nervous, little did I know, it was actually very fun, so I wanted to write about it. The question, roughly put, is as follows: You walk into a restaurant,…
Package managers, however prevalent, feel as if they are still infants in terms of security, considering the various supply chain attacks we have seen in the previous few years. The few solutions I see as a response are (1) securing the producers of the packages via account security practices such as multi-factor authentication, (2) advocating against using external packages for convenience by…
This is a mirror entry of an article I co-authored published in Datadog Engineering Blog . At Datadog, cost-aware engineering is more than a principle; it’s a performance challenge at scale. We’ve published how we saved $17 million by rethinking our infrastructure, and we’ve built Cloud Cost Management to help customers do the same. But scaling deep, expert-level code optimization across a…
Programlama dilleri, programcı ile bilgisayar arasındaki en temel iletişim kanalı. Yazdığımız programlar derleyiciler (compilers) ve yorumlayıcılar (interpreters) ile bilgisayarların onları çalıştırabileceği formlara dönüşüyor, sonrasında ise kullanıcılar yazdığımız programları kullanabilir hale geliyor. Her ne kadar günümüzün büyük bir kısmını bilgisayara istediklerimizi yaptırabilmek için…
Abstractions are one of the central ideas of computer science as well building and engineering complex systems in general. In essence, an abstraction is an interface over a system or process, somehow enhancing the mechanisms in which we interact with the underlying system. A famous example of abstraction is a programming language, which abstracts details of how the underlying machine executes the…
Contemporary vocabulary for talking about software testing has bothered me for a long time. The concept of a unit in unit test is not really defined, integration tests are integrating arbitrarily scoped modules, the concept of an E2E test makes sense, but it very much underspecifies the actually tested behavior as well as methods for testing it, are you using automated agents, human supervision,…
Yazılım endüstrisi inanılmaz büyük, dağınık, neredeyse her endüstrinin içerisine kendisini anahtar bir oyuncu olarak yerleştirmiş bir endüstri. 2011 yılında A16Z'nin kurucularından Marc Andreessen "Why Software Is Eating The World" (Yazılım Dünyayı Neden Ele Geçiriyor) yazısında sırtını yazılıma dayayan Amazon, Netflix, Spotify gibi devlerin nasıl ortaya çıktığını ve büyüdüğünü benim…
The world is full of gaps, missing opportunities, unfinished projects, and unfulfilled potential. We walk around every day complaining about the problems we see in the world. We don't like the height of a shelf, the color of a wall, the shape of a doorknob, the line at the DMV, the length of the traffic light, the taste of our morning coffee, the feed our our social media, on, and on, and on.…
Software performance is a contentious topic among programmers. On one hand, you'll see Jonathan Blow arguing programmers should spend their valuable time bikeshedding small details to cut down a few CPU instructions, and on the other you'll see people running an electron app that runs on a hypervisor that runs on a VM, claiming everything's just fine. Ultimately, a large portion of…
LLMs have created an enormous turmoil within the software engineering community within the past 5 years, much of it revolving around one central question, what is the future of our profession? A set of competing paradigms with various degrees of human intervention and control has emerged, on the one side agents with little to no humans in the loop, recently popularized “vibe coding” that…
Tip sistemleri(type systems), programlama aktivitesinin temelinde yer almalarına rağmen gözümüzün önünden kaçan, programlama dillerinin özellikleri arasında çoğu zaman düşünmediğimiz, en az konuştuklarımızdan birisi. Bu yazıyı tip sistemlerinin günlük programlama pratiklerimizi nasıl yönlendirdiğini merkeze alarak yazmaya çalışacağım. Tip Sistemi Nedir? Her programlama dili, bazen dikkatli bir…
Software engineering has many ancient debates. OOP vs FP, dynamic types vs static types, printf debugging vs visual debuggers... I personally always found the last one very intriguing, because it feels like we shouldn't have to choose at all. Why isn't there a best-of-both-worlds solution that allows us to get the level of convenience and integration printf does, with the level of…
Yazılımda Tecrübenin Anlamsızlığı Bu yazıyı en başta “Yıllar Geçer, İlanlar Kalır” ismiyle çok daha detaylı ve resmi bir dil ile yazmaya başlamıştım, bugünkü modum ona hiç uygun olmadığı için daha keskin bir dille sıfırdan yazmaya karar verdim. Öncelikle başlıktaki clickbait’i çözerek giriş yapayım. Anlamsız olan yazılım üzerine kazanılan tecrübe değil, bir yazılımcıyı işe alırken X üzerine Y yıl…
This article is originally published at Paged Out! #4 This article is a brief advocacy for the use of puzzles as algorithmic problems for learning purposes as an alternative to the current style of Competitive Programming(CP) or Mathematics problems. The current trend in “how to learn algorithms” is mostly based on big tech companies and their interview process. This process is interleaved with…
Earlier today, I saw a cute little puzzle on Reddit . The puzzle is pretty simple, we have a 3x3 grid where each square is either pink or turquoise. We are also given a target grid with a different configuration of colors. Finally, we can use 3 horizontal brushes(A, B, and C) that is pink, or 3 vertical brushes(D, E, and F) that is turquoise. The goal is to find the minimum number of brush strokes…
Introducing Devy, written using Devy! This blog post introduces Devy , the interactive blog engine I’ve been working on. Devy is a static site generator that allows you to write interactive blog posts using a combination of markdown and a custom DSL. This post is written using Devy, so you can see how it works in action! I like to write a lot of small code snippets in my code, and I want my…
Designing A Cryptic Language Puzzle Last week, I published a Cryptic Language called Kelesce on my website, with a given text as the puzzle, and some set of clues I added to the website over the course of the week. Below is a small piece of the puzzle and a link to the website. … If you are interested in solving the puzzle, DO NOT READ the rest of this article, as it spoils the design and the…
Solving Algorithmic Problems in The Wild For most software engineers, algorithmic problems are this bizarre type of problems that they only have to know in order to succeed in their interviews and get a job. Perhaps most readers will concede that they are sometimes useful, but I would imagine only a handful few studied solving algorithms outside of LeetCode or their college classes. The premise of…
Afet Anında Doğru Bilgiye Ulaşım Bu yazının yayınlandığı tarih itibariyle 6 Şubat depreminin üzerinden 358 gün geçti. Bu yazıda, yaşadığımız depremi, kaybettiklerimizi, yaşananları anmak, afet anında doğru bilgiye ulaşımın zorluğu, ihtiyacı, nasıl başarılabileceği ile ilgili kendi tecrübelerimi aktarmak istedim. Doğru Bilgiye Ulaşım Yanlış ve yalan bilgilerin hızla büyük kitlelere yayılımı…
The Lies About Abstraction Below is an excerpt from Street Coder , where Sedat Kapanoglu talks about benefits of layering in software. A business layer doesn’t know anything about databases or storage techniques. It calls on the database layer for that. The database layer encapsulates the database functionality in a DB-agnostic fashion. This kind of separation of concerns can make the testability…
Software Demystified: How does a Text Box Work? Below is an excerpt from Street Coder , where Sedat Kapanoglu talks about opacity in software. “Technology is becoming more opaque, like cars. People used to be able to repair their own cars. Now as the engines become increasingly advanced, all we see under the hood is a metal cover, like the one on a pharaoh’s tomb that will release cursed spirits…
Yazılım Projeleri: Kapsamlı Rehber Yazıya başlamadan önce, bu yazının kimlere yönelik olduğunu belirteyim. 1- Yazılımda görece yeniysen, kendini halk arasında “junior” olarak tabir edilen grupta görüyorsan, 2- Kendini geliştirmek için proje yapmak istiyor, ancak ne yapacağını bilemiyorsan, 3- Hackernews klonu gibi projelerden ziyade kendini teknik olarak geliştirebileceğin projelerle ilgilenmek…
Some Thoughts on Academia vs Industry(with a focus on Computer Science) I'm a 2nd year Computer Science PhD student, I also spent some time in the industry(part-time and internships, not a full-time-employment), I am also a somewhat reactionary person, I criticize a lot, I try to view problems of the processes that I reside in, I try to see what the originating reasons for such phenomenon is.…
Algoritmik Problemler: Kapsamlı Rehber Bu yazıda, çoğunlukla Leetcode tarzı olarak bahsedilen, aynı zamanda “Competitive Programming”, “Algoritma Sorusu”, “Lanet Olası Algoritmalar” gibi farklı şekillerde de duymuş olabileceğiniz, büyük teknoloji şirketlerinin mülakat süreçlerinde popülerleşmenin ardından pek çok bilgisayar mühendisinin/yazılımcının hayatında ciddi bir yer eden problemler…
Hurdles of Designing A Layout Model For the past 2 weeks, I have been working on designing my own layout model for the document generator I’ve been working on . I have successfully failed to come up with a sound modal that’s expressive enough for all my use cases. I decided to document my pains for (1) clearing my vision, (2) maybe helping out anyone who ever tries to go in similar routes, (3)…
Learner’s Guide to Functional Programming#1: Implementing Lists in JavaScript Although this article was written first, I suggest you read the prequel I read as background. Leaving the link below. Learner’s Guide to Functional Programming#0: Sum Types, Booleans and Naturals in Javascript alpkeles99.medium.com There are many articles introducing functional programming. They mention immutability,…
Extracting Signals: Playing The Inverse Waldo Game I believe most of you will recognize the game in the following image, “Where’s Waldo?”. It has many variations such as finding the cat, the rabbit, the differing number etc. Taken from: https://www.independent.co.uk/arts-entertainment/books/news/where-s-the-brains-behind-wally-6261459.html The objective of the game is…
Sinyalleri Ayrıştırmak Aşağıdaki fotoğrafı görüyorsunuz değil mi? Yılların bulmacasıdır, yok Waldo’yu bul, yok tavşanı bul, yok kediyi bul, yok farklı sayıyı bul… Bu bulmacada amaç, aradığınız objeyi kendisine benzeyen başka objelerin arasına saklamak, sizin için asıl aradığınızı(sinyali) dikkatinizi dağıtacak diğer objeler(gürültüler) kullanarak gizli hale getirmektir. Kötü bir CV, kötü bir yazı,…
The Technical Pie (Yet-Another-Tech-Debt-Analogy) Yesterday, I was listening to a talk by @TitusWinters on why the current metaphors for “technical debt” are insufficient and fail to capture the reality of the situation. So, before going into the metaphors, what is the definition these metaphors try to capture? Here is a definition from wikipedia: In software development , or any other IT field…
Visa-Exclusion as A Form of Inequality The problems regarding visas to Turkish people are at a ridiculous level. I urge my colleagues in any type of position of power to tap into this conversation. This basically undermines any talk of inclusivity at any level of reality. Just today, there were 2 events. A women engineer, whose husband is an EU Citizen, has been rejected for a visa for a Google…
Learner’s Guide to Dynamic Programming#2 Dynamic programming is an algorithmic problem solving paradigm focused on recognization and elimination of repetitive computation. Earlier this week, I had another article introducing dynamic programming and a perspective I found useful. I’m leaving a link for that below. Learner’s Guide to Dynamic Programming#1 Dynamic programming is an algorithmic problem…
Learner’s Guide to Dynamic Programming#1 Dynamic programming is an algorithmic problem solving paradigm focused on recognization and elimination of repetitive computation. For this article, I’ll write a short introduction to dynamic programming, and move on to explaining how I try to look at dynamic programming problems. Introduction to Dynamic Programming Dynamic programming rests on two simple…
Learner’s Guide to Coq Theorem Prover#1 Before I begin, I must state that I am pretty much not qualified to write about theorem proving in Coq, but that was pretty much the idea behind Learning From Learners, so I decided to try anyway. https://xkcd.com/1856/ If you want a more comprehensive lecture style interactive book, go with a classic, Software Foundations ; if you wanna…
A Short Story of Inequality The voice we hear. The light we see. The step we take. The water we drink. The car we drive. The bed we sleep. The screen we look. The pen we write. The book we read. All of them are different. All of these are subjective experiences of persons, they are not the same, if not unique. Yet, we have to choose in our designs. We choose the decibels and frequency of music one…