Even if you are a fine programmer and think that you understand details of a language quite well, sometimes you may feel that you don't really understand the abstract structure of a sizable program. This is because understanding a program as a whole is quite different from interpreting each single line of the program. Visual B can help you with this by enabling you to see a program as a structured tree just like compilers and interpreters.
B language is just an simple, imaginary language that I learned in class(it's not imaginary anymore though, now that I implemented it). It is simple enough for you to learn in a few minutes if you are familiar with C but still powerful enough to do anything that any other language can do. Visual B is what runs and visualizes B programs.
Visual B is similar to a debugger but distinguished in that it is intended to be used to traverse and inspect a syntax tree rather than source code of a program. It also visualizes the execution processes which is analogous to GUI features of some debuggers. I think graphical representations are keys to understanding profound concepts in formal languages but, most of all, they are simply beautiful🙂