**Discrete Mathematics and Application**

Discrete mathematics is the study of mathematical structures that are fundamentally discrete rather than continuous. In contrast to real numbers that have the property of varying smoothly, the objects studied in discrete mathematics - such as integers, graphs, and statements in logic do not vary smoothly in this way, but have distinct, separated values. discrete mathematics has been characterized as the branch of mathematics dealing with countable sets. However, there is no exact, universally agreed, definition of the term discrete mathematics. Indeed, discrete mathematics is described less by what is included than by what is excluded: continuously varying quantities and related notions.

**Fundamentals of Data Structures**

This course investigates the definitions, implementations, and functions related to non-numerical data objects. The content of this course consists of the basic methods for time-space complexity analysis; fundamental data structures for stack, queue, list, tree and graph; implementations and analysis of sorting and searching. Students are supposed to learn how to organize data, to represent problems in a computer, to select the optimal data structure and algorithm for a specific problem, and hence improve their ability of programming.

**Logic & Computer Design Fundamentals**

The aim of the course is to introduce basic theory and design methods for digital logic. The course covers number representation, digital codes, boolean algebra and logic minimization techniques, sources of delay in combinational circuits and effect on circuit performance, survey of common combinational circuit components, sequential circuit design and analysis; timing analysis of sequential circuits, concept of programmable logic devices and memories. The language used in the course can be English.

**Computer Organization**

[Computer Organization and Design] is a required course for computer college students. It is a base for many courses like computer architecture, OS, Compiler, etc. The emphasis of this course is to show the relationship between hardware and software, and to focus on the concepts that are the basis for current computer. The main content includes ARM/MIPS assembler language, arithmetic, single- and multi- cycle datapath design, microprogram, memory hierarchy, and I/O system. Experimental teaching is the very important aspects of teaching to train high-quality, innovative talents. It will promote the experimental reform for computer design. Improve teaching quality. The experimental program enables students to further consolidate textbook knowledge and the application of theory to practice. Improve their agility and the ability to solve practical problems. The basic requirement for the Experiments is to finish single-cycle and multi-cycle CPU design using field programmable devices (FPGA).

**Object-Oriented Programming**

Students will grasp the concepts and method of object-oriented programming through the study of principle and practice. They will be required to build good programming style which accord with modern software design. Students will grasp C++ language skillfully, basically know how it runs, be able to do object-oriented programming using C++ skillfully. Totally, this course will guide students to have the ability of software analysis, design and coding, as well as the ability of cooperate developing.

**Principles of Operating System**

Learning and understanding the operating system’s role in a computer system. Learning the resource management technologies used by operating system, Learning operating system concepts, methods, algorithms, technology. The course includes sessions of introduction, process management, memory management, file system management, I/O system, and some selected advanced topics.

**Advanced Data Structures and Algorithms**

This course is based on the fundamentals of data structures. It continues to investigate the definitions, implementations, and algorithms related to non-numerical data objects. The content of this course consists of two parts: the first part is for advanced data structures, such as the variations of binary search trees and the inverted file index for searching big data sets, and various optimizations of the priority queues and the amortized analysis; the second part is for classical algorithms, such as divide and conquer, dynamic programming, greedy, back tracking, together with approximation methods, local search, and randomized algorithms. Parallel algorithms and external sorting will be introduced as well.Students are supposed to learn how to solve complicated problems with advanced programming skills, and how to give the performance a mathematical analysis, and hence build a firm foundation for studying further theories in computer science.

**Theory of Computation**

This is a theoretical course designed for graduated students. There are 32 academic hours in total. This course covers the theory of automata and formal languages, computability by Turing machines and recursive functions, incommutability. This term is devoted to establishing a foundation for the formal study of computation. This foundation consists of tools from mathematics such as set theory, logic, and graph theory, and concepts from theoretical computer science, such as formal languages, abstract machines.

**Compiler Principle**

Compiler Principle introduces major components of a compiler including: preprocessor, scanner, parser, symbol table. Code generator, semantic analyzer and target code optimizer will also be introduced simply. Students are assumed to learn the following fundamentals: regular expression, automation, context-free grammars and etc, and they are supposed to grasp the lexical analyzer basing automation, the parser of top-down parsing, bottom-up parsing and the syntax-directed translation.

**Fundamentals of Computer Networks**

From the perspective of network architecture, network principles and related fundamental concepts and methods in digital communication, internetworking and advanced protocols are introduced in this course. Some significant functions and relative protocols in network architecture together with recent developments of network and their technologies are also introduced. Students can get familiar with fundamental computer network principles and basic knowledge of the field through the course learning. And a thorough understanding of commonly used network and network security technology can be obtained with intimate knowledge of network architecture, functional principles and several of network protocols (especially that of TCP/IP).

**Computer Architecture**

This course is one of the most important professional courses in computer science that systemically introduce the fundamental concepts and design approaches of computer architecture from the view of the whole computer system. The topics cover fundamental concepts, task of computer design, quantitative principles, and performance evaluation; instruction set architecture and characteristics of CISC and RISC machines; basic concepts for pipelining, causes and resolutions for pipeline hazards; memory hierarchy, improvement of cache performance; I/O storages; and basic concepts for multiprocessors. At the same time, the students are required to master the hardware design approaches and skillfully use hardware design toolkits. In the lab we will introduce how to gradually implement the pipelined CPU supporting 31 MIPS instructions in Xilinx ISE environment using Verilog, and verify its correctness on FPGA board.

**Principles of Database Systems**

Database is the cornerstone of modern information society. The course introduces the fundamental principles of database systems, including the overview of database systems, the relational data model, relational database standard language SQL, database design and entity-relationship data model, relational formalization, database application programming, object-relational model, and XML etc. Students are expected to have fully understanding of the basic concepts of database systems, and be able to use database management systems and develop database applications.

**Software Engineering**

Software Engineering guides the students to understand the significance of some fundamental concepts of software engineering. The frame works are introduced, such as software process models, software engineering methods and tools, and software management. Both conventional methods and object-oriented methods are discussed. Projects are assigned to help students experience the life-cycle of software during practice, including requirement analysis, system design, and component-level design, coding, testing, maintenance, and team work. Students will learnt to use conventional tools such as data flow diagrams, data dictionary, entity-relation diagrams, and system hierarchy; as well as object-oriented tools such as use-cases, even trace diagrams, state transition diagrams and CRC cards.

**Network Security Theory and Practice**

This course is aimed to provide students with a solid understanding of key concepts and techniques of network security. It provides in-depth theoretical coverage of recent advancements and practical solutions to network security threats. Through these courses, students could understand the basic theory, techniques and solutions of network security, know how to setup the basic defense line for a network system.

**Principles of Information Security**

Help students understand various issues of information security, such as confidentiality, integrity, availability; authentication models; protection models; security kernels; secure programming; audit; intrusion detection and response; operational security issues; physical security issues; personnel security; policy formation and enforcement; access controls; information flow; legal and social issues; identification and authentication in local and distributed systems; classification and trust modeling; risk assessment. and authentication in local and distributed systems; classification and trust modeling; risk assessment.

**Information Security: General Practice**

This course will focus on information system penetration (hacking). The class will introduce basic theory for many different types of attacks; then we will actually carry them out in 'real-world’ settings. During the course, we will read and discuss papers written by professors as well as hackers. We will learn about different types of hacks and perform them. After learning how to execute such exploits and penetrate a network, we will discuss ways to protect a network from others exploiting the same vulnerabilities.