Talks
2026
I gave an overview of the deep connection between logic and computation attributed to Haskell Curry and William Howard. I started with basic logical principles like propositions and proofs. Then, I showed the correspondence for a rudimentary propositional logic with simple connectives - "and", "or" and "if then". In particular, I presented a rudimentary proof calculus for these connectives along with some example proofs. Lastly, I demonstrated the correspondence by showing how these proofs can be represented as TypeScript functions.
Given the recent rise of LLM-based AIs impacting software engineering, this talk was mostly geared towards computer science students. My main point was to make sure that, despite all the amazing things we can do with such AI, understanding and mastering the fundamentals of engineering is still a must. I conceptually analysed what fundamentals and layers of abstraction are in software engineering and gave them examples of real cases where I had to understand and apply fundamentals in my own personal work. Then I talked about how agentic engineering (with AI) is yet another level of abstraction with its own fundamentals that we can master.
2025
Inspired by the works of Professor Elan Barenholtz, I gave an overview of how we can cash out language as a large language model. I conceptually analysed what an LLM is, and raised some philosophically interesting questions in order to reach Professor Barenholtz's insight that language may be characterised as an LLM. Then, we looked at some upsides and downsides of that view. We spoke about philosophy of language, agentic engineering and neural networks in general.
This was an impromptu talk. Inspired by the works of Andrey Kolmogorov, Ray Solomonoff, G. G. Berry and Gregory Chaitin, I gave an informal proof of why the perfect compression algorithm cannot exist. I covered concepts like Berry's paradox, Kolmogorov complexity and the lambda calculus. I've also written a detailed article about this proof here.
2024
I deep-dived into how the TypeScript compiler handles union and intersection types. I explained the difference between structural and set-theoretic types. Then I showed how mistakenly understanding TypeScript's union and intersection types as set-theoretic clashed with how they actually work. That's because they are structural types. Then, we looked at the actual code of the TypeScript compiler to see how structural typing is implemented in the language.
This was a quick 5-minute fun talk about various easter eggs in technology and software, like the Zen of Python.
2023
In this talk, I philosophically analysed the question "can machines think?" to a general audience. I deconstructed, conceptually analysed and cashed out the three philosophically loaded terms from the question - "can", "machines" and "think". This resulted in a framework allowing us to better understand the complexities, nuances and subtleties in the question.
In collaboration with a fellow engineer, Abdallah Yashir Ramsing, we gave a talk about idempotency. I analysed the concept philosophically and mathematically while Abdallah focused on how to build such an idempotent system with Angular. Abdallah went on to write an article about his part on The Philosophical Code. Read it here.
A re-run of my earlier 'Philosophy Meets Code' talk, this time for an audience of university students in computer science. See below for what was covered.
This was my first talk exploring the intersection of philosophy and computation. I deep-dived into two cases where philosophy and computer science intersect. Firstly, the proof that there are more unsolvable problems than programs available to solve them. Secondly, I explored the Grelling-Nelson paradox and showcased how we can represent that paradox in code.
I gave an overview of the functional programming paradigm by covering core concepts like currying, immutability and functions as first-class citizens. I used Haskell as the language of reference.