At last year's London Perl Workshop I went to an entertaining and interesting talk about fractions by Theo Van Hoesel. After releasing the first version of Lingua::EN::Fractions I got in touch with Theo to talk about fractions.

Theo has been working on Dave Cross's Number::Fraction module, so we emailed back and forth, touching on normalisation, the right way to represent "one and two thirds" as a fraction in Perl, Unicode and other things. Theo has prompted a lot of ideas, and given me a good backlog for Lingua::EN::Fractions . It was meant to be a quick hack...

I had planned to spend one evening's hacking working on a new feature, but Theo's emails got me thinking, and I spent the time iterating on just one test, which I eventually got working how I wanted. I commented on this to Theo, who replied:

Doing a good job is hard and tedious work, but enjoyable!

This really resonated with me. The creative part when you're bashing out a new module can be fast, furious and fun. But creating a robust, reliable and documented module is a whole other thing; a different kind of fun. Dealing with quirky failures from CPAN Testers that you can never reproduce, handling weird edge cases, thinking through and dealing with questions, problems and suggestions from people trying things that perhaps you never thought of.

It can be a long grind, the end of which might be just one changed line of code, but possibly a lot more of documentation and tests. It reminded me of a tussle I had with Module::Path earlier this year, to handle symlinks. It took me a while to iron out an issue with Debian, and fixing this promptly broke the tests on FreedBSD. It took seven releases, four of them developer releases, to nail it. The resulting code was quite simple; all that hassle, just for that. It felt good to finally get a clean bill of health from CPAN Testers.

So yes, it can be hard and tedious, but in the end, satisfying.

A key part of what makes it satisfying is chewing the fat with, and learning from, other members of the community.

Please enable JavaScript to view the comments powered by Disqus.

Disqus