I have been collecting and performing magic since I was nine years old. However, when it comes to software my best advice is to avoid as much magic as you can. It is easy to think writing software that does all sorts of magicis a good thing. But after years of being burnt by such software I have come to the earth shattering conclusion that there is no place for magic in software.
The worst kind of software is code with multiple side-effects – it is a nightmare to maintain and never does quite enough magic to make it worthwhile. It doesn’t mean you can’t write useful scripts and routines that perform multiple tasks, but each task in the script needs to be spelled out rather than things happening “as if by magic.”
This revelation might seem obvious to many but for me it has really only been in the last five years that the truth has become crystal clear. These days I aim for simple and explicit code and although I like to think what I write is still cool, it is no longer magical.