views:

355

answers:

7

I was reading this article earlier regarding C/C#/PHP being dropped as first languages in Advanced Level (pre-university) Computer Science courses in the UK:

http://www.theregister.co.uk/2010/05/12/aqa_c_php/

It also goes on to say:

Teachers planning to use Java are warned that many universities are considering dropping it from their first year computer science programmes, "as has happened n the US".

Does anybody know, what the language predominantly used in US first year Comp Science programs is currently?

+15  A: 

It really changes from school to school, and certainly across regions.

Just for example, I studied and taught at Carnegie Mellon (top-4 in the US), and Java was prevalent. My alma mater is the Technion in Israel, and we did C/C++ the entire way. Folks studying information systems at the Technion, on the other hand, started with Java.

Here's the real situation: The choices that schools make depend on equipment, incentives from manufacturers, market conditions, and tradition.

Let's start with equipment / software and incentives

Java is free and the popular IDE (Eclipse) is free (and used to be pushed by IBM), and the equipment is cheap (Any old Linux machine would do). Now Oracle is pushing Java again along with its DB solutions.

Microsoft is pushing C# and XBLA and all that stuff so they offer universities cheap site licenses to Windows and Visual Studio to make C# more popular. Don't underestimate the willingness of a school to switch vendors because of a free MSDN license. I also think that Microsoft is offering additional incentives to the schools to use Visual Studio such as scholarships and some faculty awards. On the other hand, many students now have Macs without Windows licenses, so that causes problem for VS adoption since many students want to work from their rooms.

Many of the older languages (VB6, Pascal) use outdated compilers or environments that don't work on most student's machines or require too much installation. For the life of me I have no idea where one would get a site license to Turbo Pascal today if it even exists. I'm sure many high schools with old computer labs use these languages because they can't run anything newer. Universities, in general, tend to have better labs and more updated languages.

Many of the newer languages (like Python) and older languages (like C), don't have a single IDE. This creates a huge problem for instructors since students always manage to dig up all the incompatibilities nobody knew about. Forcing everyone to use the same IDE makes things simpler.

PHP getting dropped is not a surprise - I can't imagine deploying and testing student programs and the security holes this could cause. Also, I'm not sure how one automatically tests PHP programs. There is also a market "perception" of PHP as not a serious enough language. I don't want to start a flame war about whether it is true or not, but we all know that this camp exists.

Market conditions vary from state to state. I think most companies today use VM or "far from the wire" based languages (like Java/C#/Scripting languages). However, many companies that do need "the wire" use C/C++/ASM. In areas near large defense/aeronautics/semi companies, you will see more schools teaching these languages. For example, my alma mater taught primarily C and C++ and still does because Intel and other EE-related companies were major employers and much of the faculty came from there.

Beyond all this, many CS departments make languages choices based on where they evolved from. As a rule of thumb, departments that came out of Math tend to first teach languages like LISP/Fortran/Python/ML. Departments that came out of Electrical Engineering or Computer Engineering tend to first teach low level languages like C/C++. Freshly formed or departments or departments with a heavy software engineering focus will tend to be Java/C#.

As for the actual article: I have to admit that I am really surprised that the educational system in the UK allows high-school curriculum to have such a variance in languages. Usually state boards are more restrictive and try to obtain a uniform curriculum country-wide. I am willing to bet that some of the concern had to be with what the teachers know. If many college graduates don't know C, then many new teachers will not know it either, etc. The goal of high-school curriculum is to teach fundamental CS concepts. We studied in Pascal (back in the early 90s) and that was good enough. Most of our curriculum focused on pointers and data structures, I'm surprised one can even pull them off in some of the "recommended languages".

Uri
Agreed. I doubt we could come up with a language that was used in even 30% of first-year college courses across the country. Too many schools, and too many languages.
Brian Sullivan
In my alma mater, each department was able to choose a different language for its intro CS. The math people tended to do Lisp, Physics tended to do Fortran, EE and CS did C, while IT did Java.
Uri
@Uri, I love your post. However, I think your argument on Python is a little weak. Python has a standard REPL, and many similar interactive interpreter comes out of that. A popular IDE for Python is PyDev on Eclipse, and perhaps the second choice being Komodo IDE. In Java's case, there's Eclipse, but I remember many others - jEdit, BlueJ, JCreator, you name it. Having a single IDE isn't a feature or reason to use Java. Many universities here in Australia use BlueJ, in fact.
Xavier Ho
Uri
@Xavier: As for Python, I fully agree. PyDev is now free and is an excellent environment. Until several months ago licensing was a problem, I couldn't even use it at work. Installing some libraries is a nuisance with Python though. It's not as simple as dropping a JAR or DLL.
Uri
@Uri: I didn't say having more than one IDE in a teaching environment didn't matter. `:]` I said Java doesn't have the "advantage of having only one IDE." - which is nonsensical.
Xavier Ho
+1  A: 

Good question. I remember reading a thread about this topic in a TopCoder forum thread one time and one of the top algorithm competitors there suggested that the CS curriculum should start with Assembly instead of the typical JAVA or other high level language that most do currently.

It's a pretty radical concept, and may seem like blasphemy in some ways, but the more I think about it the idea does seem to have merit. I mean, Assembly is where you learn about where the real magic happens, that is, what's actually happening under the covers, etc. You learn about addressing modes, registers, OP codes, pointers (through direct vs indirect addressing) and all kinds of other useful stuff.

If you can grasp Assembly, then it can be a pretty good indicator that you're well cut out to succeed as a CS major. Conversely, I remember that Assembly was the third curriculum course at my university, and after Assembly there were about half as many people left (maybe even less) as before. It was one of those "weed-out" courses.

I guess it'd be good if those folks could find out earlier that CS is not something they really have an interest/aptitude for. That's not to say that somebody who doesn't do well in Assembly can't be a great software developer or even CS major, but I think it's one of those courses that really gets to the meat and potatoes of what programming is really about in its purest form.

Anyway, I'm still not 100% sold on the idea, but I think it makes for an interesting SO discussion :).

dcp
+3  A: 

They taught Scheme to all the first-year CS students at MIT. The argument for that was two-fold. One, since it is not what one would consider a popular or well-known language, it would create a more level playing field for everyone. Some students went to big high schools and took AP Comp Sci classes, etc. Others did not have those opportunities, and therefore shouldn't be penalized their first year for it. The second argument was that some of the more abstract concepts in language syntax, lambda exp etc. could be more easily taught using a relatively pure, simple language like Scheme. Not sure if it actually worked out that way. I've heard mixed responses from former classmates and friends both for and against.

weiy
They changed to Python a few years back.
Paul Nathan
ah, guess they have to keep up with the times. :)
weiy
+2  A: 

My alma mater (U. of Minnesota) used mostly Java for many of the reasons already stated. But our 'official' first language was Scheme, to help us think like a computer!

eskerber
Wouldn't assembly be the language you'd learn first if you want to *think* like a computer. Scheme (and its LISP-like cousins) helps you *think* like a *compiler* (or an interpreter), IMO.
Santa
+1  A: 

In my university, University of British Columbia, it was mostly Java with some Scheme/Prolog thrown in to broaden the mind. But universities don't teach programming, they really just give you a background that will provide a foundation for a career in computers (note how broad and fluffy that is.) Everything I learned about software engineering, I had to teach myself. The scary part is many CS majors think they'll begin a career in software engineering, and they often don't have a clue what they're getting themselves into.

Eloff
I agree, I think that Uni gives you the basic knowledge and tools, and its up to you to practice and study and learn. I also agree with the second part, a friend of mine entered the CS major because she thought she would learn how to build/design webpages.. by the time she realized her mistake she only had 1 year left, so she finished, but she doesnt even like CS.
Francisco Noriega
I wonder if it wouldn't be better to start a CS degree with a year of hardcore programming, and then go back and teach the theory. It would put all that stuff into perspective, and at least you'd know whether you wanted to do it after the first year. That's how I started because I took a year off after high school in which I did just that.
Eloff
+2  A: 

The US does not have a standardized(formal or informal) language for teaching computer science I.

My opinion is that CS 1 should be assembly and CS 2 should be Scheme (or reversed, whatever); then most of the rest of the curriculum should be C++ and a scripting language.

That provides the needed backgrounds in high-level computing and low-level languages.

Paul Nathan
+1  A: 

similar: http://stackoverflow.com/questions/644099/what-programming-languages-do-the-top-tier-universities-teach

University of California, Berkeley

  • Scheme (Intro to Symbolic Programming)
  • C (Operating Systems and Systems Programming)
  • Java (Data Structures)
  • C++ (Computer Graphics)
  • Matlab (Matlab for Programmers)

Carnegie Mellon

  • Java
  • C
  • ML
  • x86 Assembly & Heavy use of C

MIT

  • C
  • C++
  • x86 assembly (for the Operating Systems class)
  • Java

Princeton University

  • JJava
  • JC
  • J86 assembly
  • Java
  • Python
  • awk
  • ChucK
  • Javascript

And more... add your own.

Glennular