Machine languages consist of binary code that is directly understood by CPUs or microprocessors and are prone to errors. Assembly languages use mnemonics like add instead of binary but are still machine dependent and slower. High level languages like C++, C, and Visual Basic allow programmers to write code using expressions like x = a + b and free them from being machine dependent, but are still somewhat machine dependent.