"Wrong stuff" here means the overhead it takes for the interpreter to parse and process the code. It's connected with the notion of interpreted vs compiled languages. There are several models of code translation in use, which roughly fall into one of following categories:
- Native compilation - source code is directly compiled into machine code. Best performance at the expense of portability. Commonly associated with C and C++,
- Intermediate compilation - source code is compiled into a simplified intermediary language (bytecode), which is later interpreted or compiled (just-in-time compilation) into machine code during execution. Better portability than native code, better performance than pure interpretation while retaining some of the upsides of interpretation (like late binding). Examples include C#, Java and other languages targeting JVM and .NET CLR,
- Interpretation - source code isn't directly translated into machine code, instead it's interpreted and executed by a dedicated interpreter program. Interpreters vary in sophistication, in the naive implementation however it boils down to parsing, analyzing and executing source code line by line. Interpretation allows greater flexibility than compilation, hence interpreted languages make wider use of dynamic typing or reflection, for instance. Interpreted languages are often seen as offering increased developer productivity, as they require less boilerplate code and lent themselves nicely to rapid prototyping. Downside is reduced performance. Commonly associated with JavaScript, Ruby or Python.
Hence the choice between interpreted and compiled language boils down to the question, what do we value more, developer productivity or performance? The migration described in the article seems to follow the same line of thought, with strong prototyping language Ruby being replaced by JVM-based Scala due to performance considerations.