Bachelors of Science in Computer Science
The Department of Computer Science offers the undergraduate degree Bachelor of Science in Computer Science (BSCS). As per NU policy and Bologna guidelines, the undergraduate degree program requires a minimum of 240 total ECTS credits.
Technical Electives for the BSCS degree can be satisfied by any non-required course at 200-level or above offered by the CS department, as well as the following courses offered by other departments:
- MATH 351 Introduction to Numerical Methods with Applications
- MATH 407 Introduction to Graph Theory
- MATH 417 Cryptography
- PHYS 270 Computational Physics
- ROBT 310 Image Processing
- ROBT 407 Statistical Methods and Machine Learning
The Natural Science Electives for the BSCS degree can be satisfied by courses offered by Physics, Chemistry, Biology, and Geology at 100-level or above that are not designated for "non-science majors", and are not specifically required for the major.
The Communications 2 (CORE) requirement for the BSCS degree can be satisfied by WCS 202, WCS 210, WCS 230, or WCS 240.
Minor in Computer Science
Students from other departments of SEDS or other schools within NU can earn a “minor” in Computer Science by completing a minimum of six (6) courses, constituting a minimum of 40 ECTS credits. The two specifically required courses are:
- CSCI 151 Programming for Scientists and Engineers (8 ECTS credits)
- CSCI 152 Performance and Data Structures (8 ECTS credits)
The additional 24 ECTS credits must be earned through additional courses offered by the CS department at 200-level or above, excluding internships (CSCI 299 and CSCI 399) and including no more than one Directed Study course (CSCI 398).
Industries where the major can be applied:
- Computer hardware and software
- Information Technology
- Government
- Education
- Healthcare and Medicine
- Banking
- Military
- Research and Development in Engineering and Sciences
- Any sector that uses computers
Current Four Year Course Schedule
(Applies to students starting Fall 2018 or after)
Year 1 |
|
Semester 1 (30 ECTS) | Semester 2 (30 ECTS) |
MATH 161 Calculus I | MATH 162 Calculus II |
PHYS 161 Physics I with Lab | PHYS 162 Physics II with Lab |
CSCI 151 Programming for Scientists and Engineers | CSCI 152 Performance and Data Structures |
HST 100 History of Kazakhstan (CORE) | SHSS 150 (CORE Comm 1) |
Year 2 |
|
Semester 3 (34 ECTS) | Semester 4 (32 ECTS) |
CSCI 231 Computer Systems & Organization | CSCI 272 Formal Languages |
CSCI 235 Programming Languages | CSCI 270 Algorithms |
MATH 273 Linear Algebra with Applications | ROBT 206 Microcontrollers with Lab |
MATH 251 Discrete Mathematics | MATH 321 Probability |
SHSS Communications 2 (CORE) | Kazakh Language 1 (CORE) |
Year 3 |
|
Semester 5 (30 ECTS) | Semester 6 (30 ECTS) |
CSCI 390 Artificial Intelligence | CSCI 333 Computer Networks |
CSCI 341 Database Systems | CSCI 332 Operating Systems |
CSCI 361 Software Engineering | CSCI 307 Research Methods (CORE) |
Natural Science Elective 1 | Natural Science Elective 2 |
Kazakh Language 2 (CORE) | CORE Entrepreneurship |
Year 4 |
|
Semester 7 (30 ECTS) | Semester 8 (24 ECTS) |
CSCI 408 Senior Project I | CSCI 409 Senior Project II |
Technical Elective 1 | Technical Elective 3 |
Technical Elective 2 | Technical Elective 4 |
Free Elective 1 | |
HSS Social Science (CORE) | CORE Ethics |
Total number of Credits: 240 ECTS
Previous CS Undergraduate Curriculum
(Applies to current students who started before Fall 2018)
Year 1 |
|
Semester 1 (30 ECTS) | Semester 2 (30 ECTS) |
MATH 161 Calculus I | MATH 162 Calculus II |
PHYS 161 Physics I with Lab | PHYS 162 Physics II with Lab |
CSCI 151 Programming for Scientists and Engineers | CSCI 152 Performance and Data Structures |
HST 100 History of Kazakhstan | Kazakh Language 1 |
Year 2 |
|
Semester 3 (34 ECTS) | Semester 4 (32 ECTS) |
CSCI 231 Computer Systems & Organization | CSCI 272 Formal Languages |
CSCI 235 Programming Languages | CSCI 270 Algorithms |
MATH 273 Linear Algebra with Applications | ROBT 206 Microcontrollers with Lab |
MATH 251 Discrete Mathematics | MATH 321 Probability |
Kazakh Language 2 | HSS Elective 1 |
Year 3 |
|
Semester 5 (30 ECTS) | Semester 6 (30 ECTS) |
CSCI 390 Artificial Intelligence | CSCI 333 Computer Networks |
CSCI 341 Database Systems | CSCI 332 Operating Systems |
CSCI 361 Software Engineering | CSCI 307 Research Methods (CORE) |
Natural Science Elective 1 | Natural Science Elective 2 |
HSS Elective 2 | HSS Elective 3 |
Year 4 |
|
Semester 7 (30 ECTS) | Semester 8 (24 ECTS) |
CSCI 408 Senior Project I | CSCI 409 Senior Project II |
Technical Elective 1 | Technical Elective 3 |
Technical Elective 2 | Technical Elective 4 |
Free Elective 1 | |
HSS Social Science (CORE) | CORE Ethics |
Total number of Credits: 240 ECTS
Undergraduate Course Descriptions
This course is an introduction to Computer Science, designed for non-science majors. It covers the principle ideas in computing, including programming, data encoding, machine architecture, networking, the internet and the web, algorithms, databases and artificial intelligence.
The course is designed to provide insight and understanding of the protocols and technical characteristics of the Internet, web pages, spreadsheets, graphs, and programming. It will introduce students to computer-based tools and methods that will be useful throughout their university careers by developing skills in gathering data, performing routine analysis, and correctly presenting the results in a professional manner in documents, presentations, and web pages.
The course introduces students to the fundamentals of programming and the development of basic algorithms to solve problems, with a focus on data gathering and analysis. Students will learn the proper use of variables, control structures, loops, and functions, along with the creation and use of sequential and compound data types.
The course introduces students to imperative programming and the development of basic algorithms using the C programming language. A detailed presentation of the language syntax will be given, along with the proper use of control structures, loops, functions, and recursion to solve problems. The creation and use of structures and arrays will also be covered, along with the development of libraries and multi-file programs.
Students will examine and implement major data structures in C++, and compare their implementation using both static and dynamic memory allocation techniques. Assignments will require the students to assess problems and choose appropriate structures and relevant algorithms to achieve higher performance and understand the practical limits of computability.
The course will address the design and fundamental organization of computing systems, from the representation of instructions and data to the flow of control and interaction with system components. Topics include memory management, storage systems, processor architectures, and low-level programming in the MIPS assembly language.
The course provides an overview of the major conceptual paradigms of programming languages, from their theoretical foundations to practical implementation. Topics will include the programming language categories of imperative, logical, functional, and object-oriented. Students should possess mastery of at least one high-level language, and are expected to implement coding assignments in each of the paradigms as part of the course.
This is a very hands-on course involving the development of several apps and their corresponding cloud services or web infrastructure with a commercial or real-world application in a small team using an agile development process. Open for non-majors.
The information systems field is focused on the analysis of an organization and the subsequent design of solutions to meet business requirements. In this course, students discover and follow a structured process called the systems development life cycle that companies use to identify and solve business problems. In addition, alternative methodologies such as agile methods are also covered. Students learn tools and techniques for conducting projects, including how to gather system requirements, how to construct models of business processes using data flow diagrams, and gain hands-on experience with computer-aided software engineering (CASE) technology. Students practice the discipline of systems analysis and design by analyzing a hypothetical case situation. This course focuses on the systems analysis process, up to and including the development of a software requirements specification for a medium-sized information system.
The course gives a broad introduction to professional practices and software project management methodologies. Concepts such as the software lifecycle and process models will be covered in the course, along with past and current issues in the field. Project planning and management issues, including team organization and control, scheduling and tracking, risk analysis and mitigation, will also be key topics for discussion. Quality assurance, management and complexity metrics, along with tools for aiding in the project management task will also be covered. The PMBOK will be considered as well, providing the background knowledge necessary toward eventual PMP certification.
The course covers common strategies for designing efficient algorithms, and the analysis of their performance in terms of time and memory. Topics such as algorithm analysis (computational complexity and recurrence relations), searching and sorting, string processing, graph algorithms, and network flow are covered. Computational intractability and NP-completeness/NP-Hardness are also discussed in this course.
In this course, students will be introduced to formal languages and mathematical models of computation. The topics of finite state and pushdown automata, regular expressions, and context-free grammars will be covered, along with applications such as text processing and compilers. The later portion of the course will cover Turing machines and the Church-Turing Thesis.
This course focuses on the design and evaluation of human-computer interfaces covering topics such as: task analysis techniques for gathering design information, iterative design through prototyping, and formative and summative usability testing. Through both classical and contemporary literature in computer science and cognitive psychology, we review the theoretical foundations of HCI and cognitive modeling of user interactions as well as the use of user cognitive and psycho-motor capabilities and constraints to generate new interaction designs. In addition, the integration of HCI techniques into the software development life cycle are discussed and practiced in a group term project. While this course has no prerequisites, some knowledge of computing and programming are assumed.
Students can enroll for credit ranging from 1 to 3 credits, provided that the internship meets NU criteria, that a faculty member consents to serve as advisor, and that the student has completed a minimum of 60 credits prior to the start date of the internship.
The seminar will expose students to current issues, challenges, and research in the field of Computer Science. Faculty members will present active research projects, conducted both in Kazakhstan and with external collaborators. Students will familiarize themselves with the leading journals in the field, conduct literature reviews and give presentations on selected topics leading to the preparation and presentation of a survey paper written in a manner consistent with publication standards for our professional societies.
This course will provide an introduction to how to implement a large scale computations and data processing using parallel processing and distributed system organization. The areas that will be covered are: parallel computer architecture, shared-memory and message-passing approach, OpenMP, MPI, parallel computing applications, performance issues, GPU programming, CUDA, OpenCL , Clouds.
This is a course on the foundations mobile and ubiquitous computing. We will learn the fundamentals and acquire hands-on experience with mobile computing and sensors and actors of current mobile and wearable devices, like front and back camera, microphone, speaker, accelerometer, NFC, touchscreen, or external sensors. We will learn mobile application development and corresponding mobile GUI design. To extend the computational abilities and connectivity, we will develop and deploy simple cloud services. We will further study human computer interaction with a focus on touch-based interfaces, discuss and apply location based services, and analyze online payment systems. For the course projects, we will learn and apply agile programming concepts and development processes. Open for non-majors.
The course describes the main components of modern computer operating systems, starting with the kernel and covers topics such as resource allocation, process scheduling, memory management, filing systems, management of input and output devices, distributed systems, multi-processor systems, synchronization, and the trend towards “virtualization”.
The course presents all layers of TCP/IP protocol stack, including HTTP, FTP, POP, SMTP, DNS, Peer-to-peer and Client/Server paradigms, Socket programming, TCP, UDP, Flow control, Congestion control, IP, Internet routing, Error control, Multiple access techniques, Ethernet, Wireless Networks, CSMA, CSMA/CA/CD. The course also includes topics on network security such as Public-key cryptography, Secret-key cryptography, Authentication protocols, SSL, and IPSec.
This course will introduce students to the fundamentals of wireless sensor networking, from design to deployment. The design of wireless sensor networks will be covered at all levels of abstraction from the physical layer up to the application layer. Topics will include wireless signals and propagation, networking protocols, power management, data acquisition and processing, operating systems, and sensor modality and design. The course will cover major industrial and healthcare applications as well as related topics in pervasive computing such as the Internet of Things. Students will balance the theory with practice, gaining hands-on experience through team-based projects.
This is a first course in database management systems, with coverage of database design, architectures, data manipulation, relational algebra, normalization, query languages, and database integrity. Emphasizes concepts and techniques related to the entity-relationship model and relational database systems with an introduction to object-relational storage and the use of relational databases in a client-server context.
Introduction to data-mining techniques, including data preprocessing, data-mining primitives, association rules, decision trees, cluster analysis, classification and machine learning, data visualization, and data warehousing. Detailed applications from a wide variety of domains are analyzed with attention toward algorithm selection.
Students will receive practical experience in the generation and analysis of various software artifacts as part of the software engineering process through hands-on, group-based projects. Methods to effectively address software development in a team will be introduced and practiced. Each of the major steps of the development process, including specification, design, implementation, testing, and deployment will be covered in this course. Students will be introduced to scenarios and their use in system specification. Object-oriented analysis basics of the use of UML for systems modeling will also be covered. Group projects will include requirements gathering, specification, and system design tasks, and the development of tests.
This course will introduce the basic principles in artificial intelligence. Students will learn simple representation schemes, problem solving paradigms, constraint propagation, and search strategies. Students will study areas of AI application such as knowledge representation, natural language processing, expert systems, vision and robotics. Upon completion, students should be able to develop intelligent systems, understand the role of knowledge representation, problem solving, and learning in intelligent-system engineering, and appreciate the role of problem solving, vision, and language in understanding human intelligence from a computational perspective.
This course focuses on the application of computer intelligence methodologies and techniques, covering topics such as rule-based systems, fuzzy logic, artificial neural networks, evolutionary algorithms, knowledge engineering, ontologies, and hybrid systems. Throughout the semester, students will be applying these techniques to real-world problems, and are expected to develop a final project for the course.
Students can enroll for credit ranging from 1 to 3 credits, provided that the internship meets NU criteria, that a faculty member consents to serve as advisor, and that the student has completed a minimum of 90 credits prior to the start date of the internship.
Senior Project II is the second of a two-course sequence that serves as the capstone for CS majors, incorporating theory and practice from the preceding three years of coursework and internship experience. In the previous term, students in Senior Project I will have developed a project plan and solution design under the advisement of a faculty member. Senior Project II is dedicated to the actual implementation of the project, and to demonstrate technical competence and proof-of-concept. This two-course sequence should help prepare students for the experience of graduate work and employment as professionals in the field.
The course provides a broad overview of the fundamentals of information security, from user authentication to data transmission and storage, encryption, access controls and confidentiality, handling of sensitive or controlled information, operational and physical security, vulnerability assessment, security policy issues and their relation to risk assessment, security incident detection and response, and the rudiments of cyber forensics.
This course covers computational techniques for mining the large amount of information produced by recent advances in biology, such as genome sequencing and microarray technologies. Main topics of the course include: DNA and protein sequence alignment, phylogenetic trees, protein structure prediction, motif finding, microarray data analysis, gene/protein networks.
During this course students will be introduced to a variety of machine learning algorithms and techniques. Particular emphasis will be placed on understanding the theoretical basis. By the end of the course, students will be able to derive most commonly used methods mathematically from first principles and therefore have a firm grasp of the underlying theory. In addition, students will also be asked to implement various machine learning techniques from scratch in python during coding tutorials and thus also learn practical applications of the theoretical concepts.
In this course, students will learn several scripting languages and how to use them to areas such as web programming, data extraction, system integration, and rapid prototyping. They will also learn about how language concepts such as dynamic typing and scoping apply to scripting languages, and what makes them different from languages from other paradigms. Through assignments, students will gain a better understanding of how to effectively apply scripting, and the strengths and weaknesses of the different languages covered.
The course will start with the history of Open Source Software (OSS), the organization of OSS communities, the OSS production process and business models as well as its adoption, reuse and impact. As the central part of the course, each student will explore a number of active OSS projects, and take part in one.
The course covers the design and analysis of algorithms, and investigates the practical and theoretical limits of computing. We will investigate classic algorithmic approaches to solve computational problems, and the use of asymptotic analysis to quantify their efficiency. In addition, we will discuss the concepts of computational intractability, NP-completeness, Turing machines and computability.
During this course students will learn about the most important topics of Brain Computer Interfaces (BCI). Students will study basic neuroanatomy, neurophysiology as well as the neural basis of Electroencephalography (EEG). Event-Related Potentials (ERP), multi-variate ERP models as well as linear models of EEG will be introduced. Furthermore, some common data analytical tools will be covered, such as PCA, NCC, LDA/RLDA. Also, ERP as well as SMR-based BCI applications and SSVEP-based BCI will be introduced. At the end of the course, students will carry out a small project.
This course is a one semester course intended for students majoring in Computer Science. It introduces the students to the fundamental concepts of deep learning. The main themes of the course are Benefits, properties and challenges of Deep Learning; Introduction to Machine Learning and Optimization; Challenges and Common Approaches; Logistics Regression; Gradient Descent; Perceptron Learning; Stochastic gradient descent; Multi-layer Perceptron; Non-linearity in ANNs; Representational Capacity; Bias-variance dilemma; Overfitting, generalization; Regularization; Convolutional neural networks; Restricted Boltzmann Machines; Deep Recurrent Networks and Sequence Learning; Applications to pattern recognition from video data, speech recognition and natural language processing. The students will learn how to design a deep learning architecture. The course also explores several common deep learning techniques and exposes the students in learning how to use deep learning in a very efficient manner. Students will gain experience through assignments, with an emphasis on proper deep learning practices with appropriate applications.