There's nothing in computing that can't be broken by another level of indirection.
Fancy algorithms are slow when N is small, and N is usually small.
Sockets are the X windows of IO interfaces.
Rule 1. You can't tell where a program is going to spend its time. Bottlenecks occur in surprising places, so don't try to second guess and put in a speed hack until you've proven that's where the bottleneck is
Object-oriented design is the roman numerals of computing.
Procedure names should reflect what they do; function names should reflect what they return