Tuesday, February 19, 2013

Designing Usability

Getting the simple stuff to work like fit(), predict(), and transform() was the easy part, we hope. Since we both want to be able to use ProtoML ourselves and also share it with the world, we are working on a ton of different usability issues right now.

Priority number one is a really good test suite (in my opinion). We have a bunch of code that we think should work, but now we need to show it works. Because of this, we spent a good part of the last week working on documentation and unit tests. The idea is that it will make it easier to develop in the long term because every new feature should only require a few extra test cases and we'll be instantly able to see if it works with no guesswork needed. Priority number two has been documentation. We have auto-docs set up, so all we need to do is comment our code nicely. We have most of the new features on pause until we have satisfactory coverage in these two aspects.

One big topic of this week was dependencies. We always wanted our library to be a sort of glue to connect a variety of other libraries, and this inevitably will lead to a lot of dependencies. I (Diogo) want to minimize dependencies by having everything unnecessary be in their own sub-modules partitioned by dependency for easy of use of the user, and Bharath wants all dependencies as a requirement so that it just works. There are obviously pros and cons of each, and we'd love to hear opinions on this.

A second big argument point was following standard python conventions, namely using a context manager to add nodes (for an example, see last post where the nodes are created). Bharath argues that it makes the code easier to make a more readable, while I argue that it makes it unconventional and thus harder for an average user to understand. Bharath thinks that there could be amazing possibilities by having all sorts of code in the context manager (for loops for example), and I agree that it looks great and follows the DRY principle. I just think that taking in a list of nodes would only take a little more code and make a lot more sense to most people. Furthermore, we are trying to decide if I should allow feature transforms to be created in the same manner. There may be a big debate soon on this...

No comments:

Post a Comment