<p>"“CS is as much the study of computers as astronomy is the study of telescopes” - Djikstra. CS at Brown is not a technical concentration, and neither is Engineering (though this may be less true than CS). Which is why our CS is so good: we get through more theory (and mroe in-depth in the theory) in two years than my local state school does in 4. We don’t get the “Unix programming” type classes, because we’re pretty much just expected to pick those things up. We don’t do web-design, but we DO do web-security and cloud-computing. </p>
<p>Here’s a 4-year comparison (U of Arizona is the comparator school, which according to US News is only ~20 off in their CS program than us, so still considered in the top 20%. Also note for UA, 100 implies pre-req, 200 ~freshman -sophomore level, 300 is soph-junior level, and 400 is junior-senior):</p>
<p>Year 1:
CS 227: Java Programming for advanced students i.e. a year-long sequence o/w (learn linked lists, hashing, classes, arrays, recursion)
Math 125/129: Equivalent to high school Calc BC</p>
<p>Year 2 (if you get pushed):</p>
<p>CS 225: Discrete structures: intro to proofs, grammars, etc.</p>
<p>CS 252: Computer organization: elementary assembly language and machine concepts</p>
<p>CS 335: Object-Oriented Programming: Presents Java Swing classes, and event-driven programming</p>
<p>CS 345: Discrete Structures: Trees, graphs, algorithmn analysis</p>
<p>CS 352: System programming/unix: learning to program in C and unix/scripting</p>
<p>After that (the next 2 years):
Now, we get to optional courses, so I’ll point out just one possible track (go to <a href=“http://www.cs.arizona.edu/undergrad/CSCdegreechecklist_rev4.2010.pdf[/url]”>http://www.cs.arizona.edu/undergrad/CSCdegreechecklist_rev4.2010.pdf</a> if you want the full options):</p>
<p>CS 372: comparative programming: studies various languages, and their paradigms, such as functional (ML) and Prolog for logic programming. Emphasis on understanding the design philosophy</p>
<p>CS 473: Automata (OR Algorithms, your choice): intro to fundamental models of computation, like Turing Machines</p>
<p>CS 453: Compilers/Systems software: Covers lexical analysis, bottom-up and top-down parsing, etc.</p>
<p>Two electives (say, CS 436, Software Engineering, and CS 496, research topics)</p>
<p>Now we look at Brown (and I’ll tell you whenever there’s overlap, and with what).; I’ll assume you know NOTHING about CS going in (like me), and start in 17: (also note, anything under 100 is considered a lower division course EVERYONE must go through)</p>
<p>Year1:</p>
<p>CS17: Intro to CS. Learn functional programming in Scheme and ML (OCaML), program analysis, binary trees, recursion, parse trees, etc. This roughly corresponds with the first-part of CS372, the last part of CS227, and a piece of CS345</p>
<p>CS18: Intro to CS part deux. Learn Java, object-oriented programming, linked lists, hashing, Java’s Swing library (build your own web browser), and cover other theory like graphs. At this point you’ve covered all of CS 227 and CS 335</p>
<p>CS22: Intro to Discrete Structures and Probability. Basically, you cover proofing, parse trees, graph algorithms, and trees. So CS 225 and CS 345 wrapped into one (and this is considered an easy course no less).</p>
<p>Math 52 or 54: Linear Algebra. You should have already covered Calc BC in HS, or else taken Math 17 in Fall</p>
<p>Year2:</p>
<p>CS 31: Intro to Computer Systems. Go from logic gates to building a computer, then to assembly language to compilers for assembly, up to virtual machines. Basically CS 252, but going through the computer from start to finish, rather than only dealing with certain sections like assembly and certian machine concepts, with some of CS 453 thrown in (NOT all of it, though)</p>
<p>CS 52: Models of Computation. From Turing Machines to reductions to grammars. Roughly equivalent to CS 473 with some of the Algorithms course thrown in.</p>
<p>CS 32: Software Engineering. Learn to program in C++, and make a final group project you’re proud of (and which could, potentially, earn you some dough). Some examples of final projects coming out of 32: mocha (brown.mochacourses.com) and RAPT (Robots are People Too). Seems roughly equivalent to CS 436, somethign you might take as a Senior at U of A</p>
<p>Potentially, some upper division course, such as CS 173, Programming Languages</p>
<p>Then 2 more years to take ~ 3-4 CS classes/year</p>
<p>So, the only courses we don’t truly cover (and I mean cover pretty completely) is CS 372 (though it’s introduced in 17/18) and CS 352, because we never learn scripting, you’re expected to pick that up on your own if you want to use it (which isn’t that big a deal). However, things that our 2 years of courses cover MORE completely than U of A’s 4: Computer systems in CS31, because we build everything from the bottom up, and Models of computation (there’s more to it than automata), which we begin to introduce in 22, and really hit hard on in 51. Furthermore, we require software engineering, while it’s only one of many options for senior-level u of a students. Finally, we require linear algebra, and most of our students go through multivariable calc, something u of a never does.</p>
<p>This is not meant to be a bash on U of A, or any other CS program, for that matter. I just want to give a comparative analysis of WHY our program is considered top-notch, and what we expect of our students, and these are the two programs I’m most familiar with due to high school friends currently at U of A, and me being here.</p>