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, 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.
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.
There is no required textbook. All materials are available for free online.
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.
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:
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.
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.
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 https://read.amazon.com/ 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.
There are no additional texts for CSC 322. You should, however, have copies of the CSC 321 texts.
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.
(Information forthcoming.)
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!
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!
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!
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)
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)
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.
The Computer Science Major balances requirements in foundational areas with some flexibility.
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:
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.
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.
Grinnell's computer science curriculum has several special strengths, including:
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:
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.
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.
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.
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.
|
|