One of my weaknesses is to always wanting to find the perfect X. Preferably X can be used solve every X related problem and situation.
Recurring X’s for me are operating systems, mobile phones and programming languages.
I find it terribly hard to be pragmatic and admit that, yes, PHP is far from perfect, but often times it’s probably the best choice. I’ve been using WordPress for years and although the bits of code that I have looked at (mostly in themes) want me to scratch my eyes out, it works; it operates thousands of websites perfectly.
Yes, Linux is a great operating system for servers, but given the choice between Mac and Linux for the desktop, the choice is harder to make. I like consistency, I like to use the same commands on my desktop and server, not having to know about all the odd different ways to configure Apache on Linux vs. the Mac. But with a couple of attempts to switch to Linux behind me, pragmatically I know the Mac just works. It does not require tweaking, reloading of drivers after hibernation and running odd scripts to get a bluetooth mouse running.
Yes, the iPhone is a slick looking phone, but to develop for it you need an arcane language such as Objective-C or plain C. Some people love it, but after having a good look at the environment I find it rather insulting. So much has happened in the world since 1986, and all Objective-C has to show for it is property support and garbage collection, which were finally added to version 2.0 of the language recently. Except, garbage collection is disabled on the iPhone. We have come too far to go back to manual memory management again. Although, if you’re developing games, this is probably still the world you live in. On Android, although the phones are not very compelling at this point, you can develop using Java, or even more modern languages such as Scala. But, pragmatically I chose to buy an iPhone, because, frankly, I’m not so sure I’m going to develop mobile applications anyway. And if I will, they may just be web applications.