COMP 290-079: Applied Optimization in Computational Biology

Instructor: Jack Snoeyink last name at cs (computer science). unc (u of north carolina). edu (educational)







How does a biologist or chemist learn what he needs to implement an effective computational procedure?

How does a computer scientist discover the important biological and chemical questions that she might help answer with effective computational procedures?

This seminar/working lab tries to bring students together to learn from each other, with a little guidance from the instructor.

As a computer scientist, I have found that I gain a deeper understanding of a problem in an application area when I look at the procedures that people try to use to solve them.

I have also found that when I do so, I can sometimes apply computer science tricks (table lookup, preallocation of memory) and concepts (dynamic programming, hierarchy, abstraction) to improve the procedures. Sometimes these things make the difference between an impossible task and a practical, effective implementation. (In a recent example, two students of mine sped up a search for hydrogen placements in a PDB file from six years to two minutes.)

And sometimes this becomes the basis for further interdisciplinary collaboration, which can be the most exciting, as all involved share in learning and contributing.

It is my hope that the biology and chemistry students will come with their problems, tools, and codes, and that the computer science students will find puzzles that they can help solve. In the process, all of the students will gain a better understanding of each others capabilities and undertakings, and there will be more opportunity for collaboration.


This seminar uses case studies in specific biological problems of interest to the class members to motivate algorithmic methods (e.g. dynamic programming), software engineering (e.g., code factoring and tuning), and languages and tools (e.g., Perl, MATLAB, debuggers, profilers).

I hope that students will be able to bring laptops so that there can be time for peer-to-peer discussion and one-on-one assistance, making this a working lab, and not just a presentation of case studies. If necessary, we will meet in a computer lab.


Participation is the primary requirement for this to be an effective seminar/working lab.

This is not a replacement for introductory courses in computer science. We assume that each student can write some sort of program, and that some students will want to learn more sophisticated techniques that apply to their particular problems, while other students will want to learn sophisticated problems that might be amenable to their particular techniques.


Course Information

COMP 290 - 079, Applied Optimization in Computational Biology, is a one credit seminar/working lab. Auditors and drop-ins welcome, but regular participation will be best.

Class Meeting Location and Times(s)

Thursdays, 4-5, in Beard Hall 116.

Complimentary Course Activities and/or Sub-groups

The blackboard courseinfo website will contain the up-to-date schedule. (, click on Course tab, search for course COMP290.079)

Course Materials

There is no required text, but several books have been placed on reserve in Brauer Math/Physics Library, including

Bentley: Programming Pearls. Wisdom from a master code tuner.

Fowler et al. Refactoring: Improving the Design of Existing Code.

Hunt, Thomas, Cunningham: The Pragmatic Programmer.

Scott Meyers: Effective C++, More Effective C++. A must for C++ programmers.

Harel: Algorithmics, the Sprit of Computing. An overview of algorithms from a series of radio lectures, believe it or not.


this syllabus was created with the assistance of the syllabus development guide, a project of unc-ch's center for teaching & learning