При разработке программист может столкнуться с двумя видами ошибок: синтаксическими и логическими.
К синтаксическим ошибкам относятся ошибки написания инструкции (их оформления). Данные ошибки обнаруживаются компилятором, соответственно их достаточно просто обнаружить и исправить (в отличии от логических).
Логические ошибки – это ошибки допущенные разработчиком при описании логики работы программы. Например, приложению нужно считывать числовые данные с двух файлов и суммировать их, но программист случайно вместо операции сложения «+» использовал операцию разницы «-». Таким образом, компилятор скомпилирует запускной файл и ошибок не обнаружит, но программа будет работать неправильно – программисту нужно будет просмотреть свой код в поисках ошибки. Такие ошибки часто встречаются, и они являются самыми сложными для обнаружения.
Источник: видеоурок Александра Шевчука "ЗНАКОМСТВО С ЯЗЫКОМ C#" (тут обсуждение ошибок и тут практический пример)