The Craft of Coding discusses aspects of programming – coding, testing, style, algorithms, problem solving. It focuses predominantly on coding in C, Python, Julia, Processing, Ada, and the legacy languages Fortran and Cobol. The “LANGUAGES” page has information relating to programming languages. The PRACNIQUES page contains solutions, and case studies  to various programming problems. I have also expanded the blog to talk about issues related to technology and image processing.

My name is Michael Wirth and I teach in the School of Computer Science at the University of Guelph. I teach programming languages, legacy programming, digital photography (as it relates to computer vision/image processing), and food history related courses. My areas of interest include recursion, Fibonacci numbers, analog and digital photography, aesthetics, and the design and usability of everyday items.


While living in a world dominated by information, I am somewhat of a technological Luddite. My thoughts are summed up by a quote by E.F. Schumacher (Small is Beautiful) “The system of nature, of which man is a part, tends to be self-balancing, self-adjusting, self-cleansing. Not so with technology.” In my spare time I cook and collect cookbooks, build things, collect and restored woodworking tools, read books, and dabble in photography.

School Outreach:
During the school year I sometimes give talks in schools in the Greater Toronto Area. They can be anywhere from 30-60 minutes in length, and can either be one of the topics below, or more generally on careers in computer science. If you are a middle school or high school computer science teacher, and are interested, just send me an email. Topics include:

  • Debunking TV Technology – a fun look at computer vision technology as it relates to TV shows and movies.
  • The Art of Recursion – exploring the art of recursive problem solving, and it’s shadier side.
  • The Use of Things – explores the interface between humans and things (machines, tools etc).
  • Testing, Testing, 1, 2, 3 – a look at the importance of testing in software design
  • Software Time Travelling – a look at the legacy software and programming languages that run our modern systems, and the process of re-engineering it.

I don’t do much in the way of pure research anymore., and certainly no theoretical research. My research interests now mostly have to do with both analog and digital photography, and computer science pedagogy. I don’t like doing esoteric research – far too few people are interested in this stuff, and technology moves far too quickly to warrant most of the work. I also prefer applied scholarly work that produces tangible results, and funding bodies prefer “theoretical” type research. I’m not interested at all in this.

Please note that I am not taking on any graduate students (MSc or PhD). I prefer to take on 4th year undergraduate projects. I will be happy to take on fully funded domestic masters students (and you have to be a *really good* programmer, have experience in Julia, Python, Fortran or Ada, *and* a good writer). Please do not email me if you are interested in AI, machine learning or anything related – I don’t do those things. If you email me as a potential graduate student and it is clear you have no experience in my areas of interest, I will not return your email. I generally only take on students who have done an undergraduate project with me, or show a keen interest in digital or analog photography.

mwirth [at] uoguelph [dot] ca

If you are looking for photography/image processing type blog posts, I have now migrated those to their own blog – pixelcraft.photo.blog.

If you’re interested in travel, food, or life related stuff, I also write a blog called despitethesnow.wordpress.com

If you’re interested in woodworking, vintage tool-related info, and stuff related to working by hand, then try workingbyhand.wordpress.com

4 thoughts on “About

  1. Madhubabu K says:

    I have read one of your article regarding memory layout of C, in that you mentioned maximum stack size is 8MB, is that 8MB is contiguous?

      • Kuba says:

        That’s almost always true in existing C/C++ runtime libraries, but there are some notable systems that grow stack on demand, and use this for efficient coroutine implementation. Microsoft Research’s Midori was such a system – essentially a reimplementation of the entirety of the Windows OS running as managed code, in a CLR-like environment. It was running in managed, garbage-collected mode all the way to the kernel, and it worked great apparently.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.