Ad 1) Využijete co nejvíc vlastností daného hardware, které jde použít pro urychlení kódu. Např. pokud má procesor speciální instrukce pro nějaké výpočty, použijete je - často se o to postará správně nastavený kompilátor. Pokud můžete využít výpočet na grafické kartě, využijete ho. Pokud má procesor více jader nebo systém více procesorů, napíšete kód paralelně, aby mohl běžet ve více vláknech. Pokud máte vícevláknový kód, minimalizujete případy, kdy na sebe vlákna musejí čekat. Dále má dnešní hardware spoustu optimalizací kvůli rychlosti, takže je potřeba kód napsat tak, aby tyhle optimalizace fungovaly správně. Například predikce skoků v procesoru, nebo ukládání dat v cache procesoru (data, která bude procesor používat, umístit v paměti k sobě tak, aby se vešla do řádky cache nemusela se načítat z pomalé hlavní paměti). A tak dále.
V případě uživatelských aplikací nezáleží tolik na tom, jak je aplikace fakticky rychlá, ale na tom, jaký má z jejího používání uživatel pocit. Základní věc je to, že náročné operace se nedělají ve vláknu, které obsluhuje uživatelské rozhraní. Takže při takové operaci nemá uživatel pocit, že aplikace zamrzla, ale reaguje na jeho podněty (v takové situaci toho uživatel zpravidla stejně nemůže moc udělat, ale aspoň třeba může přerušit tu déletrvající akci). Dál už záleží na tom, co ta aplikace dělá, ale hrubý výkon málokdy hraje roli. Možná ještě u her nebo přehrávání videa. Ale jinak je často mnohem důležitější to, jak aplikace pracuje s daty - pokud pracuje se soubory na disku, zda dokáže načítat data dopředu, pokud s databází, zda používá takové dotazy, které se vyhodnotí rychle atd. A podstatné je i to, jak je navrženo ovládání aplikace - pokud se musí uživatel někam složitě proklikávat, bude aplikace nakonec pomalá, i když by byl kód velmi rychlý.
Ad 2) Nejjednodušší pravidlo je, že mezi rychlostí a použitou pamětí je nepřímá úměra - máte na výběr, zda si program nějakou hodnotu zapamatuje, nebo zda ji vypočítá. Samozřejmě z pak existuje spousta případů, kdy tohle neplatí - když se zaplní paměť nesmysly, kód to nijak neurychlí, naopak správa velkého objemu paměti má větší režii.
Ad 3) Nemělo by, procesor by měl být chlazený tak, aby zvládl pracovat i na nejvyšší výkon. Dnešní počítačové procesory mají navíc ochrany, které v případě překročení teploty umí procesor zpomalit (např. vkládáním méně náročných prázdných instrukcí).
Ad 4) Ano, to je jedna z věcí, o kterých jsem psal v 1) - uspořádat data tak, aby měl procesor co nejvíc potřebných dat co nejblíž a nemusel čekat na data z hlavní paměti nebo na zámek od jiného procesoru.