Course Abstract: There's a lot more to programming than learning computer languages and writing code. There's the business of designing algorithms -- that is, the business of thinking up informal pseudocode specifications of how you will solve your problem of interest. How do you design algorithms that can be implemented as programs that run fast and use the smallest possible amount of computer memory? Moreover, given a set of algorithms for a particular problem, how do you pick the best algorithm for solving your instances of that problem? This course will introduce the basics of algorithm design and analysis by examining a set of algorithms for two of the classic problems in Computer Science, the Searching problem (given a list of names and a name X, is X in the list?) and the Sorting Problem (Given a list of names, compute the list in which these names are sorted in alphabetical order).