While writing portable stream based numerical software is not difficult, graphics and GUI's have been much more of a problem. To date I have restricted myself to 2D line graphics using PostScript and made no attempt to exploit GUIs. I am sympathetic to the aims of the Free Software Foundation, i.e. the defence of programming ideas , and for a time I was a Linux fan, indeed MatClass has been released in the spirit of the GNU copyleft licence. Quite frankly this adherence to the FSF ideology has imposed a significant cost on my university, my department, my family and myself and I must now consider the prospect of commercial exploitation of this work and reduce those costs toward zero. Lessons from this experience are several.
Object orientation is useful.
I quickly hid all references to pointers and dynamic allocation. Polymorphism allowed me to implement a set of generic services e.g. error handling. Many problems were not readily solved using inheritance. Time spent on design was valuable. While I did give a good deal of thought to design, more consultation with potential users at an early stage and a formal design would have been useful.