views:

6809

answers:

81

I'm constantly being inundated with articles and people talking about how most of today's Universities are nothing more than Java vocational schools churning out mediocre programmer after mediocre programmer.

Our very own Joel Spolsky has his famous article, "The Perils of Java Schools."

Similarly, Alan Kay, a famous Computer Scientist (and SO member) has said this in the past:

"I fear — as far as I can tell — that most undergraduate degrees in computer science these days are basically Java vocational training." - Alan Kay (link)

If the languages being taught by the schools are considered such a contributing factor to the quality of the school's program then I'm curious what languages do the "top-tier" computer science schools teach (MIT, Carnegie Mellon, Stanford, etc)?

If the average school is performing so poorly due in large part the languages (or lack of) that they teach then what languages do the supposed "good" cs programs teach that differentiate them?

If you can, provide the name of the school you attended, followed by a list of the languages they use throughout their coursework.


Edit:

Shog-9 asks why I don't get this information directly from the schools websites themselves. I would, but many schools websites don't discuss the languages they use in their class descriptions. Quite a few will say, "using high-level languages we will...", without elaborating on which languages they use.

So, we should be able to get a pretty accurate list of languages taught at various well known institutions from the various SO members who have attended at them.

+27  A: 

MIT

MIT used to teach its intro CS course (6.001) in Scheme (the textbook is still online), but that course was last taught in fall '07. The entire CS curriculum was restructured around then. Now, the new intro course (6.00) in Python. Other languages taught/used in various courses include:

There are probably a few more taught in some of the smaller, more advanced classes.

eduffy
I know for a fact that they also teach Scheme and Python. I'm looking for answers that encompass the languages a particular university teaches, not just one.
Simucal
As far as I know, they used to teach Scheme in their CS introductory course but they have switched to Python instead.
Mehrdad Afshari
If anyone knows better, feel free to edit any universities post to include the correct languages.
Simucal
When I was there a few years ago, I had classes in Scheme (2), Java (2), and C++ (1). However, MIT's CS curriculum just went through a major revision; this post should be edited by someone familiar with the current one.
Amanda S
Christopher W. Allen-Poole
MIT changed their introductory CS course from SICP (scheme) to a robot-oriented course in Python. You can find the rationale here - (http://wingolog.org/archives/2009/03/24/international-lisp-conference-day-two)
Pranav
IIRC, UC Berkeley still teach Scheme in their CS61A course. (videos at http://webcast.berkeley.edu))
Lucas Jones
A: 

Sacred Heart University (not top-tier) teaches:

  • C/C++
  • HTML/Javascript
  • Java
  • VB.NET/C#
  • ASP/ASP.NET
  • MsSQL
  • Actionscript 3.0
St. John Johnson
A: 

Marshall University's IST program routinely teaches VB.NET, C++, PERL, PHP, and different flavors of SQL. Marshall University's CS program primarily teaches in Java.

TheTXI
+4  A: 

Languages I've used in Computer Science @ University of Waterloo in Canada:

  • Java or Scheme (first year onwards)
  • C and C++ (second year onwards)
  • SQL using DB2
  • MIPS assembly (Operating systems class)
  • OpenGL (upper year graphics classes)

Those are the only ones we had in class discussions/tutorials about.

Upper year classes with programming assignments (such as advanced algorithms) generally allow you to code in C, C++ or Java.

Ben S
+7  A: 

Northeastern University

  • A Scheme variant
  • Java
  • Some C; some MIPS

Undergrads are introduced to Scheme first. Many of the principles and problem solving methodologies learned during that course are applied to the later Java courses.

First year Master students take a mandatory course in Programming Design Paradigms.
Students are exposed to functional programming through small subsets of Scheme Language(Beginner Student Language ...). In the Second half of the course, the students are exposed to Object Oriented Programming through a language called ProfessorJ.

Principles of Programming Language uses Scheme exclusively. The course studies various aspects of programming language design.

Other graduate courses at Northeastern are language agnostic. For example, in the Algorithms course, the students are encouraged to use languages like C and C++; but many choose to use Java and similar OO languages like Ruby.

tehblanx
Thank you for your input
Simucal
Northeastern where? Massachusetts or Illinois?
James McMahon
Out of curiosity, what variant of Scheme do you use?
Thr4wn
Northeastern in Massachusetts.The Scheme variant is called PLT Scheme - Here's some more info:http://plt-scheme.org/index.html
tehblanx
That's funny -- in my programming language design course BITD, we had to code in every language we studied. So we wrote FORTRAN, COBOL, Snobol, Lisp, and APL (yes, this was very long ago). Of course, for our actual implementation work, we used Pascal...
TMN
I don't think I would want to implement languages in Pascal :) and do you think asking to students to code in every single language that they study in the course is even feasible? I think asking them to implement a flavor of lazy evaluation and understand the pros and cons of that particular design decision is far far more important than writing a toy program in Haskell.
kunjaan
+4  A: 

University of Michigan

  • C++
  • Assembly
  • Your choice in some higher-level classes
TenebrousX
I thought they were just C, or did they change that recently?
Neil N
Most use C++ now, though some still use C or a mix of C and C++.
Miles
I took the intro course and it was c++
jle
+16  A: 

The University of Waterloo computer science program uses (in rough order of introduction to students)

  • Scheme (just in first year, for the "learn how to program" courses, although many people use it beyond first year when they can)
  • C++ (there's one poorly taught course exclusively on C++, but this along with Java are the main languages used by students).
  • C (mostly for the two OS courses)
  • Matlab (mostly for computational mathematics courses - ie. computational mathematics, computational linear algebra, medical image processing, etc.)
  • Java (mostly for GUI applications)

Many of the upper year CS courses allow for choice of language. Haskell is a surprisingly popular language among students. Also, MIPS assembly and x86 are used in a couple of courses.

The engineering programs as far as I know use mostly C#, with a bit of C++ thrown in (and definitely no Scheme).

mdkess
Engineering starts with C# in first year, but uses C++ for data structures in 2nd year, then asm (I think 68000) for the low level course, and then asm + C for the OS course. Then there's VHDL, which I'm personally looking forward to.
megabytephreak
When I went to Waterloo the first year CS courses were in Pascal, second year was Modula-3 and Scheme, and third and fourth year depending on the course (most used C, and allowed C++. A few specified a certain language, like the AI course which used Scheme and Numerical computing which used Matlab). I wouldn't say these courses taught the language in question so much as they required that you learn them well enough to use them for the assignments.
Laurence Gonsalves
I'm a physics majors, so my answers are a bit different than the CSers. Our scientific computing courses use C++, digital electronics in Motorola 6800 assembly and some AMATH courses in MATLAB. The upper year computation courses (scientific computer and stellar evolution) allow your choice of language.
Joey Robert
Java is a horrible choice for gui programming!
Jim In Texas
http://compsci.ca/v3/viewtopic.php?t=21723 has some discussion points on changes that Waterloo has had in their first year language choices.
JB King
Engineering programs did not use C# at all. Was mainly C/C++/Java.
Floetic
A: 

University of Idaho - not top-tier

C++ for first semester, C++/C for second semester/data structures Flex/Bison for Programming Languages (plus exposure to several others) C for Operating Systems/System Software There are optional C#, Java, Python, and VB classes Higher classes are in anything - primarily C/++

UI is essentially a C school these days; we never went past "C with Classes" in terms of C++ when I was an undergrad.
Paul Nathan
+2  A: 

Informatic Engineering, University of Buenos Aires

  • C / C++
  • Java
  • (optional) C#
  • (optional) Smalltalk
  • (optional) Python
  • Perl
  • Shell Script
  • MIPS
Tom
I'm from Buenos Aires, and i'm going to UBA(University of Buenos Aires).
Agusti-N
I hear a lot of good things about this school actually from our ACM meetings.
KingNestor
+3  A: 

I graduated from Michigan Tech, which, while not a top-tier CS University (top 50 in Mechanical, Civil, Environmental, and Materials engineering, FWIW), is supposedly regarded as having a fairly decent CS program.

The intro courses (CS 1 and 2, Data Structures) were in Java. Next was a "C++ for Java Programmers" course which introduced C++ and some GUI programming with QT. Operating Systems was taught in C++, and Systems Programming used C, though we were pretty much just expected to teach it to ourselves (K&R was a "recommended but optional" textbook). In all of these classes we used vim and Makefiles on Linux and Solaris machines. In Computer Architecture we learned MIPS assembly, and in Programming Languages we used Scheme (and a very tiny bit of Prolog, pretty much "This is Prolog, it's nifty but you won't see it again unless you take AI").

As far as electives go, I took a databases class where we were taught SQL (MySQL specifically), though most of the class was more concerned with theory (relational algebra, normalization, ACID, storage, etc.) We also touched on accessing databases with JDBC and Perl's DBI. Our final project, which was pretty much "do something neat that makes use of a database", could be written in whatever language we wanted. Other classes were similar; use whatever language we feel suits the problem best, just as long as we provide instructions and everything needed to build and run it on the lab machines (Linux). System/network administration classes used a fair amount of bash scripting. In addition to C, C++, and Java, I decided to turn in a couple of assignments in PHP, several in Perl, and a few in Python, when they were appropriate for the job.

Adam Jaskiewicz
+18  A: 

Carnegie Mellon

  • Intro to Programming - Java
  • Unix Programming - C
  • Principles of Programming - ML
  • Operating System Design - x86 Assembly & Heavy use of C
  • Data Structures - Java
This is how my university handled business when I was going through. (Kansas State)
David McGraw
This is essentially what UNH does
SP
What text does the Unix Programming class use?
Vince
+65  A: 

I'm constantly being inundated with articles and people talking about how most of today's Universities are nothing more than Java vocational schools churning out mediocre programmer after mediocre programmer.

They have always churned out a lot of mediocre programmers, a handful of good ones, and a few brilliant ones. Only the language has changed.

Sarah Mei
I'm curious what the language everyone was frowning at before Java was? Were they saying, "Todays Universities are no more than COBOL vocational schools?" or something similar?
Simucal
Pascal was very popular for a while.
dmckee
People seem to have an attachment to "their" language. So if you just look at the adoption curve for any given language, you can probably work out a place where it becomes popular enough to be noticeable to the users of the current predominant language.
EBGreen
The question is silly. The language is almost meaningless. the concepts that that are taught using them is the important part.
Ed Swangren
I agree with this answer completely. People complaining about Java are justified, but for the wrong reasons.
Unknown
@Ed Swangren, Ok, you show me how you would eloquently teach functional programming concepts to your students with C. I think saying the languages don't matter is silly, when they obviously do. Concepts taught in a vacuum aren't the same as concepts learned with a concrete language.
Simucal
@Ed Swangren, They certainly aren't the only thing that matter, but those concepts are going to be delivered in a form of a language and if you only get exposure to a single paradigm language, you don't think that matters?
Simucal
Because the curriculum doesn't really matter. Universities cannot *create* brilliant programmers. Whatever the curriculum or language being taught is, there will always be many mediocre programmers, a handful of good ones, and a few brilliant ones.
Chris
+1. I agree completely.
DarkSquid
That's a good point. I have taught at both CMU (where Java is taught) and at the Israeli Technion where C and C++ are taught. Both are top tier schools, and in both I've met some brilliant programmers, and some others who had a good understanding of CS but not much interest or skill in programming. The langauge doesn't matter.
Uri
I have to agree with Simucal somewhat. The workplace has become increasingly competitive and there are far too many undergrads who have had little or no experience writing code before they enrolled in the university. One cannot ignore the language completely. It's like trying to teach people how to paint while completely ignoring the properties of the chosen medium (be it oil paints, acrylics, etc). While there are general painting principles applicable to all mediums, one really needs to master a given medium to really see those principles firsthand and appreciate them.
A: 

McGill University.

I've done the Computer Engineering program there. The following list were the programming languages used for these classes:

  • Intro to computer engineering: C, ASM
  • Intro to computer science: Java, SML (functional programming)
  • Microprocessor Systems: C, ASM
  • Intro to software engineering: Java

No visual basic, no c# (although project teams were allowed to use them. They were simply not thought directly). I know some computer science students learn python, perl, bash scripting... In computer engineering, learning them was a plus, but not officially thought. They assume you should learn it yourself I guess...

Wadih M.
A: 

University of Vermont:

  • Java
  • C++
  • OCaml
  • MIPS Assembly
  • VB.NET (optional)
  • PHP (optional)

The first four languages were taught in classes considered part of the standard required CS curriculum. There were some optional elective CS classes that had you use other languages like VB.NET and PHP. Once you got to the higher-level classes, most of the teachers would give you a project and let you choose how to do it (i.e. you can pick the language).

Chris
A: 

University of Lund

  • Java
  • C++
  • C
  • Haskell
  • Python
  • MIPS Assembly
+6  A: 

University Of Southern California (as of 2006, at least):

  • C++ for the majority of CS courses (i.e. everything not listed below)
  • C for data structures course
  • Java for survey course / part of intro to OOP
  • M68k ASM for intro to architecture
  • MIPS ASM for other architecture/hardware courses
  • C# for databases course (but this may have just been the prof)
  • Prolog for part of the AI course

VB, PHP, etc only show up in the information technology courses which are not part of the CS curriculum.

Sadly, no functional programming whatsoever at the undergraduate level.

Tyler McHenry
+1  A: 

Some University of Arizona computer science courses:

  • Intro to Computer Science: Java
  • Intro to Object Oriented Programming: Java
  • Computer Architecture and Assembly Lang: MIPS
  • Programming and Unix: C
  • Comparative Programming Languages: Haskell, Prolog, and Ruby
  • Starting summer of '09: C++ and Python.

For further information, schedule of classes (fall and spring offer different courses)

Java is the introductory language, but after Intro to Object Oriented Programming, it doesn't come up very often. There are about 3-4 CS courses that require Java in our curriculum. Many upper division courses require C.

Spencer
+1  A: 

I went to the University of Toledo.

We learned the basics of Imperative programing using C++. The next course intorduced us to Object Oriented programming still using C++ (I believe it is currently taught in Java). After that it didn't matter what language we used.

The professors I had at UT focused on understanding the underlying paradigms and not so much the language you used to implement a solution. Once you understand the underlying principles, it doesn't matter what language you use: just pick up a hand reference to see if you should end your statement with a semi-colon or not.

Which language(s) you know doesn't impact how good of a programmer you are. Having exposure to the various paradigms (object-oriented, functional, imperative, declarative, logic,...) will certainly help round out your tool set, but that won't make you a great programmer. What I'm trying to say is that a good CS program doesn't teach "languages", it teaches "concepts" and let you use whatever tool needed to demonstrate your understanding of those concepts.

Languages I used at Toledo: - LISP - C/C++ - Assembly - Java - Python - SQL - Ada - VSE (I'm not sure if anyone that didn't have Dr. Ledgard knows about that one) - C# - HTML / CSS / XML / JavaScript - Visual Basic - The one we made up in our compiler design course.

mlindegarde
Functional programming in C++? Perhaps you meant Structure Programming?
jmucchiello
Yes, you're right, I made a mistake there. C++ is a Procedural/Imperative language: not a Functional language. LISP would be a Functional language.
mlindegarde
A: 

University of Minnesota–Twin Cities (graduated 2000)

  • Scheme for the required intro courses using SICP
  • C for the the required intermediate/Advanced courses
  • Some sort of assembly language for the computer architecture/engineering course

Along the way I also remember having to briefly use prolog, tcl/tk, html, VB, and C++ for various class projects.

I should also mention that the languages were never the focus of the classes. Instead they would teach us concepts (algorithms, data structures, language design, etc.) and we would be required to learn the specifics of the language on our own.

JMM
A: 

Is City university "Top Tier?" City University It came in the top 50 here

Anyway for a university with more business and computing students than computing students I've found that they have a reasonable selection of Languages:

First year: Two modules of Java programming with a bit of assembler in Systems Architecture and a bit of prolog in Computation and Reasoning. (That includes the business students)

Second Year: everyone has bit of UNIX shell scripting in Networks and Operating Systems, people doing computer science had a module of Haskell including stuff like higher order functions (our lecturer is on the design committee for Heskell' ) and Java/JavaCC in langauge processors, other branches of Comptuer Science do diffent stuff, the Games-Tech people are doing C++ I'm not sure about others.

Third Year: ask me in a years time ;)

Benjamin Confino
+13  A: 

Princeton University:

  • Java
  • C
  • x86 assembly
  • Perl
  • Python
  • awk
  • ChucK
  • Javascript
  • (etc.)

Specifically, the typical CS student starts with COS 126, the intro class, which teaches Java, then takes COS 217, which teaches C and basic x86 assembly language, then COS 226, which teaches algorithms and data structures in Java. Then there are various upper-level courses: COS 318, Operating Systems, uses C and assembly language; COS 325 on digital signal processing uses mostly C and ChucK, occasionally Matlab and/or Java; COS 333 is a mishmash of various languages including Perl, Python, awk, C, C++, Linux shell scripting, or whatever the students want... I think there are other classes that use primarily C++, e.g. computer graphics, but I'm not personally familiar with those.

(Almost forgot: there's also COS 109, an intro class intended for non-CS students, which uses Javascript and HTML.)

David Zaslavsky
+2  A: 

I studied Information Engineering and Management at the University of Karlsruhe, Germany. IE+M is actually only 40% economics and 20% law, so only 40% CS as compared to a pure CS degree.

The standard language used for demonstrating programming in general, as well as OO was Java. In my case that was before Generics, so generic programming was demonstrated using Pizza, which is a superset of Java adding, among others, generic programming.

Functional programming, type inference, pattern matching, currying, partial application were demonstrated with Gofer, an early implementation of Haskell.

Scripting, dynamic typing, high-level programming were taught using Python.

Assembly programming was taught using MIPS assembler.

In one course we had to implement a simple CPU, then write some micro-ops in binary code, some assembler ops in microcode and some simple programs in assembly. However, this was all done on paper, there was no simulator for the CPU.

We had to write some simple programs in lambda calculus, and for a universal Turing machine, also solve some problems with Semi-Thue systems, Markov systems and µ-recursive functions. There were some minimal Turing-complete languages, like the WHILE language, which only has the WHILE-statement, the constant 0, the SUCCESSOR function and one single variable. There were also some not Turing-complete languages, like the FOR language (you can probably guess).

In our databases course, we used SQL and OQL, and also some XML query language (I don't remember if XQuery existed yet).

In some course we had to write XSLT.

In some of the courses I didn't take there is C and x86 assembly. Also, the Sather-K language is designed in Karlsruhe, so some profs use that. One chair has a cooperation with Microsoft, and used an early preview of C#.

We did some Prolog.

All in all, I think there was a good mix from pretty much every paradigm except language-oriented programming / metasyntactic abstraction (IOW: Lisp was missing).

Jörg W Mittag
+15  A: 

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)
Thanks Sam, for reposting this.
Simucal
@kjack, nothing interesting about it considering I live with the guy. It isn't his first post either, if you scroll up. He just doesn't have a ~registered~ account. A lot of people don't bother with registered accounts and it is a perfectly valid way to interact with the site.
Simucal
@kjack, So every question or answer he posts is his "first". I'm also not sure you actually know what "habitual" or "uncanny" actually mean.
Simucal
@Simucal, Ignore kjack, he is obviously trolling. On a more on-topic note I took Intro to Symbolic Programming at Berkeley for non-credit and it was a fun course!
KingNestor
I loved Berkeley's SICP course.
kunjaan
+8  A: 

Good developers will not limit themselves to what a University teaches. The kind of developers I want to hire are the ones that spend their free time writing programs that interest them, learning the languages they need to get those projects done and basically pushing the boundaries. The kind of developer I don't want to hire are the ones that got a 4.0 in their CS program, but didn't write a single line of code that wasn't graded in four years.

That said, my undergraduate University, the University of Missouri-Rolla (now the Missouri Institute of Science and Technology) still teaches C/C++ to first year CS students and continues that throughout the degree program. Second/third year students take "Computer Organization" which introduces Assembly and low level architecture. It's not until third/fourth year that elective classes introduce other languages, like Java, as part of classes like User Interface Development, etc.

Personally, I'd put that up against any "top tier" school.

jeffamaphone
UMR is a good school (MST, whatever). I'm a fellow Missourian. I compete against them regularly in programming competitions at your University.
Simucal
Couldn't agree more. No school alone will ever compare to someone actually being personally interested in what he/she does. Of course, a good university may teach you a lot of stuff, but the best ones are always the ones that spend a lot of their spare time to do relevant stuff.
Arve Systad
+13  A: 

The good universities don't teach languages. They teach concepts. After the first "intro to computers" course, you're expected to pick up the language du jour by yourself from the labs.

Glenn
And Scheme apparently is a very good tool for this. You can learn the language at one sitting pretty much and yet it is powerful enough to demonstrate a wide range of concepts/paradigms
kjack
i voted you up but I think Delilah might have downvoted you
kjack
I agree with ya!
Milhous
I think you need to have a good understanding of at least one deep language.
Joe Philllips
For college courses, there is nothing wrong with teaching programming languages as long as they are with the concepts. After the first course or two, you are left to learn more on your own, but the very first course they do show what is going on.
jle
+1 since languages come and go, concepts outlast them
Chad
A: 

Milwaukee School of Engineering

In a typical Software Engineering track, languages will be encountered in the following order:

  • Java (Basics)
  • ASM
  • C
  • C++
  • SQL
  • Back to Java
  • PHP (optional -- web development elective)

At this point, students will be involved in a Software Development Laboratory course where they are challenged with real-world client projects. The languages learned/used here are subject to the requirements of the project.

After this are the Senior Design projects; languages learned/used are again subject to the requirements of the project.

As an MSOE graduate, I just wanted to add that in many courses, the labs don't require you to pick any one language. You're fairly free to implement your projects in whatever language the professor is willing to accept. This allows them to focus on concepts rather than languages.

http://resources.msoe.edu/cdb/programs.php?progCode=SE2.5

Cory Larson
A: 

Rensselaer Polytechnic Institute (RPI)

  • C
  • C++
  • Java
  • Python (Optional)

Students start with C/C++ and move up to languages with automatic memory management after they have a good understanding of how memory/pointers work.

Varin
A: 

University of Western Ontario - My school. It's hardly a top tier CS school but it is consistently rated as one of the top 5 universities in Canada.

  • Java (1st year)
  • C, Shell Scripting (2nd year)
  • C++ (3rd year)
  • Scheme, Prolog, XSLT (3rd year programming course)
theycallmemorty
A: 

The University of Advancing Technology (http://uat.edu/)

  • C++
  • C#
  • Visual Basic
  • x86 assembly
  • PBASIC / SX/B
  • SX28 Assembly
  • Verilog
  • PHP
  • ASP.net
  • Flash
  • Java

They teach a bunch of other classes as well, this may not be a top tier university, just what I am currently going through for my Software Engineering degree. If you want more information, their website is actually pretty good, just look past the fact that the Software Engineering degree is now known as Advancing Computer Science degree.

X-Istence
+7  A: 

UC Berkeley

Lower Division

Scheme (CS 61A - Structure & Interpretation of Computer Programs)
Java (CS 61B - Data Structures)
C (CS 61C - Machines Structures)

Upper Division

Java (CS 162 - Operating Systems and System Programming)
Java (CS 164 - Compilers and Programming Languages); C++ used for the first time this semester
Python (CS 188 - Artificial Intelligence)
C (CS 186 - Databases)
C (CS 161 - Security)

weicool
Did they change it recently? When I took 188 (Fall 2005), it was still in LISP.
executor21
A: 

At Michigan State University, it is as follows:

100 level:

there is only one programming class, technical programming (usually for non CS majors)- matlab

200 level:

introductory programming- python

introductory programming 2- c++

database programming- python,SQL,Javascript,AJAX

300 level:

computer architecture- SPARC assembly, C

object oriented design- c++

data structures and algorithms- c++

From there the rest are 400 levels, which usually let you have some flexibility as to what you want to program in.

I am very impressed with their choices.
ojblass
+23  A: 

Everyone is saying that Java has opened the floodgates to mediocre code monkeys. This is true, but not for the reasons being cited here, that it is too easy and thus unsuitable for teaching CS.

I would argue that Java is too similar to the last generation university teaching language: C++ (Look at Java generics and C++ templates for example). And this is not a coincidence.

Java is first and foremost made for the industry which has lead to its widespread adoption. Here are some points to consolidate this fact:

  1. Java was designed to have similar syntax to C/C++ to woo the older generation while making it easy for the new generation to replace them.

  2. Heavy emphasis on contractual black-box programing with interfaces. This makes it easy to fire the person who finished his module and then outsourcing the rest of the work to India or fresh college graduates.

  3. Sun wants to make money.

Who is to blame for the influx of idiots? Industry. Industry is responsible for the commoditization of CS majors/programmers.

You have all heard ever so often on the news and Slashdot how there is a perpetual lack of programmers that they even need to hire foreigners on H1-B visas.

Colleges then teach Java because their students need jobs in order to donate or even pay for school.

Unknown
Interesting points! +1
Simucal
+1. I'd give you another +1 if I could for that nice “... the news *and Slashdot* ...” burn.
Cirno de Bergerac
The problem with java is that it is *not* similar to C++. It is similar to C. It throws out almost every lesson learned in C++. C++ templates and Java generics are an excellent case in point. C++ templates are actually useful, and enable an entirely new programming paradigm. Java Generics are syntactic sugar over void pointers *as you'd expect to see in C*
jalf
+13  A: 

When I was at Cornell (#6 on your list), ~8 years ago, they didn't "teach" any programming language, except maybe at the 100-level. They mostly just used a language, and you were expected to pick it up to do the work. The languages they used were:

  • Java (almost everything)
  • C++ (databases course, because the db guy thought it was necessary for dbs)
  • Scheme? (some advanced 200-level CS course, if you happened to go through that part of the program in a semester when they offered it; sadly, I didn't)
  • Gofer (a Haskell-like language; used for a couple weeks in the standard 200-level course)
  • Matlab (numeric computation and some graphics work)
  • MIPS assembly (computer architecture)

The programming languages I learned there were basically useless. Nobody's ever heard of Gofer. Nobody uses MIPS assembly. I've never used Scheme or Java 1.1 on a project outside of class (though I have used Common Lisp and Java 1.[2-4]).

But the point of the courses wasn't to teach me the language. When I'm staying up till 3am every night writing a compiler in Java for class, the point is not to learn Java, but to learn to write a compiler. The fact that they gave us a mission and we had to do the footwork to get there was better than teaching a language.

Being given the task of "write a compiler", you learn to teach yourself not just the programming language, but version control, error handling, refactoring, and so on. While Joel laments graduates who only know Java, I find that merely a symptom of not having learned how to learn, which is the true purpose of a university.

If you study physics and happen to use English when doing so, the point isn't to learn English well, but to learn physics. I don't think anybody would confuse physics with English. Would you ask what language top-tier universities teach physics in? ("I studied at Heidelberg, and we used German!")

Cornell also used Windows NT 4, but that's also completely irrelevant.

Ken
Except for Gofer, my language list is similar to yours. +1 for you insight about your school.
Simucal
That is essentially what I meant, to use in their curriculum. Anyone who has been to any University level school knows they aren't going to be "taught" the languages beyond the mere basic introduction in lecture 1 of the class.
Simucal
Please do not mention Windows NT 4 nor English again, since this whole question might get closed down as "not programming related." I'm kidding. Good point regarding teaching learning, but the gem of the answer is "and we used German!" Brilliant, truly.
Yar
dlamblin
I remember my roommate (physics major) complaining about one teacher he had. He taught in English with occasional German and Russian thrown in. He was a Russian-native who taught in East Germany through the 70s and early 80s before moving to America. He was a brilliant teacher to have teaching 400 level physics classes to undergrads but he tended to shift language while speaking without realizing it. The funny part was he would sometimes shift from English/Greek to Cyrillic/??? in the middle of an equation. The class could not always get him to see how that was a problem from what I heard.
jmucchiello
I had the same kind of professor once, only I always liked that approach. Gave me a chance to learn the important "keywords" in physics in german and french at the time. I always saw that as an advantage, although some also complained about it. Btw, problem solution: learn cyrillic ... it's not like it's nuclear science. It's only what 30 something letters (depends whose you're using) ...
ldigas
+1  A: 

I imagine that the programming language that universities would teach would be the programming language that you write the same programming language in.

Pedagogically speaking, I also imagine that universities would teach how to learn how to learn, and teach how to teach how to learn how to learn, and teach how to implement learning processes as mathematical functions.

Mark Stock
I only delve in the bottom tiers. I didn't go to university.
Mark Stock
I don't know where this misconception comes from, and I see this response a lot. While they do "teach you how to learn how to learn", the instructions you receive aren't given in a vacuum and different organizations use different languages.
Simucal
That is what is in question, what languages the student introduced to throughout their studies.
Simucal
A: 

University of Wisconsin - Madison

*Intro Course - Java
*Data Structures - Java
*Databases - C++
*Operating Systems - C
*Networking - C/C++

NoahD
+5  A: 

I found Oxford (http://www.comlab.ox.ac.uk) didn't really teach languages per se, the course taught actual computer science -- algorithms, data structures, a healthy amount of relevant mathematics, that kidn of thing -- with very little focus on the specifics of language. Where necessary, though, we got a little tuition in (and pointers to where to find more) Haskell, Oberon, and a fictitious MIPS-like language called "SPIM" -- pretty sure we ended up writing a C -> SPIM compiler in OCAML, eventually.

Nottingham (http://www.cs.nott.ac.uk) on the other hand seems much more focussed on producing Computer Science graduates who are already trained software engineers / programmers -- so there's a lot of focus on Java early on, with more 'exciting' languages like Haskell only taught in optional modules later in the course.

James Green
Based on recent interviews with several of their best graduates, The University of Texas at Austin resembles Oxford's approach. Their grads are very strong on theory, but less strong on actual application development and software engineering. Not surprising for a CS department that spawned from the Math department.
Jim In Texas
+1  A: 

University of Oslo (Norway):

The first semester one is taught Python if one is going to have a lot of math courses later in the grade if not one gets to learn Java.

All courses after that uses laguages, but do not use much time (or none) learning the language it self. One can then take classes that use Java, C, C++, Python, Common Lisp, Prolog, ML, ASM and matlab.

A: 

The one I graduated on teaches the same ones as Princeton + Prolog.

Does it matter?

80% of the people that graduate can't code their way out of a paper bag.

Vasil
+3  A: 

ENSIIE (one of the top French software engineering schools)

C - introduction to programming, system programming (Linux kernel)

Java - Object Oriented programming

PHP - Web programming

Ocaml - programming concepts

A bit of Prolog, a bit of Promula.

I think the school was careful to teach the concepts behind the language (hence the use of Ocaml, whose presence in the industry is homoeopathic at best). The courses on testing and the courses on compilers, which were not based on any programming languages, were probably as useful in making us good programmers as the other language courses.

small_duck
+5  A: 

I think you are somewhat confusing the issue here.

I don't believe the actual language being used really matters. After all, its really only a bunch reserved words (syntax).

If you take language X away from developers and suddenly replace it with language Y, you will be surprised how well they adapt and how short the learning curve actually is. My point is that its not the language syntax that needs learning, its the actual concepts... design patters, object-oriented programming, design & architecture, best practices, etc, etc. You can learn any of those concepts with any (OO) language.

Since today, most companies will choose to use a successor to C/C++ that is fully OO, that doesn't leave most Universities with much choice:

a) Spend millions of dollars for Window OS (a must, and limited to x86 only), spend millions more for their .NET tools & platform. Ultimately limiting your students to ONE platform, or

b) Spend close to nothing on Java, reuse existing platforms (don't need only x86), also teach them about a full range of OS's (Linux/Unix/Mac/Windows) and architectures that are non-x86 based.

As for your second part:

churning out mediocre programmer after mediocre programmer.

That is pretty much unavoidable... regardless of school or programming language. The reason for that (IMHO) is that programming is an ART contrary to common belief that it is a science.

You can give 1000 people a brush, some paint and a canvas. Just like you can teach 1000 people how to code and give them a computer.

The end result is that although everyone painted on their canvas, only a few were a master-piece, some where visually appealing, but most were just simply awful. The same is for the code... a few were extremely efficient and well written, some where just standard, but most was just poor unreadable/unmaintainable code.

So why do we hire most of these 'awful' students then? Because there is just too much damn demand for software programmers! That simple! And companies are raising salaries by stealing them away from their competitors, thus enticing another round of students to join up.

Jeach!

Jeach
Sean McSomething
+1. I mostly agree with what you say. Especially the painting metaphor. However, perhaps the exposure to the different language paradigms that exists that the "better" schools is part of what helps make them better? Functional/Imperative/etc. Rather than simply using Java for most classes.
Simucal
+4  A: 

Texas A&M University - College Station

Undergrad: CPSC 110 - Pascal; CPSC 113 - C++; CPSC 121 - C++; CPSC 203 - FORTRAN; CPSC 206 - C; CPSC 211 - Java / C; CPSC 221 - C++; CPSC 314 (Programming Languages) - Java/Haskell; CPSC 321 - Assembler; CPSC 435 - Ada

Grad: CPSC 601 - C / Java; CPSC 602 - C++

If it looks a little heavy on C++, keep in mind that Bjarne Stroustrup is one of the profs. :-)

Stephen Pace
Seeing Pascal and FORTRAN on the list makes me shudder. I had to do FORTRAN back in the stone age when I went to college. OK maybe not the stone age, but the punch card age.
Jim C
I'm an Aggie too. When I went there, CPSC 111 was in Java, but I've heard that's changed now.
dan04
A: 

Simon Fraser University

Often, whatever language we want. A few classes force Java, but also MATLAB, Python and C. I hear some classes use Lisp, and we offer at least one class on C++. That said, there are many students that only seem to know Java and then they struggle when they encounter one of these new languages. I guess I was fortunate to learn C++ as my first language in highschool. Oh, and my computer architecture class forced assembly language. So, I guess it's pretty hard to get a degree here without at least touching Java, C, and Assembler. The rest sort of depends on what you take.

Mark
A: 

Technion - Israel Institute of Technology (top-tier in its little fiefdom :)

In the early 2000s, intro to CS was focused on C programming. The next course in the chain introduces shell scripting and them moved to teach C++. Later OOP courses focused on C++ and Smalltalk. There was a programming languages course that taught Pascal, Prolog and primarily ML. Our AI course used Lisp.

At the time, C# or Java were not used, at least not formally, students were expected to learn these languages themselves for certain projects.

Uri
A: 

University of Florida (Not top Tier):

  • Introducion to Computer Science (Scheme)

  • Computer Architecture (MC68000 Assembly)

  • Data Structures (Allowed to use any language that runs on any of their servers)

  • Operating Systems (C)

This is very well dated but I was impressed with them allowing you to pick and chose what to use for the Data Structures course. The best programs should provide an opportunity to make choices about the languages that you learn.

ojblass
A: 

University of Texas at Austin (was ranked 9 or so, not sure where it is now):

Java for Intro classes and data structures/ADTs. I think the introductory classes used to use Scheme, but I think that scared too many people away from the program.

Haskell/C/C++ for the Programming Languages class

Java for Operating Systems

An assembly language class

Many of the electives used C and C++.

They also have one hour classes for each of the other big ones (Python, C#, Perl, LISP), but unfortunately I didn't take any of those.

There was plenty of theory in the required curriculum as well (discrete math mixed with programming proofs, automata theory, etc.).

I remember one professor speaking of a "departmental catch-22", where although 95% of the people graduating went straight into industry, they still geared the program to the 5% going to graduate school.

They were (and probably still are) really anti-Microsoft - mostly Linux labs, no VB classes, and no C# for quite a while.

David Hodgson
A: 

At its inception, Transylvania University had a bit of history with Carnegie Mellon's CS department, though things have changed in the last 50 years naturally. I was pretty happy with the teaching style there.

Logic and Problem solving - C++

Data Structures - C++

Computer Organization - MIPS assembly

Theory of Programming Languages - LISP, C, Prolog, Java

Operating Systems - C++ required for programming NachOS

Other than those requirements, you can pretty much hack in any language you please. Most students stick to C++ however, since it is the language taught in the first two programming courses. My adviser, however, would probably have heckled you if you wrote in Java. Especially anything math intensive. Though the curriculum has gotten easier since I graduated, (allowed students to opt-out of two of the more difficult classes and cut two semesters of discrete math to one) it's still primarily a school that teaches computer science as science, not a vocation.

Stuart Branham
A: 

Imperial College London teaches Haskell for the first six weeks, an in-house imperative version of Java called "Kenya" for the next four, and then in the second term, Java and Pentium Assembly. These aren't the only languages you need to know to get through the course, but you're expected to pick up anything else on your own. Everything after the first year either requires you to know a language, or teaches concepts and lets you pick the way you implement them.

Samir Talwar
A: 

The Australian National University:

It was Haskell for quite a while, then they changed to Java, but that lasted only a couple of years, and now I think they're back to Haskell (along with various other languages for specific courses, such as Ada, PHP, Korn shell, etc.).

Sam
A: 

There was one course at my university (Monash University) in which we were taught to program in Lambda Calculus. It took us just a few minutes to master the syntax.

Jacques René Mesrine
A: 

My college, Universidad Central de Venezuela, Licenciatura en Computación:

  • Java (courses: Algorithms and Programming, Software Engineering, Advanced Programming Techniques)
  • C/C++ (courses: Algorithms and Data Structures, Operating Systems)
  • x86 Assembly (c: Computer Architecture)
  • Haskell, Prolog (c: Programming Languages)
  • Python (c: Probability and Statistics)
  • Mathlab (c: Numeric calculus)

These are the required courses, I know some elective courses have been taught in Perl and Ruby, but haven't taken any yet.

omgzor
A: 

Otago University Computer Science taught Java at the 100 level and half of the 200 level. This was basically programming and problem solving basics.

In the second half of second year it moved onto algorithms and data structures in C.

In 3rd year they didn't seem to lock you into any particular language, you could pretty much use what ever you wanted. With the exception of a few - OO was C++, A.I. was prolog, lego mindstorms (:D).

I believe they now have a Python type paper.

At the time while I was studying I was a bit pissed off because we were never really taught how to use a particular language. I remember being particularly annoyed that they didn't teach PHP and feeling like I just wasn't learning anything. If I ever tried to code anything in my spare time I would use Java as that's the one I was most comfortable with.

It wasn't until I actually left Uni and started working that I realised how beneficial their way of teaching was. The majority of class time was spent on learning how to program effectively rather than the ins and outs of a language. I started to realise how beneficial this was when I would see people who had gone through other courses only to become C#/Java masters and it's almost like they are locked into a world of business system programming.

Tim
A: 

Southampton, UK

Introduction to programming principles and more advanced (but still fairly basic) stuff is essentially following the "Java vocational school" approach. The advanced programming course also introduced C/C++ as a single language, mixing concepts from both in a rather messy and error-prone way. That course needed serious rethinking around the time I took it a couple of years ago.

Functional programming principles is covered in Scheme.

The operating systems course focusses almost exclusively on the implementation of a FAT12 driver in raw ansi C.

Engineering principles for software was taught in UML using Java as the base language that everyone is assumed to understand.

Databases were dealt with by using SQL connectors from Java.

There was also a very basic HTML requirement that had nothing to do with the technical disciplines, but was more about personal professional image.

Compilers is handled by fiddling with JFlex.

Formal specification is done in the B method and language, as most of the staff prefer it over Z, at least for teaching.

I think it is pretty obvious from this list that "employability" is the most important buzzword at my university.

Despite many courses in the first two years having very strict requirements for languages (nearly all Java), we are constantly encouraged to experiment with any other languages/tools or technologies that seem interesting to us. This is essentially the reason I moved to .NET a year ago, and am currently playing with the D language against bare hardware.

IanGilham
A: 

CS is generally not primarily for language instruction/learning. They are merely tools for learning CS topics.

At Columbia I learned scheme in the SICP course, C in the OS course, C++ as a language course.

Prior to 1989 I think some CS courses used pascal for an intro language (before SICP was adopted.)

I think they use Java now for some CS courses

The AI classes let you use whatever Lisp variant you wanted.

C was pretty common for the higher level classes. It was a one point elective as well. Which supports the contention that learning a language is not a priority in a CS curriculum

Tim
A: 

The University of Alberta has traditionally taught intro computing science in Java. In '07 or '08, a new line of introductory courses were created based around the theory of computation rather than the engineering of programs. These new courses use Perl, though there isn't much programming. (Ironically, I think this is the best way to teach "programming".)

While Java is still the main language taught at the U of A, most senior courses are not programming language-specific, in that the professor allows students to choose their language. This is a huge plus, though it does depend on the professor.

Yohnny
A: 

Rochester Institute of Technology

The next academic year is bringing some changes, if all goes according to plan. I'm on a 6 month co-op, so I won't be there until Winter to see how it actually unfolds, but it's something like this:

Computer Science 1 and 2: Python Computer Science 3 (Data Structures): Java Computer Science 4: C Software Engineering 361 (Intro to SE): Java

Most of the other SE courses (my major) are language agnostic, although most people use C# or Java.

Thomas Owens
A: 

The Technion (Israel Institution of Technology):

The mandatory part of the degree involves the following languages:

  • C as the first language (Introduction to CS), C++ later on.
  • Java
  • C Shell*
  • Matlab*
  • MIPS Assembly, or PDP-11 (depends on the faculty - CS or EE)

Some optional courses involve:

  • Lisp
  • C# - as an optional language for creating simulations

(*) Kind o' argumentative if these are "Languages".

I'd say C++ is the backbone of Software Engineering here.

Note: The Technion is considered Israel's best engineering school and one of the 30 best technological instutions world-wide. I consider that top-tier, and hopefully I'm right - I'm deeply invested in it already (3 years down, one more to go).

Asaf R
A: 

A quick list of languages myself and others used in classes while at the University of Alberta (Software Engineering program)

  • C
  • C++
  • Java
  • Perl
  • SQL (if you want to count that)
  • Lisp
  • ruby
  • Motorola 68K assembly
  • MIPS Assembly

Another class I wanted to take used Smalltalk (the OO class).

Daniel Huckstep
A: 

Compuskills University, Jerusalem, Israel.

Small but high level.

.NET languages

Web languages (PHP, Javascript, HTML, [& some Python, Ruby, and Actionscript])

[I'm aware that these languages are not at all in the same fields.]

A look on Dice.com shows that the real companies are looking for Java monkeys, so it makes sense to teach them that:

* 8498 results for JAVA
* 4956 results for .NET
* 4105 results for C++
* 1223 results for HTML
SamGoody
A: 

C.S. department at Columbia University

http://www.cs.columbia.edu/

When I was an undergrad in 97/98/99 I started and finished with C (without the ++) and taught myself Perl and Java on the side. Now they are starting people off with Java but then you have to learn C and C++ to take many of the 4000-level courses (Computer Graphics, Operating Systems, etc). You will do some sort of assembly programming when you take the low-level classes such as Comp Org. Some AI courses are being taught in Lisp. There was a class taught in OCaml last year I believe.

eeeeaaii
A: 

The Carnegie Mellon answer here shows the languages taught by the Computer Science department. I'm an Information Systems major, and the languages are pretty different:

  • Introduction to Information Systems - HTML CSS Javascript
  • Information Systems Milieux - PHP SQL
  • Application Design and Development - Ruby on Rails

Further courses are largely project based and the choice of language is left up to the students. There has been some discussion of teaching Python, but as far as I know that has not materialized into a course yet. Information Systems courses also tend to be divided into advanced and basic sections based on prior coding knowledge.

Dean Putney
A: 

Northeastern University, College of Computer and Information Science - the nations first college devoted to CS:

Languages of the undergrad program:

  • Scheme to learn basic programming (recursion, functions, data types) and later in senior year to understand programming languages (parsers, evaluators, interpreters, scope, etc.)
  • C in Computer Org and in my OS class
  • Java to take what we learned in Scheme and make it object-oriented and to learn OOP principles
Mark Ursino
+3  A: 

Partial list of universities teaching Haskell for a significant number of courses:

  1. University of Edinburgh
  2. Oxford University
  3. Chalmers University of Technology
  4. University of New South Wales
  5. Australian National University
  6. Portland State
  7. University of Pennsylvania
  8. University of Kansas

Longer list at:

http://haskell.org/haskellwiki/Haskell_in_education#Haskell_as_a_first_language (probably well out of date though)

Don Stewart
A: 

When I was at Clarkson in 1999-2003 I had a bunch.

  • C++ was the main beginner language not yet usurped by Java.
  • C for OS - modified the linux kernel
  • Prolog and Java as part of programming languages
  • Scheme (a whole class on functional programming)
  • SQL (databases, naturally)
  • C OpenGL for graphics
  • some x86 assembler for micro processors but not really.
  • Also, importantly, we had a few classes learning to use a library, the MFC. Now which will be replaced with .NET. But the point is to get practical experience building big modern, GUI applications.

I happened to be there at a good time when the SoftE program emerged, and we already had CS. My class was the first of 4 schools in the nation to get ABET accreditation for SoftE, and the only one to get the full 6 year approval. And yes I was one of the best programmers in my class, and went right into industry as a programemr during a recession.

/feather in cap.

tkotitan
A: 

At the second rate state school I started at, we learned C++, but we didn't even learn basics like linked lists or classes. I transferred to the first rate state school, and they teach some pretty intense Java here for freshmen. Shell programming (bash, awk, perl, etc) in a few classes. There's of course, a class on MIPS. Even a fourth class where you design your own language.

nullArray
+3  A: 

As Joel says "A sure sign of my descent into senility is bitchin' and moanin' about "kids these days," and how they won't or can't do anything hard any more." Bitchin' indeed.

It's as absurd as Montgomery Scott bitchin' that they don't teach the internal combustion engine at Starfleet Academy anymore. Surely you can align those dilithium crystals without knowing how to construct a rotary engine.

If code-monkey jobs didn't require a bachelor's degree, perhaps the degree program would retain higher standards and lean more towards continuing education than vocational training...but, it's what the market demands.

Greg
+1  A: 

Ohio State University

The OSU CSE/CIS program is as follows:

Year 1

  • RESOLVE/C++ - for the intro classes, it's kinda like a bastardized easy version of C++
  • SPARC Assembler - which is actually used to write a simple software emulator of a 8-bit RISC computer

Year 2 and beyond

You learn whatever the class needs.

For Language Theory and AI classes you pick up Lisp or Scheme, for Numerical Analysis classes you will probably use C or C++, for Systems classes you will pick up something with good libraries, etc. OSU tends to make sure you know how the computer works from the hardware up to the highest level constructs and languages, and the rest is up to you.

I agree with everybody that said that "They have always churned out a lot of mediocre programmers, a handful of good ones, and a few brilliant ones. Only the language has changed." The things that really matter the most are their incoming skill level and their passion for CS, those things will really drive the skill level of graduates.

Alex Moore
OSU also offers a year 1 java course
faceless1_14
CSE 201? That's the intro to programming course they make you take if you haven't tested into the RESOLVE courses or aren't familiar with OOP.
Alex Moore
+2  A: 

Stanford

C++ in introductory courses CS106A, CS106B

C/C++ (low-level memory management), Lisp, Python in introductory course CS107

Java in hardcore object-oriented class CS108

C in most systems courses including Operating Systems, Networks, Compliers

C in most AI courses

C#, Javascript, Python, and others in specialty courses

RightFullRudder
A: 

Neumont University (a growing computer-science, project based university)

first quarter Introduction to Object Oriented Programing
Intro to C#
Intro to Java
etc.
subsequent quarters
SQL programming
Data modeling
etc.

Students at Neumont are proficient in a few different languages at Graduation including the .net languages(C#, C, VB, etc) and Java. Few may dive into objective-c, and Ruby as well.

A: 
BoltBait
+4  A: 

I'm studying at University of Copenhagen, Denmark. It's not quite Ivy League, but the best university in Denmark, and been rated in the top 50 worldwide a few times, so pretty decent at least.

In the first semester, we were taught SML, a functional language, as a general introduction to programming.

This has the fun effect of leveling the playing field. All the cool kids who think they've been clever and learned Java or C++ before enrolling have to throw it all out and start over on a completely different language. It usually turns out that those with no programming experience actually grasp it easier.

Second semester, we were taught Java as an introduction to object-oriented programming.

On second year we were taught MIPS and Alpha assembler (the former as the target architecture in the compiler class, and the latter because we had to implement a simple OS kernel running on an old Alpha).

And that's basically all the language-specific classes we have. Depending on which classes you take past these, you'll probably learn C, C++, Haskell, Lisp, Prolog, Python, SQL and a few others. But in general, specific languages tend to take a back seat. They're something you occasionally have to pick up pretty much on the fly because you need it for an assignment or project.

(In the years since I enrolled, they've reshuffled some of the classes, so the exact order in which we learned these, and the amount of time spent on each is no longer accurate. In writing the above list I just stuck to what I knew. In particular, they've butchered the kernel project and with it, Alpha assembly. The latter isn't a big loss of course, but you really learned a lot from the kernel project)

I think that's the correct way to teach CS as well. It is not a programming degree as such. Individual programming languages are just tools to be used as necessary.

And without reading Joel's or Kay's minds, I think that was their point too. A CS college shouldn't just teach today's fashionable language. Whatever languages they teach should basically be incidental to the real meat of the degree.

jalf
That sounds like a pretty awesome way to organize a computer science degree program.
bcat
A: 

University of Toronto (Electrical & Computer Engineering) (Not Computer Science)

  1. C/C++
  2. Java (Basics, first year course).
  3. Assembly (Motorola 68K)
  4. Verilog (Altera boards)
Floetic
A: 

Having taught at top-tier schools, I don't think that the problem is the languages. The problem is that people don't get any real-world software engineering education and skills. At best, this is left for optional electives.

This is part of a philosophy that CS is not about programming and that you don't go to a top-tier CS department to become a software engineer. Unfortunately, while that should ideally not be the case, few people go for the Ph.D. (and many end up as engineers anyway, as happened in my case), and most end up as software engineers.

You don't see this problem as much with EE departments, where it's understood that it is completely acceptable for graduates to work as engineers, and there is therefore an attempt to make them understand that circuits are more than just pretty lines drawn on a board but rather quite a messy thing.

Uri
A: 

Georgia Tech:

  • Intro to CS in Python
  • Intro to OOP in Java
  • Intro to Data Structures and Algorithms in Java
  • Computer Organization and Programming (systems basics) in C
  • Objects and Design in Smalltalk

Each of these courses is required before degree specializations kick in. Intro to CS for non-CS majors, however, is in Matlab =/

Many of the higher level courses allow the student to choose a preferred language, as long as the TA and/or professor know it. In courses like software engineering and senior design, the choice is absolutely up to the project group. Courses with domains tied heavily to a language usually use it - the intro to AI course is taught in Lisp- but that is beginning to change (the languages, computational theory and compilers course allows Java).

Despite the freedom, Java is definitely the lingua franca, and most students don't really break out of the C/C++/Java family. Web technologies are never taught- aside from tangent to a databases specialization course- though sometimes professors expect students to know a bit of HTML. I don't know of any course that focuses on Javascript (you would think the into to UI class, right?), or any server-side technology (PHP, Ruby, J2EE, .NET for the web, etc) other than the last project in the intro to databases course. From what I've seen, a lot of students decided to give the web a first or second try for their senior design project, or learn it on the side.

The further out of the norm your course choice is, the better chance you have to be exposed to cool languages. AI, web development, and HPC are all great areas to try something new, and it seems like I'm always learning something that I can apply to the rest of the field.

Matt Luongo
A: 

Cambridge University

In 2000 it was: -Java -Assembly -Prolog -ML -History of other programming languages (BCPL, C, Smalltalk, etc)

http://www.cl.cam.ac.uk/admissions/undergraduate/intro/

So long as the language is fairly modern and widely used (e.g. C, Java etc), then it doesn't much matter - the skills being taught are more important.

Saying that, IMO it is very useful to learn at least one low level language (e.g. C, Assembly), as that makes you appreciate what is going on under the hood, which is useful for most serious programmers.

Dan J
A: 

If you take a low-level CS course at Princeton you may have the rather surreal honor of learning about VB6 and DLL hell from Brian Kernighan.

strongopinions
A: 

I've taken quite a few programming courses at different UC (University of California) Campuses.

UCLA - Mostly C++, C, Java, MIPS Assembly, x86 Assembly, and a tiny amount of python.

UC Irvine - Mostly Java and a tiny bit of scheme

UCSD - Mostly Java, but some C and C++ for Data Structures, and SPARC Assembly.

goatlinks
A: 

Hi, I think it depends on some facts like

  • what the profs want the students to do with it (eg. objective coding)
  • cost (open source code and IDEs, or licenced ones)
  • what the prof prefers

I'm not studying computer sciences, but our informatics prof wanted us aerospace engineer students to code in VB.net. One of the reasons was, that the IDE sharp-develop is free of any charges ;). and in my opinion he can code it, because it is similar to basic, that he learned when he was a student. So he is used to it.

Formy diploma thesis I coded in Java, because it has nicer code than vb.net (sometimes it's butt ugly! :)) and a friend of mine is a informatics students and they codein java, so he was able to help me, when I had questions how to solve my problems.

best regards, Andreas

Hochschule Bremen - University of Applied Sciences Bremen (Germany)

Andreas Hornig
A: 

University of Cambridge, Undergraduate

  • Year 1
  • Java practicals
  • ML lectures and practical
  • Some MIPS

  • Year 2

  • C/C++ lectures in year 2
  • Verilog in year 2
  • More Java and MIPS
  • Prolog

  • Year 3

  • Not there yet :p

Most of the course is theory based - discrete mathematics, algorithms etc. When an implementation is provided, it will often be in pseudo-code or outlined (partial implementation) in Java.

Stephen Tordoff
A: 

Portland State University(not a top school)-Note this is what I was taught in although its similar for new students especially for the 161-202 and compilers part I, II classes.

161,162,163,202- Intro classes procedural->data structures->basic OOP Taught in C++ w/ a tiny! bit of Java at the end of the last class to try it out. C++ is taught mostly c style to start out with. Using iostreams for i/o and c style strings(char arrays). Then you learn pointers ->recursion->data structures->C++ OOP (inheritance/protected/friends/operator overloading)

200/201(they might have turned this into one class now- C and a bit of x86 gas assembly(figuring out what it means not writing any programs with it)-teaches a bit about how a c program works-binary representations of int and float,how structs fit in memory, the stack,loops, some optimisation stuff.

250/251/3?? -Logic/languages/NFA/DFA/turing machine/for all/some/boolean algebra/proofs,ect.-mainly theory but when I did it hw in language instructor decides on prolog/maple/Standard ML

386-Intro to databases-sql (postgres I think,plus theory, plus one short php script)

Other classes were instructors pick(Java is popular especially for the compilers class)

Usually its some basic instructions plus pick it up on your own-unless its Java

Also although higher level classes aren't supposed to just teach programming languages have 2 cool elective classes called OOP and Functional Languages, which teach Smalltalk(Pharo) and Haskell respectively although considering how idiomatic those languages are to those programming paradigm its understandable.

Roman A. Taycher
A: 

Tons of languages are available.

I can just talk for Blekinge Institute of Technology in Sweden. Here, most of the Computer Science programs starts out with 7.5 credits with the foundations of c++, and follow ups with Algorithms and data structures. After that, you have 7.5 credits with Java.

Other computer science ourses often handles different languages, it all usually depends on what the teacher like. But the mix is kind of big. It handles all from C, IA32 assembly to Java.

Also, in different project courses any language could be an option, depending on the customer needs. For example, for my graduation project I learned objective-c.

The best approach is, according to me to start out with C++ and from there, go to Java and C. You might say you could start out with C but you also want the object oriented languages as c++. I believe this worked and still works good. It was much better than before, when all Computer Science programs started out with Java, and then follow upped with C++. Many people had huge problems getting getting a hand of C++ when they've started out with Java.

Fredrik_jakob
+1  A: 

Tel Aviv University:

  • Introduction to Computer Science: Scheme, based on the old MIT Class.
  • Software 1: Java.
  • Operating Systems: C (actually, there is a specials "project" class that teaches C, but the main reason this is done is to support the OS class, otherwise this class would probably have used Java)

Of course, there are also some elective classes that teach additional languages, but those are the basics.

Michael Kuperstein