Lectures:  MWF 11:05-11:55 am
Location:  CCB 102

Instructor:  Edmond Chow
E-mail: 
Office Hours: Fridays, 3-4 pm, KACB 1312

TA: Guru Srinagesh
TA E-mail: gsrinagesh3@gatech.edu
TA Office Hours: Tuesdays and Thursdays, 10:30-11:30 am, in the lounge area next to KACB 1332



Course Description

This course is designed for advanced undergraduate students in science and engineering who are not CS majors but who wish to learn C programming, algorithms, and data structures. The course will sample important topics from the CS curriculum and give the students an ability to pursue further topics on their own. Topics will be presented rigorously, but also at a level and in an environment suitable for science and engineering students. Because a large amount of material will be covered, this course has a heavy work load; in particular, students will be expected to devote a significant amount of time to practice and develop computer programming skills. There will be a substantial amount of in-class group work, including coding workshops where students will critique each other's work.

Development of computer software to solve problems in science and engineering. Computing principles, computer architecture, algorithms and data structures; software development methodologies and tools; introduction to advanced topics such as parallelism and object-oriented design.

Prerequisites

Some experience with a programming language, such as Matlab, Python, Java, FORTRAN, C/C++.

Topics

Starting from real-world problems that commonly arise in science and engineering, students will develop the knowledge and skills needed to develop computational solutions to attack these problems. Topics include:
  • Computational problems in science and engineering
  • Computer architecture necessary to understanding program behavior and performance
  • Elementary data structures, including arrays, lists, trees, graphs, hash tables, heaps
  • Algorithms and their analysis, including dynamic programming and concepts of complexity
  • C programming, including a basic introduction to system-level programming
  • Software engineering methodologies (best practices for code design, debugging, testing, documentation, revision control)
  • Advanced programming concepts such as object-oriented design, parallel computing

Modules

The course is composed of five modules, roughly corresponding to core topics covered in the School of Computational Science and Engineering. Each module is roughly three weeks. Each module has a Programming Problem Set due at the end of the module. The modules are:
  • Numerical Algorithms
  • Data Analysis and Machine Learning
  • Modeling and Simulation
  • Graphs and Social Networks
  • Parallel Computing

Grading

30% Peer evaluation on exercises and coding workshops

50% Programming problems (two-stage submission)

20% In-class exams (dates: Nov. 9, Nov. 18, Dec. 2). Note that there will be an in-class exam on Dec. 2, after Thanksgiving and during Dead Week. Class on Dec. 4 is cancelled. Exams will be open-book. You can bring any non-electronic resource. No laptops, tablets, phones, etc.

Learning Outcomes

  • Design algorithms and write computer programs to solve problems arising in science and engineering
  • Apply software engineering best practices and coding style guidelines, particularly data abstraction, in the development of software
  • Choose and evaluate data structures and algorithms appropriate for solving specific problems
  • Understand how computer architecture affects the performance of a computer program

Course Announcements

Please monitor the following web site for announcements and miscellaneous notes: http://edmondchow.com/files/cx4010.txt . Be sure to refresh your browser window as needed.

Computer Resources

You may use any computer with a C compiler for this course. If you need an account on a Linux computer with a C compiler, an account can be created for you on joker.cc.gatech.edu or gotham.cc.gatech.edu (some of you have accounts on another machine called robin.cc.gt.atl.ga.us). From a PC, you will need putty or another ssh program to remotely log onto these machines, and possibly to copy files back and forth between these machines and your local machine.

Textbooks

There is no required textbook for this course. The following texts are recommended. You are also encouraged to use any texts you find suitable for the course (many are available, at different levels of sophistication).
  • C Programming Language, 2nd edition, by B. W. Kernighan and D. M. Ritchie
  • C Programming: A Modern Approach, 2nd edition, by K. N. King
  • Introduction to Algorithms, by T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein
  • Software Design for Engineers and Scientists, by J. A. Robinson

Collaboration, Citing, and Honor Code

Students are expected to follow the Georgia Tech Honor Code. Students are encouraged to work together and help each other on assignments and preparing for exams. However, submitted assignments must be individual work. One way to comply with this is to destroy any notes taken while consulting with other students before writing your own code. If you use the Web or other sources for any information, you must cite these sources in your assignment submission. You are encouraged to use the Web for information, but copying code from the Web without citation violates the Honor Code.