
Jeremy Siek is a Professor of Computer Science in the School of
Informatics and Computing at Indiana University. Jeremy teaches
courses in programming, programming languages, compilers, logic, and
other areas of computer science. Jeremy designs new language features
to help programmers create and use software libraries and
domain-specific languages, especially generic and high-performance
ones. In particular, with Walid Taha, Jeremy invented the
gradual typing approach to mixing
static and dynamic type checking within the
same language. Prior to that, Jeremy co-authored the
Boost Graph Library
and attempted to add concepts to C++. Jeremy is a member of
the Center for Programming Systems at IU.
Email: jsiek@iu.edu
, Office: Luddy Hall 3016, Blog, github,
CV, Mastadon: @jeremysiek@types.pl
, Blue Sky: jeremysiek.bsky.social
, google scholar
Deduce Proof Assistant
The Deduce proof assistant is an educational tool that helps students
to develop correct code. You can read about it on the web page for
Deduce and from a series of blog
posts
that I have been writing.
Phishing Scam: Research Assistant Position
There is an ongoing email phishing scam that is using my name. If you
receive an email offering you a job without first meeting with me in
person, please report it to phishing@iu.edu. Please do not send me
email to check whether it is legitimate. Thank you.
Books
Technology Transfer
I’ve been fortunate to see some of my ideas get used in the software industry:
- Microsoft created a gradually-typed dialect of JavaScript, called TypeScript.
- Facebook added gradual typing to PHP.
- Facebook created Flow, a static type checker for JavaScript.
- The MyPy gradual type checkers for Python.
Recent Papers and Talks
Classic Papers (in chronological order)
The full list is available on Google Scholar and DBLP.
- The Matrix Template Library: A generic programming approach to high performance linear algebra, ISCOPE 1998.
- The generic graph component library, OOPSLA 1999.
- A comparative study of language support for generic programming, OOPSLA 2003.
- Gradual Typing for Functional Languages
Scheme Workshop 2006.
- Concepts: linguistic support for generic programming in C++, OOPSLA 2006.
- Gradual Typing for Objects, ECOOP 2007.
- Gradual typing with unification-based inference, DLS 2008.
- Automating the generation of composed linear algebra kernels, Supercomputing 2009.
- Blame for all, POPL 2011.
- Design and evaluation of gradual typing for Python, DLS 2014.
- Refined Criteria for Gradual Typing, SNAPL 2015.
Teaching
- P423/P523: Compilers (aka. Programming Language Implementation)
Fall 2024, Fall 2023, Fall 2022, Fall 2021, Fall 2020, Fall 2018, Spring
2016, Spring 2014
- C343/H343: Data Structures Spring 2025,
Fall 2024, Spring 2024, Fall 2023, Fall 2022, Fall 2021, Fall 2019, Fall 2017, Fall 2016, Fall
2015, Fall 2014, Fall 2013
- B505/I500: Applied Algorithms Spring 2021
- B522: Programming Language Foundations Spring 2020, Spring 2015
- B629: Topics in PL: Denotational Semantics Spring 2018
- C++, Short and Sweet, an Online C++ Course for Beginners at Udemy.
Students
- Tianyu Chen (Ph.D. student, Gradual information flow types for security)
- Darshal Shetty (Ph.D. student, Gradual Dependent Types)
Alumni
- Andre Kuhlenschmidt (Meta, Software Engineer)
- Matthew Heimerdinger (Two Six Technologies, Research Scientist)
- Deyaaeldeen Almahallawi (Microsoft, Senior Software Engineer, Ph.D. thesis: Towards Efficient Gradual Typing via Monotonic References and Coercions)
- Kuang-Chen Lu (Brown Univ., M.S. thesis: Equivalence of Cast Representations in Gradual Typing)
- Michael M. Vitousek (Facebook, Ph.D. thesis: Gradual Typing for Python, Unguarded)
- Chris Wailes (Google, Software Engineer)
- Matteo Cimini (Assistant Professor, Univ. of Massachusetts Lowell)
- Spenser Bauman (Ph.D. student, Meta-tracing JIT for Racket)
- Di Zhong (Undergraduate Research, now Ph.D. student at Northeastern Univ.)
- Zeina Migeed (Research co-op from Northeastern, now Research Scientist at Meta)
- Steev Young (Undergraduate Research in Gradual Typing)
- Josie Bealle (Summer Research Opportunity in Computing)
- Andre Yuri (Summer Research Opportunity in Computing)
- Weiyu Miao (LinkedIn) Ph.D. thesis: Reflective Metaprogramming
- Geoffrey Belter (Apple) Ph.D. thesis: Efficient Generation of Sequences of Dense Linear Algebra through Auto-Tuning
- Shashank Bharadwaj (VMware)
- Jonathan Turner (Microsoft Typescript => Mozilla Rust => self employed)
- Erik Silkensen (Software Engineer, Meta)
- Neelam Agrawal (Senior Software Engineer, Google)
- Sri Teja Basava (Principal Software Engineer, National Instruments)
- Ian Karlin (Principal Engineer, HPC Ecosystems at NVIDIA)
- Justin Gottschlich (Parallel Computing Lab @ Intel Labs)
Ph.D. thesis: Invalidating Transactions: Optimizations, Theory, Guarantees, and Unification
- Moss Prescott (SlamData) M.S. thesis: Speaking for the Trees: a New (Old) Approach to Languages and Syntax
- Christopher Schwaab (Ph.D. student at the Univ. of St. Andrews)
- David Broman (Full Prof. at KTH Royal Inst. of Tech., Sweden)
Ph.D. thesis: Meta-Languages and Semantics for Equation-Based Modeling and Simulation