This word is plaguing tech blogs everywhere I see; People passing it around like a hot potato, without even knowing what it means. If I must quote the person that set me off writing this, "You have a valid point. Google needs to get their act together and optimize android the same way ios is optimize." This is a prime example, ignoring the grammatical failure, from a poster who will remain Anonymous. He (Or she) claims (The context was a discussion on whether there is a point in putting > 1gb of RAM in an Android device, by the way) that Android isn't 'Optimized' like iOS. If he had been more ambiguous he would've said metal is for emos. Which of course it isn't. . . mostly. Good metal isn't, anyway. Back on track, the ambiguity of this word plays a great deal into the overall effect of making its user look foolish in the wrong circumstance
'Optimize' is a word of many interpretations: The -O{1-3} flag in the GNU Compiler Collection (gcc and g++,anyway) applies automated 'Optimization' to the output file involving many procedures, such as loop unrolling. I am wary of using this flag myself as I haven't the slightest idea what it does aside from loop unrolling (Although, it is just one Google away), but it's never rick-roll'd me when I've used it and it's recommended by anyone you might ask, so I guess it's okay in my books.
Another use of the word is may be just generally going through code looking for bottlenecks, unnecessary memory usage, garbage (Referenceless memory), unnecessary system calls - just basically things that slow a process down, and changing them for the better. Often, a lot of little things like this may bog down something severely, but in any normal circumstances, things such as this, except for serious bottlenecks, have very, very little effect upon a program; nothing like the difference between iOS and Android. (Don't get me wrong; I think Android is great, and open-source truly is one of the greatest concepts-put-into-practice ever, but Android (The interface, at least) runs on a virtual machine for gods sake, and the iPhone 4S still runs on 512MB of RAM as well as it does)
The difference between variations of techniques may be night and day (shared memory versus memory-mapped-filed or pipes, for example, where the former is much faster) and it is in the choice of techniques that lies the true effect of 'optimization'. Things such as switching a concurrent application from using fork() to pthreads will remove the strain that lies in both the forking process, and the replication of the memory stack, and therefore optimize the application greatly.
Another point has arisen: Hardware 'optimization'. Basically, this is about using, to the full extent, the abilities of any hardware component. Of course, the speed of drivers reading and writing from the buses don't vary much; it's more dependent on the hardware itself. So one way to 'optimize' hardware interaction (in most cases, discussions that involve both 'optimization' and hardware are about GPUs) would be to refine the API used to interact with the driver - but this is more about the maturing of software (A natural process for any half-decent project) and the development of new technologies than anything else.
The main reason this word gets to me so is that the people are using it to get an illogical - or, at least terribly thought out - point across. First of all, a developer that doesn't think of performance, and therefore actively chose or seek out alternatives that improve performance (Python, anyone?) should not be called a developer; the term 'code monkey' may be more fitting in this instance - hell, I even read some guy claiming programmers have barely caught on to quad-core CPUs after 5 years, and that Android, to accommodate for a quad core CPU (Tegra 3, anyone?) would have to go under another phase of 'optimization' to even make use of the new CPUs (And then developers would slowly 'optimize' for quad core) when there's exactly no difference between developing for single, dual, quad - or perhaps even hex or oct core, for if you use any form of concurrency, or even if you don't, any process (or thread) will be assigned a core regardless of the number of cores and given time slots by the kernel whenever deemed fit.