How Machines Learn
An accessible explanation of how AI systems learn through pattern fitting, using analogies like dart throwing to explain the core concepts of data, models, and loss functions.
Software Engineer • Educator • Writer
I build fast, accessible web apps and write about education, coding, and philosophy. Welcome to my corner of the internet.
🇨🇦 Available for remote work
Software engineer and educator based in Canada, working remotely
Building end-to-end web applications with modern frameworks and best practices
CI/CD pipelines, containerization, and Kubernetes-based platforms
Engineering tutorials that bridge educational theory and practice
I design and ship full-stack web apps end-to-end—from product exploration through production-ready delivery—while building the CI/CD automations that keep them healthy.
I'm just as curious about the systems around the code. I experiment with Kubernetes-based platforms to understand how teams operate at scale, and I write about how educational theory can improve how we teach coding and mathematics.
University of Helsinki
56 ECTS in modern web development and DevOps
B.Ed. (Math & Fine Arts), M.A. (Theology), B.A. (Music & Philosophy)
Interdisciplinary background in logic, pattern recognition, and pedagogy informs my approach to problem-solving, system design, and technical communication
Thoughts on engineering, performance, and developer experience.
An accessible explanation of how AI systems learn through pattern fitting, using analogies like dart throwing to explain the core concepts of data, models, and loss functions.
Java’s data types, wrapper classes, and concurrency helpers look excessive until you see the trade-offs they unlock.
Legacy syntax, paradigm overload, and a forgiving runtime make JavaScript tough on newcomers, but understanding those quirks helps.
A playful look at Java’s entry point, file conventions, and curly-brace culture, and why the verbosity pays off in large systems.
Have a question or want to work together? I'd love to hear from you.