A buffer overflow is a type of computer security exploit which allows a program to perform functions that it is not designed to do. The responsibility for preventing the possibility of exploit lies in the programmer, however this requires proper planning and knowledge. While most programming courses teach proper coding techniques that prevent the possibility of a buffer overflow, coders who learn on their own tend to produce exploitable code. Thus, modern compilers have been designed to detect possible exploits and warn about them. Despite this, the compiler cannot be 100% efficient at catching exploits and proper coding guidelines must always be followed.