With so many changes in my recent life (getting a new job, moving to the UK, etc.) the thesis I’m doing got quite stuck. For several months all the code I had was nothing more than spare blocks, difficult to connect among them and with more and more complex functions every time. I was not able to come up with any real progress or do any real experiment. Just thinking about my thesis put me into an status of anxiety. On top of that, summer came and I didn’t have any kind of contact with my professor for nearly month and a half. I felt I was never going to be able to finish my doctorate.
Fortunately, that situation is no more. And it was at my job where I found the key to continue forward.
A good developer can use a certain technology to solve a problem. A really proficient developer is able to determine and use the most suitable technology for solving the problem at hand. Working in Imagination I’m becoming a better developer, and I realized that the path I was taking for my wordlength optimization framework was far from optimal. So I decided to change, I switched to Python and rewrote nearly 80% of the source code again. Again, because nearly two years ago I considered that, with the design choices I had been doing, keep progressing was going to be extremely difficult so I redesigned everything.
The funny thing is, by the time I was halfway rewriting everything in Python I stumbled into this tweet:
It’s amazing how much cleaner your code looks the third time writing it. First time, hack; Second over-engineer; Third = goldilocks.
— Aaron Evans (@fijiaaron) July 31, 2014
And I have to say I couldn’t agree more. The first implementation of the framework was sketchy, I wrote ad-hoc solutions for the problems that appeared and nothing was really stable (especially the garbage collection). The second time I designed a really complex structure that included nearly a dozen different iterator types, used and abused of inheritance and method overloading, and which in the end happened to be painfully difficult to maintain and even modify. But then, this third implementation is simple, structured, easy to use and extend. And I have been able to advance more in these last three months that what I did in the previous year.
Also, I have re-discorever the joy of working in my project, and I see the light at the end of the tunnel: I’m nearly finished with the coding, I’ll be able to get on with full-time writing before my birthday and I’ll have finished it all before my daughter is born in February.
Did I say I am really excited about it?