This course includes materials on AI programming, logic, search, game playing, machine learning, natural language understanding, and robotics, which will introduce the student to AI methods, tools, and techniques, their application to computational problems, and their contribution to understanding intelligence. The material is introductory; the readings cite many resources outside those assigned in this course, and students are encouraged to explore these resources to pursue topics of interest. Upon successful completion of this course, the student will be able to: Describe the major applications, topics, and research areas of artificial intelligence (AI), including search, machine learning, knowledge representation and inference, natural language processing, vision, and robotics; Apply basic techniques of AI in computational solutions to problems; Discuss the role of AI research areas in growing the understanding of human intelligence; Identify the boundaries of the capabilities of current AI systems. (Computer Science 405)
This course introduces the compilation process, presenting foundational topics on formal languages and outline each of the essential compiler steps: scanning, parsing, translation and semantic analysis, code generation, and optimization. Upon successful completion of this course, the student will be able to: describe the compilation process and explain the function of the components that comprise the structure of a compiler; apply concepts of formal languages and finite-state machines to the translation of computer languages; identify the compiler techniques, methods, and tools that are applicable to other software applications; describe the challenges and state-of-the-practice of compiler theory and practice. This free course may be completed online at any time. (Computer Science 304)
This course introduces cryptography by addressing topics such as ciphers that were used before World War II, block cipher algorithms, the advanced encryption standard for a symmetric-key encryption adopted by the U.S. government, MD5 and SHA-1 hash functions, and the message authentication code. The course will focus on public key cryptography (as exemplified by the RSA algorithm), elliptic curves, the Diffie-Hellman key exchange, and the elliptic curve discrete logarithm problem. The course concludes with key exchange methods, study signature schemes, and discussion of public key infrastructure. Note: It is strongly recommended that you complete an abstract algebra course (such as the Saylor FoundationĺÎĺ_ĺĚĺ_s MA231) before taking this course. Upon successful completion of this course, students will be able to: explain how symmetric and asymmetric key ciphers work; list and define cryptographyĺÎĺ_ĺĚĺ_s goals; list and define the most common classical ciphers; explain the workings of mechanical ciphers Enigma and Lorenz; describe the principles of substitution-permutation networks; describe the algorithms for data encryption and the advanced encryption standard; describe and use the MD5 and SHA-1 hash functions; explain the idea behind public key cryptography; use the RSA cryptography system by applying it to practical problems; test whether the large integer is prime with the mathematical tools presented in this course; define the elliptic curve and use it in cryptography; explain the Diffie-Hellman key exchange; describe the most common signature and autokey identity schemes; describe the conceptual workings of public key infrastructure. This free course may be completed online at any time. (Computer Science 409)
Foundations of Computation is a free textbook for a one-semester course in theoretical computer science. It has been used for several years in a course at Hobart and William Smith Colleges. The course has no prerequisites other than introductory computer programming. The first half of the course covers material on logic, sets, and functions that would often be taught in a course in discrete mathematics. The second part covers material on automata, formal languages, and grammar that would ordinarily be encountered in an upper level course in theoretical computer science.
The single most important skill for a computer scientist is problem solving. The goal of this book is to teach you to think like a computer scientist.
Python is a fun and extremely easy-to-use programming language that has steadily gained in popularity over the last few years. Developed over ten years ago by Guido van Rossum, Python's simple syntax and overall feel is largely derived from ABC, a teaching language that was developed in the 1980's. However, Python was also created to solve real problems and it borrows a wide variety of features from programming languages such as C++, Java, Modula-3, and Scheme. Because of this, one of Python's most remarkable features is its broad appeal to professional software developers, scientists, researchers, artists, and educators. 278 page pdf file.
Introduction to the Modeling and Analysis of Complex Systems introduces students to mathematical/computational modeling and analysis developed in the emerging interdisciplinary field of Complex Systems Science. Complex systems are systems made of a large number of microscopic components interacting with each other in nontrivial ways. Many real-world systems can be understood as complex systems, where critically important information resides in the relationships between the parts and not necessarily within the parts themselves. This textbook offers an accessible yet technically-oriented introduction to the modeling and analysis of complex systems. The topics covered include: fundamentals of modeling, basics of dynamical systems, discrete-time models, continuous-time models, bifurcations, chaos, cellular automata, continuous field models, static networks, dynamic networks, and agent-based models. Most of these topics are discussed in two chapters, one focusing on computational modeling and the other on mathematical analysis. This unique approach provides a comprehensive view of related concepts and techniques, and allows readers and instructors to flexibly choose relevant materials based on their objectives and needs. Python sample codes are provided for each modeling example.
The Little Book of Semaphores is a free (in both senses of the word) textbook that introduces the principles of synchronization for concurrent programming.In most computer science curricula, synchronization is a module in an Operating Systems class. OS textbooks present a standard set of problems with a standard set of solutions, but most students don't get a good understanding of the material or the ability to solve similar problems.The approach of this book is to identify patterns that are useful for a variety of synchronization problems and then show how they can be assembled into solutions. After each problem, the book offers a hint before showing a solution, giving students a better chance of discovering solutions on their own.The book covers the classical problems, including "Readers-writers," "Producer-consumer", and "Dining Philosophers." In addition, it collects a number of not-so-classical problems, some written by the author and some by other teachers and textbook writers. Readers are invited to create and submit new problems.
Web development is an evolving amalgamation of languages that work in concert to receive, modify, and deliver information between parties using the Internet as a mechanism of delivery.
While it is easy to describe conceptually, implementation is accompanied by an overwhelming variety of languages, platforms, templates, frameworks, guidelines, and standards. Navigating a project from concept to completion often requires more than mastery of one or two complementing languages, meaning today’s developers need both breadth, and depth, of knowledge to be effective.
This text provides the developer with an understanding of the various elements of web development by focusing on the concepts and fundamentals through the examples within, providing a foundation that allows easier transition to other languages and a better understanding of how to approach their work. The reader will be introduced to topics in a manner that follows most project development methods, from initial conceptualization and design through front end development, back end development, and introducing additional concepts like accessibility and security, while focusing on responsive design techniques. Each section of the text includes opportunities to practice the material and assess increased knowledge after examining the topics.
Offered as an introduction to the field of data structures and algorithms, Open Data Structures covers the implementation and analysis of data structures for sequences (lists), queues, priority queues, unordered dictionaries, ordered dictionaries, and graphs. Focusing on a mathematically rigorous approach that is fast, practical, and efficient, Morin clearly and briskly presents instruction along with source code.
Analyzed and implemented in Java, the data structures presented in the book include stacks, queues, deques, and lists implemented as arrays and linked-lists; space-efficient implementations of lists; skip lists; hash tables and hash codes; binary search trees including treaps, scapegoat trees, and red-black trees; integer searching structures including binary tries, x-fast tries, and y-fast tries; heaps, including implicit binary heaps and randomized meldable heaps; graphs, including adjacency matrix and adjacency list representations; and B-trees.
A modern treatment of an essential computer science topic, Open Data Structures is a measured balance between classical topics and state-of-the art structures that will serve the needs of all undergraduate students or self-directed learners.
In this book, you will learn about all three kinds of interaction. In all three cases, interesting software techniques are needed in order to bring the computations into contact, yet keep them sufifciently at arm’s length that they don’t compromise each other’s reliability. The exciting challenge, then, is supporting controlled interaction. This includes support for computations that share a single computer and interact with one another, as your email and word processing programs do. It also includes support for data storage and network communication. This book describes how all these kinds of support are provided both by operating systems and by additional software layered on top of operating systems, which is known as middleware.
This course covers the entire family of programming languages, starting with an introduction to programming languages in general and a discussion of the features and functionality that make up a modern programming language. Upon successful completion of this course, the student will be able to: identify the common concepts used to create programming languages; compare and contrast factors and commands that affect the programming state illustrate how execution ordering affects programming; identify the basic objects and constructs in Object-Oriented Programming; explain the characteristics of pure functional functions in functional programming; describe the structures and components utilized in logical programming. (Computer Science 404)
Unlike some other textbooks, this one does not follow a top-down narrative. Rather it has the flow of a conversation, with backtracking. We will often build up programs incrementally, just as a pair of programmers would. We will include mistakes, not because I don’t know the answer, but because this is the best way for you to learn. Including mistakes makes it impossible for you to read passively: you must instead engage with the material, because you can never be sure of the veracity of what you’re reading.
The main programming language used in this book is Racket. Like with all operating systems, however, Racket actually supports a host of programming languages, so you must tell Racket which language you’re programming in.
This textbook has been used in classes at: Brown University, Cal Poly, Columbus State University, Northeastern University, NYU, Reed College, UC-San Diego, UC-Santa Cruz, University of Rhode Island, University of Utah, Westmont College, Williams College, and Worcester Polytechnic Institute.
This course presents software engineering concepts and principles in parallel with the software development life cycle. Topics addressed include the Software Development Life Cycle (SDLC), software modeling using Unified Modeling Language (UML), major phases of SDLC (Software Requirements and Analysis, Software Design, and Software Testing), and project management. Upon successful completion of this course, the student will be able to: demonstrate mastery of software engineering knowledge and skills, and professional issues necessary to practice software engineering; discuss principles of software engineering; describe software development life cycle models; learn principles of software modeling through UML as a modeling language; identify major activities and key deliverables in a software development life cycle during software requirements and analysis, software design, and software testing; apply the object-oriented methodology in software engineering to create UML artifacts for software analysis and requirements, software design, and software testing; apply project management concepts in a software engineering environment to manage project, people, and product; participate as an individual and as part of a team to deliver quality software systems. This free course may be completed online at any time. (Computer Science 302)
This book is about complexity science, data structures and algorithms, intermediate programming in Python, and the philosophy of science. This book focuses on discrete models, which include graphs, cellular automata, and agent-based models. They are often characterized by structure, rules and transitions rather than by equations. They tend to be more abstract than continuous models; in some cases there is no direct correspondence between the model and a physical system.
Think Java is an introduction to Java programming for beginners. It is tailored for students preparing for the Computer Science Advanced Placement (AP) Exam, but it is for anyone who wants to learn Java.
Think OS is an introduction to Operating Systems for programmers. In many computer science programs, Operating Systems is an advanced topic. By the time students take it, they usually know how to program in C, and they have probably taken a class in Computer Architecture. Usually the goal of the class is to expose students to the design and implementation of operating systems, with the implied assumption that some of them will do research in this area, or write part of an OS.
Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.
Scientific research and design is traditionally made to be published in books or magazines by use of text and images. The arrival of digital media and internet changed this dramatically and allowed new possibilities and far better accessibility of this work. Be this as it may, it is still paramount that the accuracy and completeness of published scientific work is maintained. This course will focus on this integrated concept, the learning of how to successfully make and publish your own website. In 6 lectures the several aspects of traditional scientific research will be treated by using the contemporary media. The course has the following study goals, that correspond with the given assignments and lectures: publishing own study and design work; making your work retrievable for others by use of key words; making use of digital media to describe own work; describing and evaluating of own work; making a bibliography and iconography; intrepretenting an image as a scientific document;describing in key words; compare images scientifically; deducting design types from image comparison; deducting design concepts from image comparison; deducting design models from image comparison; deducting design programs from image comparison; integrating different design concepts and becoming acquainted with research methods; defining an object of research, problem field, target field, design tools, own competence and context of research; formulating a site, context factors, motivation, design program, contribution, intended results and planning; justifying, referring and concluding of own work; giving and receiving professional critique.