Content-Type: BBCode My first real language was z80 assembly (some basic and logo came before that). If that was taught before higher-level languages (C/C++ included), then everyone would better understand what is going on in basically any language. Of course, if assembly was taught during an introduction course, then there would not be many people interested in the courses. This also brings up the question about what the CS class should be about. I would like to think that CS is about algorithms and math, not about petty things such as the language used. Running code, or the code at all for that matter, is more a computer engineering topic in my humble opinion. Anyhow, I also wanted to say that the following a = "foo"; b = "foo"; a == b; in JAVA can actually (and usually does) return true, depending on your JVM version and runtime conditions. The Sun JVM will internally combine identical strings in order to save memory, only differentiating between them until one is modified. However, because you add "bar" to each string in your example before printing, the two strings are separated internally, as the original string has been modified. Even though the two strings are still the same after both instructions execute, the JVM will not merge the strings again. Thus, a==b returns false in your example. However, if you had initialized both strings to "foobar" and done nothing else, a==b would probably return true. The latter would have used less memory as well. Isn't JAVA great?