From Object Oriented Programming to Object Oriented Design

The good news is that I have finished my data scraping module for extracting all the company data listed on the two Toronto Stock Exchanges (TSX and TSV). I presented an alpha version of this data scraping module last week. I added the functionality to download all the historical quotes from Yahoo for all the companies. These data are stored locally in a cool HDF5 format with PyTables. I am very happy about that part. The bad news is that my module looks more like a hacked job than a piece of software. There is no defined structure for my underlying codes. It is obvious to me that this module would be difficult to extend, which is the whole point of my project. In programming jargon, my code smells (Wikipedia). Then it finally dawned on me. I am way behind in my programming skills. For the past few years, my quant work has been confined to MatLab or some proprietary trading platforms. I wrote scripts. Not programs. My problem with programming is that I am still stuck in a procedural programming mentality because that is what I've always used. Even though I updated my knowledge recently by learning Python, learning to program with an object oriented programming language is only the first step. (I am also familiar with C++ and Java from way back) To use an analogy, programming a software is like constructing a building. The actual coding itself is akin to the construction work. I got that part. But coding without a well designed plan can only go so far. It is now clear to me that if I am to build the trading software to complement my trading as I have envisioned it, I need to step it up with my software design ability. Consequently, I am now catching up on object oriented design and analysis, as well as software design patterns with a couple of books. I will try not to get too carried away with these though. My main focus is trading. But this will be very beneficial for my trading in the long run if I can build a more robust trading software that can easily grow with my future needs. I have many big plans for this side project of mine. I posted a UML diagram showing an architectural overview of my project.