I'm looking for a programming language to recommend to a friend considering teaching herself software testing. I have a friend who is interested in learning software testing, and I believe strongly that today's testers absolutely have to have automation skills if they don't want to hit a glass ceiling after a few years (or become super-star exploratory testers . . . but not everyone wants the stress of having to be a super-star).
I can't look to my own experiences, because I did a 4-year CSE degree that was geared toward developers, and my education isn't light-weight enough. I want something relatively easy to learn that will give the tester the greatest bang for their buck in developing good, maintainable automation.
I know Ruby is used for a couple of test tools - Watir and Cucumber - and something that works with Selenium, WatiN, or Watir would be good. The two favorite languages locally for developers seem to be Java and C#, and she will be working locally. Whatever she learns needs to have good resources for novices at programming to self-teach, whether those be books, online tutorials, or online communities. Something that isn't too expensive to learn would probably be preferred ('free IDEs are available and there are good free tutorials and information to learn from' is ideal). Also, something that is harder to write bad code in would be good, since I want her to be able to avoid brittle, unmaintainable tests. She is highly motivated to learn, so a very useful language that will take 6 months of hard work to get a usable level of skill is preferable to a slightly useful language that she could use in a single month. At the same time, any time she spends learning to program is time she could be spending practicing exploratory testing or learning other great test skills - so ease of learning does matter.
Also - I do realize that programming is one very small piece of being a good tester. I just have a better handle on self-teaching the rest of the testing skills, since I self-taught myself those areas and can pass on what worked for me or what I wish I'd known. I don't want anyone to think I believe you can learn to be a good tester by just learning to program; rather, I just don't have a good handle on the easiest way to start programming as a tester since I started testing as a programmer.