That may have been the truth of yesteryear, but the truth about assembly in this day and age is that compilers are far better at optimizing than any assembly lackey. To optimize code for speed you need to know many things about the processor itself, and different processors have different quirks. Some cases may even seem counterproductive such as loop unrolling (a loop is unrolled by repeating the body of the loop so that there is no branching instruction). In the long run its not worth it, and speed is not your first concern (see premature optimization). Speed and size is usually not a problem because our processors are so powerful these days and we have plenty of memory to spare. Also keep in mind you can optimize for speed or size, otherwise there will be a tradeoff (great example is loop unrolling which favors speed over size).
Use assembly only when you really need it. Otherwise stick with higher level languages.