----------------------------------------------------------------------------- COMS 1001: Introduction to Computers Columbia University Spring 2006 Department of Computer Science Michael E. Locasto Course Syllabus $Id: syllabus.txt,v 1.3 2006/01/16 22:13:40 locasto Exp $ ----------------------------------------------------------------------------- [OVERVIEW] Intended primarily for students in the humanities and not available to engineering students. General introduction to computer science, including the design of algorithms and computer hardware, as well as hands-on experience with applications such as spreadsheets, databases, and the World Wide Web. Introductory programming in Javascript and Bash. The student will also learn the software lifecycle and a formal, scientific method for creating, designing, and testing a solution to computing problems. This algorithmic way of thinking is broadly applicable to almost any problem encountered in this existence. The topics to be covered are viewed in the light of the four primary themes: - The History of Computers: from ancient times to modern day, how the computer was created, has evolved, and is used. - The Biology of Computers: the makeup and structure of computer hardware, what computers work on and manipulate, and how to speak their language. - The Art of Computers: algorithms, data structures, software works of art, operating systems, discrete math, computational complexity, theory of computation, software life cycle. - The Philosophy of Computers: privacy; hard and soft AI; business, professiona, and personal ethics; DMCA; music piracy; software piracy, open source, free software, proprietary software, security, problem abstraction, philosophy of problem solving. [LECTURE SCHEDULE] The schedule of lectures and assignments is located on the course web page at: http://www1.cs.columbia.edu/~locasto/teaching/s2006/coms1001/ [TOPICS] Topics to be covered include the following (list is not exhaustive): - Boolean logic, binary digits, bits, bytes - sets, functions, relations, graphs - digital logic, CPU, ALU, von Neumann architecture - machine code, assembly code - basic computer organization - fetch, decode, execute cycle - computational complexity, Big O notation - algorithms: sorting, searching - data structures - operating systems: protection, processes, files, threads, devices, resource management, synchronization, memory - programming languages: Javascript, Bash, awk, interpreted vs. compiled models of computation - HTML, Internet, network speeds, network model & layers - the command line and cmd line scripting (Bash and awk) - ethical considerations (licenses, codes of conduct, etc.) [Detailed Topics] * The Javascript Programming Language - the structure of the language - functions - variables - decision control structures - repetition control structures - standard functions - scripts - I/O - manipulating webpages - robust programming - simple problem solving - appropriate documentation * Problem Solving - problem requirements - getting more information, being specific, asking questions - design a solution - discover general principles - use and leverage existing tools, libraries, and techniques - psuedocode - first brute force approach - integrate testing, test cases, regression testing - document and present solution * Software Lifecycle - requirements - design - documentation - test construction - construction/implementation - testing - packaging and build process - maintenance [SCIENTIFIC SKILLS] Computer Science is a scientific discipline. As such, students are scientists in training and will earn the following skills: - gain an understanding of the world via generalizable problem-solving skills - acquire a philosophy of algorithmic thinking - develop the ability to identify and abstract away the unimportant details to reveal the core of a problem - nurture the ability to use abstraction in both problem identification and solution construction to provide general solutions, not just task-specific one-off hacks [TECHNICAL SKILLS] Computer Science is also a highly technical field that employs cutting-edge computation tools to implement ideas and automate tasks. As such, it is critical for students to be trained in mainstream programming languages. The student will earn the following technical skills: - learn the basics of the Javascript language - learn the fundamentals of the Unix/Linux command line - learn Bash scripting - an understanding of the execution environment in the Firefox web browser - an understanding of the execution environment on the Linux command line - learn to use the Unix 'man' pages. - develop the ability to document code correctly and tersely