I get a sort of perverse pleasure as I watch my algorithm use up 24 out of 32 of my CPU cores at 100%... this is what it was all for. No more running the heater for me!
@freemo Your computer is going to be a terribly inefficient heater, though. You should get more heat with the same power with hardware that's actually designed for heating, instead of hardware that has heating as a mere unwelcome side-effect.
@ccc Actually thats not true, all heaters are 100% efficient, though some may come from more expensive energy sources that would be better used doing something other than heating. But a computer will be just as efficient at heating a home as an electric heater would be.
@freemo Some of the electrical energy going into a computer is emittedd as light from the screen, though. This cuts into the electricity->heat conversion efficiency.
@ccc Yes but that light gets absorbed by the room and also converted into heat, so still ultimately heat in the end.
The only argument you could make (and I've made this before) is loss due to 1) light escaping through your windows, 2) RF emissions from the computer that escape into the far field and do not get reabsorbed within my home.
Keep in mind both of these are extremely minimal in terms of total power output, you are talking less than 0.1% easily. Also keep in mind the argument about light applies to all heaters. heat escapes as light in the infrared which windows are transparent to. So from point #1 a computer is no more inefficient than an electric heater. For point #2 a computer is probably a bit less efficient than an electric heater on point #2 but it is also so minimal as to be insignificant.
I would argue that the "optimize late" even as a general guidline is bad advice.. You should almost never optimize at the very end, nor should you optimize too early for things that may never be. Just as you shouldnt spend all your time designing and building a single class that takes significant effort before moving on to the bigger application. In general you should be doing everything at once incrementally. Every step should have some portion of every aspect including architecture, implementation, and optimization, and those steps should be spread out throughout the process.
This big point here is that even if your application runs just fine without optimization, you should still be doing it. Mainly because the architecture you decide on, including the API you expose to the outside world (which you cant really change too easily) may make good quality optimizations impossible in the end, even if its workable during development.