Certain questions about CS 11 come up over and over again, so we've collected them on this page. If your question is not on this page, feel free to email us at the email addresses given on the CS 11 home page.
Will you be offering a track in language X this term or next term?
I can't make the organizational meeting. Can I email you my track and time preferences?
I don't know anything about programming. What language track should I take?
I've heard that CS 11 is under-united. Can I get more than three credits for CS 11?
I work for a company that needs to hire programmers. Can you get me some?
Will you be offering a track in language X this term or next term?
We never know until after the organizational meeting (OM). The OM always takes place on the first Monday of the term, in room 74 of the Jorgensen building at 9 PM. We will almost always offer tracks in C, C++, Java, and Python, and often offer tracks in either Haskell or Ocaml (not both). In addition, we sometimes offer advanced tracks if there is enough demand. If you come to the OM you will be able to have a direct influence on which tracks we choose to teach.
You can, but we'll ignore them. Here's why.
The way the OM works is that we first determine which tracks we are going to teach based on the students who have shown up (usually by a show of hands). If there are less than four students for any proposed track, we will normally not teach it. After this, we have a sign-up sheet for each track where students put down their contact information, their UID, and also their time preferences for track lectures. However, these time preferences are not usually enough to specify the lecture time. Instead, we go around and interactively figure out what the best time is for the most people. Typically, the average student will have a number of times he or she can make, and it's easier to pick a time interactively than to go through everyone's written preferences in detail. We use the written preferences as a starting point only.
Someday, we may have a fully web-based system where you can select track and time preference online ahead of time, and the system will automatically pick the optimal time which accommodates the most people. Until then, it's too much hassle for us to make lists of the preferences of everyone who can't or won't show up to the OM. If you think this is unfair, realize that compared to the vast majority of courses you'll take at Caltech, we bend over backwards to accommodate our students; most classes just have a set time, take it or leave it.
Also, note that we won't usually teach after 10 PM on any day (we have lives too). Most lecture times end up being scheduled between 7 and 10 PM on a day between Monday and Thursday. We like (prefer) teaching afternoon lectures if it's feasible for the students.
Can you offer a track in language X?
It all depends on what the value of X is ;-) We'll assume that by "X" you mean some language that we don't already offer.
In general, we're happy to receive suggestions for new CS 11 tracks. However, there are only two of us, and only so many hours in the year, so it's unlikely that we can accommodate every single suggestion that is given to us. We will be much more likely to consider adding a new language track if:
You can convince us that a lot of people (i.e. more than 10) would be interested in taking the track.
We see it as something that people would want to do for a long time to come, as opposed to a one-shot track.
The language isn't one of the languages that we dislike and have good reason for not wanting to teach (see below).
The track is about a language and not about how to use e.g. a particular library in some language or a particular web framework written in some language. However, learning a library or a web framework can often be done in the context of the project track of CS 11.
Here are some languages we don't want to offer language tracks in:
There are a number of reasons why we don't want to teach these languages. In some cases (Perl, PHP, Matlab, Visual Basic), we just don't like the language. We think these languages are ugly, unpleasant, and lend themselves to writing bad code (especially for beginning programmers!). In some cases (Perl) we offer obvious alternatives (Python). In some cases (PHP, Javascript, Matlab, Mathematica, Excel/Word macros) we feel that the language is too specific to a particular kind of application; our focus has always been on teaching general-purpose programming languages.
We recognize that despite this, some people really, really want to learn these languages. If so, we recommend you petition your department to offer courses in those languages. We have our hands full teaching high-quality general-purpose languages, and we can't do everything for everyone.
That said, we are interested in offering more language tracks in the future. Both of us are interested in teaching Erlang, for instance; the limiting factor is that we aren't sufficiently expert in the language ourselves yet. I (Mike) considered teaching Ruby, but after looking deeply into the language, what I found is that it's basically the same as Python but much, much messier, and I'd rather just teach Python. (It's also OK to do the Python track labs in Ruby if you like; I've had a number of students do that in the past.) C# presents a problem in two ways. First, the language has roughly a 90% overlap with Java, so if you know Java it's very easy to learn C#, and we already teach Java. Second, C# is mainly a Microsoft language, and we prefer to teach using Linux machines. Even though there is a Linux implementation of C# (Mono), it isn't guaranteed to be complete (especially with respect to libraries), unlike Java which runs exactly the same way on all operating systems.
If you have any suggestions about other languages you'd like us to teach, we'd like to hear from you.
I don't know anything about programming. What language track should I take?
The original plan for CS 11 was that students would take CS 1 to learn the fundamentals of programming, and could then take CS 11 to quickly learn a language. This works well -- for people who have taken CS 1. We quickly discovered that there were a lot of students who had no intention of taking CS 1, but who still wanted to learn how to program. Therefore, CS 1 was dropped as a prerequisite for this course, though it's still highly recommended.
Of the existing language tracks, the only one suitable for absolute beginners with no programming experience is the C track. Therefore, if you have no programming experience at all and want to take CS 11, the C track is the track you should take.
I want to learn C++. Can I just start with the C++ track?
In short, no. If CS 11 was a 9-unit course, we could presumably teach C++ right from the beginning. However, CS 11 is only a 3-unit course, and there is just no way we can teach all of C++ in a 3-unit course if we have to cover the part of C++ that is identical with C. Therefore, the sequence we suggest is that you take the C track in one term, and take the C++ track in a subsequent term.
I know a bit of C already. Can I take the C++ track?
Possibly yes, but probably no. Most people who try this regret the decision. "A bit of C" suggests that you don't really know C very well. Unless you are extremely comfortable working with pointers, pointers to pointers, structs, pointers to structs, linked lists, etc. (all of which are covered in the C track), don't even think about taking the C++ track. Remember: the pace in CS 11 is fast, and we don't have time to review the basics of C in the C++ track.
We strongly suggest that you don't, and that you start with the C track instead. Again, this has a lot to do with the fact that CS 11 is only a 3-unit class. While it's perfectly possible to teach Java or Python as a first programming language, CS 11 isn't currently structured to do that. If you really want to learn Java as your first programming language, you might try taking CS 2, which uses Java and doesn't have any prerequisites (although it expects that you already have some programming experience -- for instance, from taking CS 1). Alternatively, you can take the CS 11 C track one term and then take the Java or Python track the next term. Our experience has shown us that this strategy works for most students, and you end up knowing two languages instead of one, which will probably end up being very useful to you later on.
I've heard that CS 11 is under-united. Can I get more than three units for CS 11?
We sympathize, and we wish you luck. Many of the CS 11 tracks are indeed under-united, though in practice it depends a lot on the experience of the student. For instance, students who have taken CS 1 generally have to spend much less time on their CS 11 homework than students who have never programmed before. In general, though, most CS 11 tracks are not very under-united for most students (the C++ track and some of the more advanced tracks may be exceptions to this rule).
Regardless, the department won't allow us to give more than three units for CS 11. The reason for this is that CS 11 can be taken three times for credit, giving a maximum of 9 units. The CS department doesn't feel that CS 11 should be worth more than 9 units towards your degree, and we don't really disagree with this decision.
Think of it this way: you should be in CS 11 to learn programming, which is a skill that will be useful to you in many places in science and/or in your eventual job. You shouldn't be in CS 11 just to rack up lots of easy units (not that they're that easy to rack up anyway).
Yes. We have no problem accepting auditors in any of our tracks. If we have time, we'll even grade your homework. However, for obvious reasons this grading will be lower priority than grading the homework of students that are enrolled in the class, and it may not happen at all.
If you're not a Caltech student, you're still welcome to sit in on our lectures, but we won't grade your homeworks.
I'm a graduate student. Can I take CS 11?
If it's OK with your department, it's OK with us.
I didn't register for CS 11 this term. Can I add the class?
See this page.
Can I be a teaching assistant for CS 11?
Read further down on the CS 11 home page; the information is there.
Possibly yes, but don't count on it.
Many people think that as CS 11 instructors, we are sitting on a huge pool of first-rate software talent that is just itching to be turned loose on their pet project. In fact, we rarely if ever hear from students who are looking for projects. Part of this is because most of our students are fairly inexperienced programmers and aren't yet ready to work on larger programming projects. Those who are more experienced are usually most interested in working on their own projects, or are already working on such projects. Programming projects are very easy to find both inside and outside Caltech, and it's not uncommon for students to get paid quite well for their programming work.
Therefore, if you do want to entice students to work for you, you had better be able to offer them one or more of:
course credit
money
experience that will be valuable to them in the future
If you can't offer them any of these, don't expect students to want to come and work for you. Caltech students are very busy and have many demands on their time.
If you can offer them one or more of these, send us a description of your project (the more detail, the better) and we'll post it on our web site on the Help Wanted page.
I work for a company that needs to hire programmers. Can you get me some?
See the answer to the previous question. The same criteria apply, except that in this case, course credit is not an option.
This depends on what our workload is. During the school year, we are usually too busy with our courses to supervise students who are not enrolled in our courses, especially if the student needs a lot of supervision. During the summer, we might be able to help you. However, if all the student needs is a few pointers on how to get over a particular problem, we can usually schedule a meeting anytime during the year.