I agree with Mehran, c is a good starting point for teaching, although, also take into account the context of the CS program degree, and also the context of local or regional IT industry.
I would definitively NOT use C or C++ as both are using concepts which I find quite counter-intuitive as a beginner. I spend 10 years in software industry and still find the concepts of pointers and stuff quite challenging. As a student I always hated it and they were a major obstacle to me.
From a pedagogic point of view I would rather choose high level languages which are easy to learn and offer a student the chance of doing "quick wins" to keep motivation high. Furthermore it is desirable to have good community support to overcome challenges. From this point of view I would definitively prefer Python, Java and C#. in the latter case it might be better to go for Mono.
C and derivatives are (from my point of view) tools for specific applications and hard to learn. On the other hand C et al. provide a more insight into the basics computing and the relation between hard and sortware.
I've been teaching using C++ for undergraduates and C# for graduates at my university for the last 7 years. I agree with difficulties of C-syntax as a beginner but I definitely benefit from the easy-to-use class/object concept of C++: for example we directly start using string class as a type at the beginning without knowing what a class is yet. C# and Java are easier to use, however you need to use namespaces/classes/functions so fast at the start, which is not the case with C++. Forget about teaching pointers at a start-level course as I do not teach pointers anymore. C++ standard libraries are pretty useful too: for example I use standard vector class for teaching arrays for instance, which is a good dynamically growing list :)
Thank you Gulsen..You are too kind to provide your notes. And your disscussion is also valuable. However, I still wonder python-like language experiences..
I currently use Groovy to work with my students (physicists). It is quite similar to Python but is much better integrated with Java and growing very fast. Also it has a strong functional trend similar to Java 8 and Scala. Groovy and Python are good only for beginners since they sacrifice software architecture for fast coding. And in my opinion, architecture is the main thing in software design.
Also i recently found an interesting platform for cross-language experience: http://beakernotebook.com/ .
A lot has already been written in the previous answers. My own experience in computer language teaching over the last 25+ years is that, indeed, it is wise to use several languages.
Quite amazingly, Pascal didn't popup in the previous answers. I know it is almost forgotten now by "young" programmers, but this language has the ability to avoid poor programing reflexes. Pascal is well structured and quite easy to learn.
From this point, I usually go for C for several reasons: (1) the way pointers are implemented are probably more easy to understand than in Pascal, (2) it is also an opportunity to go "deeper' in the OS and the computer hardware without teaching assembly, (3) it is an opportunity to explain some historical innovations, such as Unix, TCP/IP... as a lot of students are now born with Internet and are (mostly) dependent to the Windows world only :-)
C++ is my next step, as it ads the object oriented programing paradigm.
My final step is Java. Some arguments were cited in previous answers. I would add that Java offers the opportunity to teach event programing (GUI) without using an external SDK, as the GUI components (SWING) are embedded in the language specifications. It is also an opportunity to teach some fundamentals of Just in Time Compilation (Hot Spot), parallel programing,...
I think C is ok, it teaches the students to grasp some basic concept of computer.. But it's hard for novice to write complex program. For example, if you wanna to use stack,queue or string, should the students make it from scratch?
So, we should teach students some c++ STL which includes some library that help the students to write complex program.
My question is completely about an introduction to programming. For data structures, I think C bothers programmers with itself that makes learning complex data structures very difficult. As you mentioned, C++ or Java like languages are better for those structures
At the beginning Pascal is a good, easy and allows you to understand the basic principles of programming. Python as possible. It is also worth thinking about the introduction of R.
I cannot endorse Python enough, especially for the class you describe. It is an easy language to learn, but is also increasing in popularity in industry (my company utilizes it extensively and as do a surprising number of other corporations I've dealt with), and there is also the Cython module if speed is a concern. In short, it's not just easy to learn, but can also be a programmer's main and sole language without really limiting them in any way in terms of capabilities.