I would avoid C and C++ and any other language with manual memory management or languages which require pointers for a lot of data structures. I'd focus on teaching the concepts of programmer first and I think having to deal with memory management and pointers hinders this. Yes, I would aim to introduce both of these, but not until the student is pretty good at programming in a garbage collected pointer-free language. Also, C++ is far from a beginner language. There are too many things left undefined or simply hard to understand that would only confuse the student programmer, or worse: give them bad habits.
I would also avoid Java for a number of reasons. Firstly, a simple hello world program in Java introduces too many features which need to be ignored (classes, public, static, void, String, arguments, System package etc) which can be a little confusing and secondly, while I find OO to be both useful and beginner friendly, I do not believe that forcing everything to be OO is a good idea, especially if all you are trying to do is teach simple statements.
I quite like the simplicity and power of Scheme and personally, I quite like the syntax too, however, I probably wouldn't use Scheme to teach beginners, since I think it's important to teach a somewhat mainstream language to encourage the students to build programs for themselves and others in their own time.
Having said all that, I would probably choose Python because:
- It has an easy to understand (and IMHO clean) syntax
- It has an interactive interpreter, an excellent learning tool!
- Simple programs are simple, complex programs are possible (and IMHO often simpler than in C++ or Java)
- It supports OO and some functional programming techniques
- Its a real world programming language which is in common (common enough) use
- Theres a large online community, wealth of articles, tutorials, books etc
After they have learnt basic programming, algorithms, OO, basics of functional programming, data structures and generally have a good enough grasp of programming to complete reasonably large assignments on their own, I'd probably introduce them to C or C++, perhaps allowing them to write Python extensions, though probably not.
I would also introduce them to assembly language. Preferably concurrently (in a computer architecture course) alongside C/C++ or even alongside Python.