That’s not a rhetorical question. I’d like to know in which scenarios a mixin in python really is
the best option. I can’t seem to think of any, but maybe I’m not thinking outside the box enough.
The basic idea of a mixin is to create a small re-usable class that can “plug-in” to other larger
classes. From the wikipedia definition, a mixin is a way to compose classes together without
using inheritance. The problem is unlike ruby, python mixins are a purely conceptual construct.
Python mixins are inheritance (the only difference is that the class name usually contains
‘Mixin’). It is up to the developer to remember this, and to manually avoid all of the common
pitfalls of multiple inheritance. This kind of defeats the whole purpose of the mixin in the first
place. What’s more is that most people use python mixins improperly.
Read more →My last post was basically a very long winded way of saying, “we have a problem”. It kind of did a
little dance around “why is there a problem” and “how do we fix it”, but I want to explore these two
questions in a bit more detail. Specifically, I want to return to the two case studies and explore
why our test harnesses don’t work and why mozharness does work even though both have IFFY (in flux
for years) requirements. Then I will explore how to use the lessons learned to improve our general
test harness design.
Read more →Dry versus Wet
As programmers, we are taught early on that code duplication is bad and should be avoided at all
cost. It makes code less maintainable, reusable and readable. The DRY principle is very basic
and fundamental to how most of us approach software design. If you aren’t familiar with the DRY
principle, please take a minute to read the wikipedia page on it. The counterpart of DRY, is WET
(write everything twice). In general, I agree that DRY is good and WET is bad. But I think there
are a class of problems where the DRY approach can actually be harmful. For these types of problems,
I will make a claim that a WET approach can actually work better.
Read more →