Thursday Extra 2/21/19: On the design of CSC 321/22

Thursday, February 21, 2019
4:15 p.m. in Science 3821
Refreshments at 4:00 p.m. in the Computer Science Commons (Science 3817)

Developing Soft and Technical Skills Through Multi-Semester, Remotely Mentored, Community-Service Projects

Professor Samuel A. Rebelsky will present a talk discussing the design rationale for CSC 321/22 (now CSC 324/26), in preparation for a talk that he and Dr. Janet Davis will be giving at the 50th SIGCSE Technical Symposium in Computer Science Education.

TUESDAY Extra 10/10: Chat with CS Alumni

TUESDAY, October 10, 2017
4:15 p.m. in Science 3821
Refreshments at 4:00 p.m. in the Computer Science Commons (Science 3817)

Come meet with Wes Beary '05, Cassie Koomjian '05, Terian Koscik '12, Alex Leach '06, and Ian Young '08, the alumni mentors for CSC 321. They will discuss issues they have encountered as computing professionals and answer questions you have about life after Grinnell.

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!

Links to current courses

Spring 2019

CSC 105.01: The Digital Age (Rodrigues)

CSC 151.01: Functional problem solving (Rebelsky)

CSC 151.02: Functional problem solving (Hamid)

CSC 161.01: Imperative problem solving and data structures (Weinman)

CSC 161.02: Imperative problem solving and data structures (Johnson)

CSC 207.01: Object-oriented problem solving, data structures, and algorithms (Rebelsky)

CSC 207.02: Object-oriented problem solving, data structures, and algorithms (Rebelsky)

CSC 208.01 and CSC 208.02: Discrete Structures (Stone)

CSC 213.01: Operating systems and parallel algorithms (Curtsinger)

CSC 262.01: Computer vision (Weinman)

CSC 301.01: Analysis of Algorithms (Vostinar)

CSC 324.01: Software design and development (Johnson)

CSC 324.02: Software design and development (Vostinar)

CSC 341: Automata, formal languages, and computational complexity (Hamid)

CSC 395.01: Advanced operating systems (Curtsinger)

Fall 2018

CSC 151.01: Functional problem solving (Curtsinger)

CSC 151.02: Functional problem solving (Hamid)

CSC 161.01: Imperative problem solving and data structures (Walker)

CSC 161.02: Imperative problem solving and data structures (Johnson)

CSC 205.01: Computational linguistics (Stone)

CSC 207.01: Algorithms and object-oriented design (Stone)

CSC 207.02: Algorithms and object-oriented design (Walker)

CSC 208.01: Discrete Structures (Stone)

CSC 211.01: Computer organization and architecture (Curtsinger)

CSC 211.02: Computer organization and architecture (Weinman)

CSC 295.01: Special topic, "Evolutionary algorithms and artificial life" (Vostinar)

CSC 301.01 and .02: Analysis of Algorithms (Vostinar)

CSC 324.01: Software design and development (Johnson)

CSC 326.01: Software development leadership (Johnson) (Leadership roles within CSC 324.01: Software design and development (Johnson))

CSC 341: Automata, formal languages, and computational complexity (Hamid)

Links to previously offered courses

Upper-division courses and the computer science major

Collaborative student problem solving

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 324, Software Design and Development (software lifecycle, agile development methods, professional tools, and software design principles with application to a large-scale project for a local organization/client)
  • 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

Students working on circuits lab for Computer Organization and Architecture

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

Students discussing their project work

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 vision, computational linguistics, and evolutionary algorithms, and data visualization.

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

Faculty and student interaction

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 lab work

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
Students working in immersive experience lab

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 Design and Development examines methodologies for the effective development of large-scale software packages and uses a team approach to apply principles to actual projects that serve the needs of clients within the local community.
  • Software Development Leadership offers experience working with clients and mentoring and supervising peers in teams developing software for community organizations.

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