<p>Speaking as a current Carleton CS Major, I can confirm what IceEx said - the CS Major at Carleton is definitely a theory-heavy program. That having been said, if you’ve interested in software engineering, having a strong theoretical background gives you a leg up on the the graduates from straight SE programs. Learning programming languages is easy enough to do on your own; the theory takes time.</p>
<p>As for feeling limited, I’d say that’s hardly been the case in my experience here. It’s true that Carleton doesn’t offer that many upper level CS courses per term, but since we’re a relative small department (5 professors, 14 senior majors, and 33 junior majors), it wouldn’t make sense to offer a ton any given term. Note that this may change in the future, however, because we are a rapidly growing department. As for the electives that are offered, they range from the fairly traditional AI and Natural Language Processing all the way to Evolutionary Computation and Artificial Life (one of my favorite classes I’ve taken here at Carleton). And if there’s something you’re really interested in but it isn’t offered, the profs are quite receptive to suggestions. Case in point, a friend of mine is interested in Cryptography, so she talked to the department chair and got a course offered in Crypto last year. It really struck me when I came here just how accessible the professors are - if I want to, I can stop by my advisor’s office pretty much whenever she’s in and talk about anything, from coursework to internships to evolving cooperative behavior amongst a network of robots (which she is actually researching), to Portal 2.</p>
<p>Programming language wise, only Intro to CS is taught in Python now - the rest of the programming heavy classes in the major are taught in Java. If you don’t know Python yet I’d still learn it - it’s a fun little language, and learning languages quickly is an important skill to have, at least on the SE side of the field. In Programming Langauges (CS 251) you’ll bounce back and forth between Scheme and C, culminating in writing a Scheme interpreter in C from the ground up, and in Operating Systems (CS 332) you’ll be writing C and C++, while maybe hacking a bit on the Linux Kernel (depending on who’s teaching it).</p>
<p>Concerning programming language variety and the lack of Microsoft technologies in the major, I really wouldn’t worry. C# is pretty much just Java (but done the right way), so once you know one the switch to the other is relatively pain-free (personally I’m partial to the CLI languages). And though learning the ins and outs of the language du jour will be helpful in the short-run, five years down the line when there’s a new industry standard, the strong theoretical background from a Carleton CS major will still be with you when you make that jump. As long as you can interview well and demonstrate that you’re talented and can learn quickly, employers recognize this. We’ve got alumni in neat places in the industry (RIM, Microsoft, IBM, Amazon, Apple, and most recently Google, to name a few) who can all attest to this</p>
<p>All in all, I love being a CS Major at Carleton, and I feel that it affords you as a student some particularly unique opportunities (specifically for student-faculty research collaboration) that the larger schools just don’t offer. I hope this helps, and if you’ve got any specific questions I’d be more than happy to answer them.</p>