It depends. If her interests are highly focused, there's a few problem domains where niche languages (R, Matlab, Haskell, Fortran) really shine. However, if she wants more general purpose tools, I've got a few strong recommendations:<p>Ruby - I'd start here. Ruby is an amazingly flexible language, with a gigantic "feature set". Learning Ruby will get her up to speed on imperative programming, functions, objects, libraries, DSLs, regexps, and some functional programming (via closures). The community is friendly, the docs are plentiful, and the available libraries (gems) are pretty comprehensive. Best of all, the learning curve is gentle and it gets you writing productive programs quickly. However, unlike many "beginner's languages", it's not particularly limiting. If you really need to, you can always call out to C or Java (via JRuby). Possible alternative: Python. Never worked with it, but I understand it offers a lot of the same benefits.<p>Java - If she wants to do a variety of scientific or industrial programming, she's eventually going to have to learn Java. Java has largely replaced C++ as the academic language of choice, and most industries have migrated to either Java or C# for general development. While some people scream about the "yuckiness" of Java, it's actually not that bad, especially for a beginner. It's highly object oriented and strongly typed, teaching a lot about those concepts. The verbosity is often helped by access to a lot of kick-ass dev tools. Best of all, though, is the libraries. The amount of open-source code that you can tap is HUGE, especially in the scientific and industrial arenas. Oh, and Java 6 is wicked fast, at least in comparison to Ruby and Python. :)<p>C - I would recommend C for two reasons. First, it teaches you a lot about how the underlying machine works. If your friend is doing scientific computations on large datasets, she's eventually going to run into some weirdness with memory. Knowing C helps (forces?) you to understand what's happening "behind the scenes" in these VM-based memory managed environments. If you dig far enough down, you're almost always going to find some C code, and it's helpful to know how that works. Secondly, there's some problem domains where still C reigns supreme, namely anything that demands extreme performance. The combination of Ruby and C can give you the best of both worlds, using Ruby for most of the "glue code" and C for stuff that needs rocketship speed.<p>NOT RECOMMENDED - C++. Almost everything done in C++ is better done in either C or Java. C++ is super-complex, verbose, error-prone, and you still have to manage your own memory. Unless she needs to work with legacy code, your friend's time is best spent learning more modern tools.