1. A method of recommending an optimization strategy for software, the method comprising: predicting values for empty cells of a sparse matrix, wherein values of non-empty cells of the sparse matrix represent ratings for optimization strategies previously applied to programs, wherein a first dimension of the sparse matrix corresponds to the programs, wherein a second dimension of the sparse matrix corresponds to the optimization strategies; and wherein the programs of the sparse matrix each include a plurality of parameters including one or more of run-time features for the corresponding program, compilation settings for a compiler used to compile instructions for the corresponding program, a target platform for executing the corresponding program, a number of processing cores available for the target platform, or a memory size for the target platform; filling the empty cells with the predicted values to produce a complete matrix; determining, for a current program that was not included in the programs of the sparse matrix, a recommended optimization strategy that yields a highest rating from the complete matrix, wherein determining the recommended optimization strategy comprises determining ratings for one or more of the plurality of parameters that are applicable to the current program; and optimizing the current program using the recommended optimization strategy.