Prerequisite: Experience with an object-oriented programming language. A study of software development. Software engineering principles and structured methods are discussed as a prelude to the focus on object-oriented approaches. All phases of the software lifecycle are covered, including analysis, design, implementation and testing, and maintenance. Other topics include user interface design and development, software reuse and the design of reusable software components, software patterns, and web-based client-server programming. Four hours lecture. Offered every Fall.
Survey of contemporary computer organizations covering early systems, instruction set design, processor implementation (pipelining, multiple issue, and speculative execution), memory hierarchy design (on-chip and off-chip caches, translation-lookaside buffers, and virtual memory), input/output (devices, busses, and processor interfaces), performance evaluation, and current research topics. Project required. Four hours lecture.
Overview of local and wide-area computer networks and contemporary lower-layer network protocols. Topics to be chosen from: switched networks, broadcast networks, multiplexing, layered protocol models, physical aspects of data transmission, data-link protocols, network modeling, performance issues, and current research in network design. Term paper or project required.
Network application programming. Upper-layer protocols and their interfaces. Topics to be chosen from: TCP/IP, sockets, remote procedure calls, network management, client/server programming, internet protocols (FTP, SMTP, HTTP, and SNMP), higher-level interoperability (CORBA), performance issues, and security. Project required. Four hours lecture.
Introduction to shared- and distributed-memory architectures. Mechanisms for parallelism: locks, barriers, semaphores, monitors, message-passing, RPC, and active messages. Programming shared- and distributed-memory systems. Introduction to parallel algorithms and parallel performance prediction and measurement. Programming languages and libraries that support parallel and distributed computing. Four hours lecture.
Study of the foundations of computer systems and the hardware/software interface. Topics span the design, implementation, and programming of processor architectures, networks, and operating systems. Computer architecture topics include instruction set design, cache design, hardware virtual memory, and virtualization. Network topics include network interfaces, protocol design, and network programming. Operating system topics include kernel design, the system call interface, resource management, software virtual memory, and file systems. Programming projects required. Four hour lecture.
Prerequisite: requires knowledge of C/C++ and acquaintance with UNIX/Linux operating systems. This course focuses on advanced hardware and software topics in systems programming, such as device-driver design, interprocess communication, and kernel-module programming in the Linux environment. Four hours lecture.
Study of the design and implementation of modern operating systems. Topics chosen from: operating system structure, scheduling, protection, virtual memory, communication mechanisms, concurrency, threads, multiprocessor support, distributed systems, performance evaluation, and current operating systems research. Project required. Four hours lecture.
Bioinformatics, one of the fastest growing application areas in science, is the realm where computer science meets molecular biology. This course will build on students' expertise in either computer science or natural sciences and prepare them to enter bioinformatics in either research or industry. Students will be brought up to speed in the content area which is unfamiliar to them. Students will be introduced to genomics, proteomics and software tools of the trade such as Pymol and Blast. They will learn bioinformatics algorithms such as dynamic programming, hidden markov models and monte carlo. Prerequisites: proficiency in one of the following fields: computer science, biology, chemistry, or physics.
Bioinformatics, one of the fastest growing application areas of computer science and biology, is research oriented. Computer scientists provide their expertise in computation, algorithms and software design to biologists and chemists. Together they solve problems in biotechnology and create tools for scientific investigation. This course provides students with real-world experience in the design and development of a significant bioinformatics project. Our projects will be either research that may lead to publication, or creation of software tools for use by the scientific community, in partnership with industry. Prerequisites: proficiency in one of the following fields: computer science, biology, chemistry, or physics.
Study of the design and implementation of software development languages. Topics chosen from: syntax, semantics, translation, run-time systems, advanced programming techniques, and debugging. Language families to be chosen include: functional, logic, visual, formal specification, design, pattern, database, and concurrent. Project required. Four hours lecture.
Use of artificial intelligence techniques to solve large scale problems. Search strategies, knowledge representation, and other topics chosen from: simulated annealing, constraint satisfaction, logical and probabilistic reasoning, machine learning, expert systems, natural language processing, neural networks, genetic algorithms, and fuzzy logic. Both theoretical foundations and practical applications will be covered. Coursework includes written assignments and programming projects. Four hours lecture.
Algorithm analysis and asymptotic running time estimates. Expected running times and amortized analysis. Design techniques, including divide and conquer, greedy, and dynamic programming. Algorithms for searching and sorting, graphs, and advanced topics. Four hours lecture.
Topics to be chosen from: models of computation and formal languages, computability and complexity, P and NP completeness and P = NP, advanced computing models. Four hours lecture.
Survey of Internet systems research including the anatomy of the web, search engine architecture and algorithms, information retrieval, crawling, text analysis, personalization and context, collaborative environments, and the semantic web.
This course explores the foundations of security in privacy, exploring the fundamental principles, formal models, frameworks, and theoretical results that underly modern-day security and privacy. The emphasis in this course will be on written assignments, projects, and exams.
Internet application development, including server-side technologies such as scripting languages, template frameworks, web page mining, and distributed computing issues such as peer-to-peer, multi-cast, and distributed agents.
Learn the basics of computer security and the details of important network security protocols such as SSL/TLS. Topics include: symmetric key cryptography, public key cryptography, secure hash, wireless security, spam filtering, biometric.
Design principles and techniques used to facilitate the interaction between people and computers. Topics covered include user-interface design and evaluation, web site design, prototyping, usability engineering, presenting complex information, hypertext, multimedia, scientific visualization, input devices, ubiquitous computing, and cognitive models.
Study of the design and implementation of wireless sensing systems. Topics include communication, coordination, self organization, and energy e¿ciency. Necessary background material in networking and distributed systems will be covered.
Topics not covered by other CS curricular offerings. Students may register for this class in more than one semester. Consent of instructor required. Offered intermittently.
A study of the effects of computing and the Internet on modern society. Topics include digital librairies, e-commerce, copyright law and open source movements, on-line communities, education and technology, and privacy and security.
Participation in a cooperative work program with one of the USF affiliated organizations. Typically, students will work in groups and be supervised jointly by both an affiliate manager and a USF professor.
Prerequisite: Regular Status. At the discretion of the instructor, the project will be either a sponsored project for a commercial concern or or other institution or a research project. In either case, the project will result in the specification, design, and development of a significant software system with full documentation, an oral presentation to the university community, and a written report. Four hours lecture. Offered every semester.
Exploration of research topics in Computer Science. Students will read academic papers, independently learn tools and technologies related to the area, present research findings, lead tutorials on relevant tools, and participate in group discussion.
Prerequisite: Practicum Option status. Approval of Graduate Advisor and good academic standing required. Participation in a supervised work program where students apply USF coursework knowledge in a practical setting. Work is supervised by a USF faculty member and a corporate sponsor.
Approval of Graduate Advisor and good academic standing required.