The Science of Information Error Correcting Codes