Computer Science is the study of information and algorithms within the context of real and abstract computing devices. Computer scientists are interested in such topics as the representation and storage of information; algorithms to access, display, edit, and transform information; programming languages to express algorithms; and hardware and software processors to execute algorithms. These concerns lead to practical developments in computer systems software, such as operating systems and compilers; in application areas, such as artificial intelligence, computer graphics, and computational biology; and also to theoretical investigations of computers, algorithms, and data.
Computer engineering is a closely related field concerned with the design and practical application of computer hardware and software systems to the solution of technological, economic, and societal problems. The computer engineer analyzes a problem and selects from a variety of tools and technologies those most appropriate for its solution. A computer engineer can expect to be involved in hardware design, software creation, and systems integration.
After acquiring enough knowledge and experience in computer engineering in the first three years, we motivate our students to engage in industrial training projects. In their fourth year, while taking several elective courses with which they can customize their careers according to their specific interests, they are also expected to propose and realize a graduation project.
CS 203 Programming in C
Design and analysis of programs in C. Students are expected to be familiar with structured programming concepts such as loops, conditionals, and primitive data types. Topics covered include pointers, single and multi-dimensional arrays, lists, stacks, queues, trees, and bit manipulation.
CS 302 Algorithms and Data Structures
A systematic study of the complexity of some elementary algorithms and data structures, such as: sorting, searching, graphs, trees, and hash tables. The course introduces formal tools for algorithm analysis such as order notation and recurrences, and techniques for efficient algorithm design such as divide and conquer. Emphasis is placed on the notion of abstract data types and comparative analysis of implementation efficiency. High-level programming (in Java or C) can be used throughout the course to illustrate these concepts.
CS 303 Logic Design
Number systems and conversion, Boolean algebra, the assertion level concept; minterm and maxterm expansions, Karnaugh maps and Quine McCluskey minimization, combinatorial logic circuit design, NAND and NOR gate based design. State machines and sequential circuits, flip-flops, minimization of state tables, state assignment. Higher-level digital system design using SSI-MSI blocks such as multiplexers/decoders, adders, memory and programmable gate arrays; bus oriented systems. Laboratory includes hardware design and CAD experiments.
CS 304 Computer Architecture
An introduction to modern computer architectures, Topics include: assembly language, design of digital logic circuits, organization of central processors (instruction sets, register transfer operations, control, microprogramming data representation, and arithmetic algorithms), memory and input/output organization.
CS 305 Programming Languages
This is a course on the principles, fundamental issues, and intrinsic tradeoffs involved in the design and implementation of contemporary programming languages. This includes an overview of the history and evolution of languages, and an introduction to formal methods of language translation. The course focuses on the different programming paradigms (imperative, object-oriented, functional, and logic), and uses languages such as C, C++, Java, Scheme, and Prolog to illustrate key concepts of each paradigm.
CS 306 Database Management
An introduction to fundamental concepts in the design and implementation of modern database management systems, with a focus on relational database systems, Topics include: entity-relationship and relational approaches to data modeling, database design theory, structured query processing with the SQL language, storage organization, indexing techniques. In addition to these traditional topics, the course also covers a sample of emerging topics, such as XML, distributed databases, and data mining.
CS 307 Operating Systems
This course introduces students to fundamental concepts of operating systems. It emphasizes structures, mechanisms, and principles, as well as key design issues and tradeoffs, behind modern operating systems. Topics include: processes, synchronizations and concurrency control, memory management, I/O and disk management. The course uses particular implementations of Unix-like and Windows operating systems to illustrate some concepts.
CS 308 Software Engineering
State of the art techniques in software design and development, Techniques covered will be illustrated and applied through hands-on laboratory work. Structured design, structured programming, top-down design and development, segmentation and modularization techniques, iterative enhancement, design and code inspection techniques, correctness, and chief-programmer teams, Course includes the development of a large software project.
CS 309 Advanced Logic Design
An introduction to the design and implementation of computer logic using methods commonly used in industry, Principles of discrete logic design are presented, including Boolean algebra, truth tables, logic gates, timing diagrams; finite-state machine design, logic optimization using both hand-compiled (Karnaugh maps) and automated techniques, along with the basics of the Verilog hardware description language (HDL). All aspects of logic design will be presented in conjunction with Verilog HDL. Design approaches using families of integrated programmable logic, as well as discrete gate logic will be covered.
CS 310 Human Computer Interaction
Human factors issues in the development of software, the use of database systems, and the design of interactive systems. Science base (theories, models, usability studies, and controlled experimentation), and software engineering with user interface development environments, Issues include: programming and command languages; menus, forms, and direct manipulation; graphical user interfaces, computer-supported cooperative work, information search and visualization; input/output devices; and display design.
CS 401 Advanced Computer Architecture
Input/output processors and techniques, Intra-system communication, buses, caches, Addressing and memory hierarchies, Microprogramming, parallelism, and pipelining
CS 402 Compiler Design
The design and implementation of compiler and run-time systems for high-level languages, and examines the interaction between language design, compiler design, and run-time organization. Topics covered include syntactic and lexical analysis, handling of user-defined types and type-checking, context analysis, code generation and optimization, and memory management and run-time organization.
CS 404 Artificial Intelligence
An introduction to areas and issues in artificial intelligence, including search, inference, knowledge representation, learning, vision, natural languages, expert systems, robotics. Implementation and application of programming languages (e.g., Lisp, Prolog, Smalltalk), programming techniques (e.g., pattern matching, discrimination networks), and control structures (e.g., agendas, data dependencies).
CS 405 Computer Graphics
A comprehensive introduction to computer graphics modeling, animation, and rendering, Topics covered include basic image processing, geometric transformations, geometric modeling of curves and surfaces, 3-D viewing, visibility algorithms, shading, ray tracing, and animation.
CS 406 Advanced Computer Graphics
A survey of state of the art rendering techniques in computer graphics, as well as fundamental and classical topics that are not usually covered in an undergraduate computer graphics course. Topics include: the object orientation of the graphics pipeline and scene graphs, analytical methods in graphics and the implementation of robust geometric algorithms, a survey of both photorealistic and non-photorealistic rendering, as well as recent texture synthesis methods and a survey of the different morphing methods.
CS 407 Theory of Computation
An introduction to the fundamental ideas and models underlying computing: finite automata, regular sets, pushdown automata, context-free grammars, Turing machines, undecidability, and complexity theory.
CS 408 Computer Networks
An introductory course about computer networks, The emphasis will be on the basic performance and engineering tradeoffs in the design and implementation of computer networks. Students will learn not only what computer networks are and how they work today, but also why they are designed the way they are and how they are likely to evolve in the future. We will draw examples primarily from the Internet. Topics to be covered include: LAN, congestion/flow/error control, routing, addressing, naming, multicasting, switching, internetworking, quality of service, and network security. There will be both written and programming assignments, and a substantial project involving the design and implementation of a complete protocol stack.
CS 410 Advanced Algorithm Design and Analysis
Advanced techniques for the design and analysis of computer algorithms to efficiently solve basic computational problems, The course discusses specific algorithms for many problem areas (searching, sorting, graphs, linear programming, computational geometry, and string matching), as well as general techniques for algorithm design and analysis (dynamic programming, greedy strategy, amortized analysis). It also introduces concept of dealing with hard/intractable problems, namely NP-Completeness and approximation algorithms. A variety of other advanced topics may be covered at the discretion of the instructor, such as parallel algorithms, randomized algorithms, geometric algorithms, low-level techniques for efficient programming, and cryptography.
CS 411 Advanced Software Engineering
Advanced methods and procedures for managing medium and large-scale software systems, with emphasis on modern techniques in software development used by practitioners. Topics include project planning, scheduling, cost estimation, project organizational types, staffing and training considerations, leading and motivating computer personnel, and methods for measuring and controlling a project. Students are required to complete a class project.
CS 412 Web Application Development
This course will introduce the PHP scripting language. Students will download and install the Apache Web Server, PHP, and MySQL database. In addition, the PHP installation in the SIS labs will be utilized. The course will cover programming concepts, client server architecture, database access and XHTML/Cascading style sheets. Students will write a full scale web application as their final project.
CS 413 Multimedia Systems
Multimedia systems, digital video compression techniques, operating system support for digital audio and video, as well as network and transport protocols for multimedia. An emphasis will be placed on current design issues.
CS 414 Computer Vision
Image understanding and analysis, study of the underlying image segmentation techniques, object measurements including shape and texture analysis, feature selection and extraction, multispectral image analysis, 3D imaging, computerized tomography, stereometry and stereoscopic imaging.
CS 415 Pattern Recognition
An introduction to basic concepts and classical techniques of pattern recognition, Topics include: Bayes decision theory, parametric and nonparametric classification techniques, discriminant functions, supervised and unsupervised learning, feature selection, neural networks.
CS 416 Parallel Processing
Data parallelism, multi-processor architectures, process communication, data sharing, synchronous parallelism, multi-computer architecture, data partitioning, distributed memory, scheduling parallel program, object oriented parallel programming.
CS 417 Design of Network Protocols
Methods and solutions in design of distributed application layer protocols: Architecture, ports, layering, protocols, authentication, connection-less and connection-oriented protocols, chaining, referral, multicasting, replication and caching.
CS 418 Distributed Operating Systems
Concepts and design of distributed systems, basic distributed algorithms for classical problems such as mutual exclusion and global snapshots, fault tolerance, distributed object-oriented middleware platforms, client/server architecture, underlying communication paradigms and protocols.
CS 419 Computer and Network Security
Introduction to Network Security, Hackers and Crackers, Internal Security, Hacking, Spoofing Attacks, Personal Privacy, Firewalls, Vulnerability Assessment Tools (Scanners), Intrusion Detection Systems, Logging Tools, Password Security, Sniffers, Denial-of-Service Attacks, Viruses and Worms, Trojans, Network Architecture Considerations, Secure Application Development, Languages, and Extensions, Wireless Security Auditing, Building Security into the Network, Troubleshooting Tools and Methodology, Cryptography, Firewall Security and Concepts.
CS 420 Network Programming
Browsing pages on the Web, Parsing and rendering HTML, Sending email with SMTP, Receiving email with POP and IMAP, Writing multithreaded servers, Installing new protocol and content handlers into browsers, Encrypting communications for confidentiality, authentication, and guaranteed message integrity, Designing GUI clients for network services, Posting data to CGI programs, Looking up hosts using DNS, Downloading files with anonymous FTP, Connecting sockets for low-level network communication.
CS 421 Mobile Programming
WAP, Bluetooth, and 3G: A Brief Introduction, WML and WML Script Programming, Introduction to J2ME, Introduction to MIDP, MIDP 2.0 and the JTWI, Java APIs for Bluetooth Wireless Technology, Writing Quality Code for Smartphones, Making Java Code Portable, Writing Optimized Code, Advanced 3G Programming, Mobile Messaging Applications, Mobile Databases and Synchronization Engines, Mobile Databases for MIDP Devices, XML and Mobile Web Services, Advanced Mobile Security
CS 422 Wireless and MobileNetworks
Mobile Agent Platforms and Systems, Mobile Agent-based Service Implementation, Wireless Local Area Networks, Wireless Protocols, Protocols for Wireless Applications, Network Architecture Supporting Wireless Applications, XML, RDF, and CC/PP, Architecture of Wireless LANs, Routing Protocols in Mobile and Wireless Networks, Handoff in Mobile and Wireless Networks, Signaling Traffic in Wireless ATM Networks, Two-phase Combined QoS-based Handoff Scheme