Acquire essential knowledge on the theoretical basis of computer science. Be able to analyze a problem and translate it into a computer program. Be able to write simple algorithms ("in the small") solving a well defined problem using a dynamic language. Use the fundamental data structures at the basis of all other complex data structures. Acquire the knowledge of the most basic algorithms, operating on their data structures. Be able to use classes as data structures in a program.