<h2>Introduction</h2>
<p>I have been blessed with the rare opportunity of taking CS (Computer Science) classes at Stanford and Cal. There has been much debate around which CS department is better. I really don't care at all about that. Both are good in different respects. </p>
<p>What I'm here to talk about is how they are so different in their approaches and perhaps dispel some myths about both. </p>
<h2>Cal's CS</h2>
<p>Cal pits all EECS and CS students through a 3 class gauntlet known as the 61 series. The first is a very general programming paradigms class taught using Scheme. (For Stanford people this would be the equivalent to CS107). The second is a data structures/algorithms course in Java. The final course is a hybrid CS/EE course that traces the entire path of code from a high level language to assembly to machine language and down to hardware.</p>
<p>Like most other universities, Cal uses the standard lecture-lab-discussion format for CS classes. Lectures meet a few days a week and are taught by the professor who goes over big ideas and concepts. Discussions happen 1-2 days a week, and they go over practice problems. In the lab session, we complete small programs on the computer.</p>
<p>Homework generall consists of 3-4 short programming problems that are submitted online and graded by a reader (more details on this when I compare to Stanford's way). Projects usually consist of creating a more substantial program. </p>
<p>So that's a quick, unbiased summary of Cal (lower division) CS. Next I'll cover Stanford CS. After that, I'll get to the important part of comparing the two.</p>
<h2>Stanford CS</h2>
<p>In terms of actual requirements, Stanford has a very similar core CS program for its students (but I will explain the huge difference below). Students generally start with CS106A/B/X which is an introductory data structures / algorithms course. Then comes the two other major lower division courses, CS107 and CS108. CS107 is a paradigms course that is similar to Cal's CS61A while CS108 is a project based course that gives students extra practice in working on larger scale projects (including the "Bunny" program).</p>
<p>Again, the format is largely the same with lectures, labs and discussions. This format varies somewhat between courses, but there's nothing earth shattering (read next section for the big differences).</p>
<p>Now comes the fun part. The actual opinion as far as this piece is concerned.</p>
<h2>Comparison</h2>
<p>Im not a huge fan of sweeping generalizations, but I will make one now. Cal focuses on projects and research, while Stanford focuses more on teaching and group work. Because Stanford is a private university, Stanford can invest more resources and offer smaller, more personal classes. This is something Cal cannot afford. Let me offer a substantial example of this.</p>
<p>As I mentioned earlier, homework for Cal CS is submitted online and is graded by a reader. Want to know what the reader really does? They run your program through an automated script. If your program succeeds, you get full credit. If it fails to run, you get a 0. If it runs but is buggy, then the reader steps in and looks at your code to find the source of the bug(s). The same procedure applies for projects.</p>
<p>Stanford does things differently. In the 106 series, every homework assignment is essentially a mini-project. When you submit your homework through FTP, your TA/discussion leader will run it through the grading machine. What I really, really loved about CS106X was the IG (interactive grading). The TA would actually spend the time to look through all of your code and offer comments on style, your general design, things like that. Even if your homework was perfect, the TA would point out the things you did right (function decomposition, #defining, etc.). Stanfords focus seems to be on fostering good programming style and hammering down the concepts. Its also about making sure each student gets quality feedback on their work, more than just a meaningless number or grade. This small but powerful example shows just how different the two schools are. </p>
<p>Again, I will emphasize that one approach is not necessarily better than the other. I definitely prefer Stanfords nurturing approach. Its a must at in the early stages. Some people dont like Stanfords approach and would just prefer to submit an assignment and be done with it. Its a matter of taste. This same theme comes up again as youll see </p>
<p>If you look at the major requirements for Cal CS and Stanford CS, they will be nearly identical. Well, on the outside, they appear identical. But let me assure you that they are actually quite different in reality.</p>
<p>Cal has a nice, elaborate scheme for EECS majors. It details a very intricate program of courses you must take, going down to so and so units of technical electives, this many units of science, etc. Cal pushes you to get started early. Once you enter EECS, you are on a one-lane road with almost no room to stretch and be flexible. This is a fact. EECS students will continually complain (or celebrate) the fact that they are restricted very much to CS, math, and science courses. For those of us who want a little breathing room, were out of luck. Cal hardly offers chances to academically explore unless you want to risk going over a semester. AP credits dont get you far here. There are literally a ton of requirements at Cal.</p>
<p>Stanford approaches this dilemma differently. Because you dont declare your major until the end of your sophomore year, you have the flexibility to explore other areas of interest before settling down on CS. Perhaps you wanted to take that music course. You can take it with hardly a penalty. Stanford doesnt push you along as hard as Cal does. Some like it. Others dont. I have a friend going to Stanford who complains that he isnt feeling the drive to chug on with CS because he isnt pushed hard enough. I personally like the idea of academic exploration. But again, this is a matter of opinion. This just shows how different the two schools are.</p>
<h2>Conclusion</h2>
<p>I hope this piece has at least informed you a bit about how the other side lives. Stanford and Cal are both great schools but starkly different schools at the same time. In terms of the full learning and academic experience, Id give a nod to Stanford for offering a more undergraduate friendly CS program, but many still prefer Cals hard lined lets get a move on it attitude. In the end, you have to choose which program is better for you. Just make sure you know what kind of student you are and which school is a better fit for you. Thats what counts!</p>
<p>Disclaimer: I do not take responsibility for any of the discussion that follows. I have attended both schools, so I have a substantiated opinion of both schools. I received decent grades in the CS classes at these schools, so that does not factor in at all in my opinion.</p>