Textbooks, Fall 2017

Unfortunately, the College bookstore does not currently permit us to include notes about textbooks in their postings. For example, we have no way to indicate that an earlier edition is permissible, or that a free legal version is available online. This page serves as a temporary alternative.

CSC 151 (all sections)

There is no required textbook. All materials are available for free online.

CSC 161 (all sections)

King, C. N. C Programming, A Modern Approach (2nd Edition). W. W. Norton and Company. ISBN 978-0393979503.

It appears that Amazon currently has new copies for under $100 and used copies for about $60.

CSC 207 (all sections)

There are no required textbooks for this course. Course readings will be provided through the schedule on the course website. For additional resources on the topics presented in this course, please consult the resource page. If you would like to purchase a textbook reference, here are some recommendations:

CSC 211

Our primary textbook is David A. Patterson and John L. Hennessy, Computer Organization and Design: The Hardware/Software Interface, Revised 4th Edition, Elsevier, 2012. ISBN 978-0-12–374750-1. I will supplement our primary textbook with eReserves and handouts from other textbooks, videos, and the occasional lecture.

Our textbook is fondly known as “Patterson & Hennessy” (not to be confused with “Hennessy and Patterson”, which is a more advanced textbook). Please acquire the revised printing (with a dull green cover), not the original printing (with a blue cover). Do not buy other editions as they are quite different, including the newer 5th edition. I do not recommend the Kindle edition as it has received rather poor reviews. Some supplemental materials are included with the book on a CD. We will be reading from these materials early in the course. If the version of the book you have purchased does not include the CD, you can download all supplemental materials from the publisher. Finally, watch out for international editions that use ARM rather than MIPS as the primary example architecture.

CSC 301 (both sections)

We will use two main textbooks in this course.

The second edition of The Algorithm Design Manual by Steven Skiena.. Skiena does an excellent job of presenting the intuition behind many core algorithms and helps you build the skills to design your own.

The third edition of Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein (aka CLRS) provides a more precise and more complete coverage of algorithms, including most of what we think of as the core "literature" of algorithms. We will use this text as we think about more formal aspects of algorithm design and analysis, as well as in covering some algorithms and data structures not covered in Skienna.

Note that the second edition of CLRS is also perfectly acceptable. Coverage of some topics is slightly different, but not enough so to make a difference in most cases. However, if you can get the third edition for a reasonable price, you should select that edition. You will appreciate having it on your bookshelf.

CSC 321

Fox, Armando and Patterson, David (2016). Engineering Software as a Service: An Agile Approach Using Cloud Computing, latest edition.

Our core textbook. Fox and Patterson synthesized a lot of ideas to produce a textbook that grounds software engineering principles in a new model of computing. This textbook is rapidly evolving. I would recommend that you purchase the Kindle edition through Amazon, which has free updates available. (With the Kindle Cloud Reader, available at or an appropriate app, you should be able to read the book on almost any electronic device.)

Metz, Sandi (2013). Practical Object-Oriented Design in Ruby: An Agile Primer.

This text will help you get more deeply involved in programming in Ruby and thinking like object-oriented programmers.

CSC 322

There are no additional texts for CSC 322. You should, however, have copies of the CSC 321 texts.

CSC 341

The required textbook we are using is Introduction to the Theory of Computation, by Michael Sipser. We will be referring to this book regularly, so it is important that every student has access to a copy.

Edition: Both the 2nd and 3rd editions acceptable. The new chapters included in the 3rd edition will only be mentioned in passing, and you will not be tested over it. Some errors were corrected in the 3rd edition, but Sipser maintains a helpful list of errata.

Electronic copy: You can rent an electronic copy of the 3rd edition for under $50 from Cengage.

Reserve Copy: A physical copy of the 3rd edition has been put on reserve and is accessible from the Kistle Library.

CSC 395

(Information forthcoming.)

Thursday Extra: "Off-campus study and computer science"

On Thursday, November 6, Professor Janet Davis and Richard Bright, Director of Off-Campus Study, will lead a discussion of options for combining off-campus study with study of computer science. CS majors who have studied abroad are welcome to come share their experiences.

Refreshments will be served at 4:15 p.m. in the Computer Science Commons (Noyce 3817). The presentation, “Off-campus study and computer science,” will begin at 4:30 p.m. in Noyce 3821. Everyone is welcome to attend!

Planning with Grinnell's New CS Curriculum and Major

Grinnell's computer science curriculum and major are in transtion!

As discussed in past Thursday Extras, revisions to the curriculum have been motivated by faculty perspectives, alumni feedback, and recommendations by the national professional societies (ACM and IEEE-CS). New and revised offerings reflect emerging subject areas, expansion of cutting-edge pedagogy, and explicit connections with Grinnell's core values. The innovative packaging of topics ensure that majors will cover numerous core subjects within the field, while allowing students to select a range of courses that support their career and educational goals.

Final approvals for this new curriculum were completed about two weeks ago, and the full proposal will go into effect over this coming summer.

The Thursday Extra on Thursday, February 26, will look ahead to highlight new courses, consider scheduling possibilities, and suggest possible options for students with various varying interests.

Refreshments will be served at 4:15 p.m. in the Computer Science Commons (Noyce 3817). The presentation, “Planning with Grinnell's New CS Curriculum and Major,” will follow at 4:30 p.m. in Noyce 3821. Everyone is welcome to attend!

A Possible Revision of Grinnell's CS Curriculum and Major

Grinnell's CS faculty regularly reviews and updates the CS curriculum in response to curricular recommendations, feedback from alumni, and discussions with colleagues around the country. For example, over several semesters, the faculty has drawn upon feedback in discussing alternative approaches for team-based, project courses.

Also since 2010, the major professional computing societies, ACM and IEEE-CS, have been working toward new curricular recommendations for undergraduate CS. The forthcoming recommendations propose adjustments in some areas (e.g., programming languages) and substantial expansion in others (e.g., security).

Recently, synergy between these two efforts has led to a proposal for substantial changes in Grinnell's CS program, including some course revisions, new courses in emerging areas, and increased flexibility in the major.

The CS faculty will present current ideas for a revised CS curriculum and major on Monday, November 11, 2013, at 4:30 in Science 3821, with refreshments served at 4:15 pm in the CS Commons. Everyone interested in computing is encouraged to attend.

Feedback on the draft curriculum and major will be encouraged!

Upper-division courses and the computer science major

Introductory Course CSC 151

Core Courses, Electives, and the Computer Science Major

Grinnell's introductory courses introduce fundamental views of problem solving and different supporting programming languages. Upper-level courses include several core courses and many elective courses. The major provides some flexibility to allow students to follow their personal interests and career goals.

Requirements for the CS Major

The Computer Science Major balances requirements in foundational areas with some flexibility.

  • Algorithms and theory
    • CSC 301, Analysis of Algorithms (fundamental problem-solving techniques, corresponding data structures, and analysis of efficiency)
    • CSC 341, Automata, Formal Languages, and Computational Complexity (the theory of computation— connecting with perspectives of the liberal arts)
  • "Systems" courses: (one required, both strongly recommended)
    • CSC 211, Computer Organization and Architecture (hardware basics)
    • CSC 213, Operating Systems and Parallel Algorithms (fundamentals of parallel computation)
  • Software development
    • CSC 321, Software development principles and practices (software lifecycle, agile development methods, professional tools, and software design principles)
    • CSC 322, Team software development for community organizations (application of software development principles and practices to a large-scale project to help a community organization/client) (may be repeated for credit)
  • Electives (4 credits)
  • Supporting mathematics
    • CSC 208/MAT 208 Discrete Structures or MAT 218 Combinatorics (foundational mathematics used throughout computing)
    • Math elective to support specific student interests and goals

Introductory Course CSC 151

Computer Science Major to meet international curricular guidelines

Grinnell's regular Computer Science Major requires 32 credits of computer science and 8 credits in supporting mathematics. This level of background supports many student interests and career goals. However, students interested in careers in computing are advised that the following courses should be taken either as Electives for the Computer Science Major or as additional courses:

  • CSC 211 - Computer Organization and Architecture 4 credits
  • CSC 213 - Operating Systems and Parallel Algorithms 4 credits
  • CSC 214 - Computer and Network Security 2 credits
  • CSC 216 - Computer Networks 2 credits
  • CSC 312 - Programming Language Implementation 2 credits

With these selections, students cover the full range of recommendations recommended by Association for Computer Machinery (ACM), the Computer Society of the Institute of Electrical and Electronics Engineers (IEEE-CS). This extended major includes 32 credits of computer science and 8 credits in supporting mathematics and is identified by the professional societies as a curricular exemplar.

Electives, Mentored Advanced Projects (MAPs), Special Topics

Introductory Course CSC 151

The Computer Science Department offers a range of electives to extend student backgrounds beyond the undergraduate core. In addition to regularly scheduled courses, special topics courses address particular interests of both students and faculty.

Some recently-offered electives have included artificial intelligence, computer networks, computer graphics, computational linguistics, and human-computer interfaces.

Complementing regular courses, students work with faculty on a wide range of guided reading courses, independent projects, and mentored advanced projects.


Computer Science in the Academic Catalog

Vital Elements of Grinnell's Computer Science Curriculum

AI with Henry Walker

Grinnell's computer science curriculum has several special strengths, including:

Problem-Solving Perspectives

Computer science recognizes at least four problem-solving approaches as being fundamental to work in the discipline. Each approach involves a distinct way of thinking, and each is supported by a range of computer languages. These paradigms may be outlined as follows:

  • Functional Paradigm:
    Supported by such languages as Scheme, LISP, ML, Miranda
  • Imperative Paradigm:
    Supported by such languages as Pascal, C, FORTRAN
  • Object-Oriented Paradigm:
    Supported by such languages as Smalltalk, C++, Java
  • Logic Paradigm:
    Supported by such languages as Prolog, Gödel
Intro. CS with Janet Davis

Since different approaches have advantages for different problems, people involved with computing should be comfortable with several of these paradigms.

Grinnell's introductory courses provide students with considerable practice and insight for each of these approaches early in the curriculum, introducing the functional, object-oriented, and imperative paradigms.

Core courses in theory and systems

Grinnell's curriculum identifies both theory and systems as core areas, and the overall curriculum has achieved international recognition for four-year, undergraduate computer science programs.

  • Algorithms and theory: All majors take two foundational courses:
    • Analysis of algorithms
    • Automata, formal languages, and computational complexity
    Systems: All majors take at least one systems course; both of the following are strongly recommended
    • Computer organization and architecture
    • Operating systems and parallel algorithms
Intro. CS with John Stone

Software development project(s)

People use computers because they can provide services and help in the solving of problems. Thus, many courses and much research throughout the College utilize various aspects of computing. The computer science curriculum includes two upper-level courses with a strong software-development orientation.

  • Software development principles and practices examines methodologies for the effective development of large-scale software packages.
  • Team software development for community organizations provides students experience applying principles to actual projects that serve needs of clients within the community.

Electives provide options and flexibility

The computer science curriculum includes several electives, in addition to courses already mentioned. Students choose electives as well as foundational courses, as they work with their adviser about appropriate alternatives to support their interests and career goals. The following list of electives illustrates the range of topics offered regularly.

  • Artificial intelligence
  • Computer vision
  • Computer networks
  • Computer security
  • Human-computer interaction
  • Computational linguistics
  • Implementation of programming languages
  • Learning from alumni
  • Thinking in C and Unix

Syndicate content