If by “free will” we define any action that is not the intended behaviour of the original designer, then yes. And it actually does fit the bill relatively well, IMO—it is an emergent behaviour (usually) experienced during unexpected values appearing somewhere in the code. And just like with us, the behaviour is deterministic, and at the same time, pretty much impossible to predict in some cases :D
Multi-threading issues are a nice example—everything works very well in isolation, and breaks down in a real production enviroment.
Is the ability to plan really so special?
When an animal goes out of its nest, forages for food and then returns, isn’t that the same planning we exhibit too? And now add that humans are omnivorous and acted both as pack hunters and as gatherers; suddenly, complexity arises, that requires you to be able to plan not only for yourself, but also as part of your group—these 10 guys will go hunt that mammoth, while these 5 will go gather berries and these 5 will make some new spears. Simply through the requirement for group interaction, you have another mechanism for the development of plans, psychology, morality.
And that’s kind of the point, isn’t it? Who says our psychology and morality is a direct product of biological evolution? Biological evolution only gave us the tools (a brain capable of forming plans); morality is a social behaviour that evolved alongside, led by intelligent designers (us) - with groups dividing on various issues, some of them surviving, some not; some of them spreading their ideas further, some not. We have long since taken over the reins of our development, even though we still move within certain constraints imposed on us, with various flexibility (eg. the ability to suppress our anger).
I think this is quite apparent when you look at animals bred in isolation or in different conditions; sure, there’s some behaviour based on genetics, but it obviously isn’t everything.