The system-level understanding and practical programming experience will be built for computer systems. This class covers several topics for computer systems (CPU, memory, storage, I/O, ...), operating systems, and computer networking. Practical hands-on experiments will be also conducted to understand hardware and software components for diverse computer systems. In order to physically verify the upcoming impacts of Cloud-/BigData-ready computer systems for futuristic ICT infrastructure, this class targets to provide in-depth experimentation exercises with individually-arranged experimental computer systems for each participating student.
Learn in-depth understanding of C++ with Object Oriented Programming, Exception Handling, STL, UML, and design patterns. There is a LAB attached to each chapter that closely follows the progress of the lecture and provides students with hands-on exercises. Students also gain a broader understanding of OOPs by executing a live project.
Learn how to reduce the time complexity of the normal brute force approach from 0(n^2) to O(n) or O(logn) by using stack, heap, binary tree, DP, sliding window, etc. with the help of 50 popular LeetCode examples. Learn some more classic algorithms including the Floyd-Warshall algorithm, Diameter of a Tree, Robin-Karp Matching Algorithm, Knuth-Morris-Pratt, K Queens, Graph Coloring, Computational Geometry problems NP-Complete and NP-Hard.
Understand the fundamentals and the state-of-the-art developments of computer-based data communications. Reflecting the ubiquitous convergence toward IP-based (i.e., Internet) networking, we will study various aspects of network protocols and architecture, including architectural principles for designing IP-based networks; transport protocols; internet routing basics and router design; congestion control and network resource management; network security; overlay and peer-to-peer networks. The course also introduces you to several network trouble shooting tools including Wireshark, NMAP, SNMP Network Simulator and other command line tools .
Introduction to algorithms course introduces the fundamentals for algorithms. This course covers sorting, divide-and-conquer design paradigm, dynamic programming, strings, greedy-approach, graphs (minimum spanning trees, single-source shortest paths, all-pairs shortest paths), and B-trees. Coding practices' in this course will involve easy, medium and high complexity questions.
The goal of this course is to understand how programming languages work. Topics include design constructs (names, values, types, control flow, and abstraction), implementation techniques (syntactic and semantic analysis, interpretation, compilation, and optimization), and major language paradigms (imperative, object-oriented, functional). The course projects will let the students to understand the issues and solutions in designing and implementing programming languages.