In Semester 4 students will decide the IL/GC project (coincides with choosing their major) and team they will be part of, and initiate the first steps of the project that will culminate with their capstone. Projects chosen by students will be connected and coherent in design, looping in a wide range of technology such as sensors, IoT, automation, robots, AI/ML, data science, biosystems design, etc. The core focus would be on implementing the engineering design cycle and reflecting on progress, to create solutions implementable at a city level, with an eye for expansion at state level. Mentored Leadership and Professional Development opportunities will be a constant feature across the 4 year IL/GC experience, and will be integrated with project work. These serve to develop the student’s professional skills and also help in creating a more integrated socio-integrated understanding of engineering/design.
Modern computers of all scales rely on efficient algorithms for solving diverse sets of computing problems. Efficient data structures are the backbone of efficient algorithms, guiding the scheme of storage and retrieval of data for speedy and effective processing. This course enables students to recognise the best data structures suited for a given computing problem, design algorithms based on them, and prove bounds on time and space complexity of their algorithms. As part of the course work, the students will also study the implementation and complexity of fundamental algorithms such as max flow in networks, discrete fourier transform, RSA cryptosystem, and real-world systems such as google search engine, and social network graphs.
The advent of deep learning and its application to big data analysis has worked to transform our industries. This course is meant to give students a detailed introduction to the science of deep learning. We undertake a study of various neural network architectures adapted to different problem settings, their training parameters, and algorithms for optimal network training and performance. We organise the discussion around existing learning paradigms and the specificities of data that guide the network design (via inductive biases). We anchor the study around seminal papers that have, and that continue, to shape the field of deep learning, to give students a flavour for the dynamic nature of the field. As part of the lab work, students will be expected to apply these concepts to real world problems that involve the development of ML-based modules for core tasks such as scene recognition, speech recognition, image segmentation, etc.
This course introduces the basic concepts that serve as a basis for understanding the design space of programming languages in terms of their constructs, paradigms, evaluation criteria and language implementation issues. It introduces concepts from imperative, object-oriented, functional, logic-based, constraint-based and concurrent programming. These concepts are illustrated by examples from varieties of languages such as C/C++, Java/C#, Smalltalk, Scheme, Haskell, Prolog, Erlang, Julia, Rust. The module also introduces various implementation issues, such as static and dynamic semantics, abstract machines, type inferencing, etc. This course uses a uniform notation to specify progressively the programming models of most programming languages. These models range from declarative models that cover functional programming and dataflow computing to stateful models for imperative and object-oriented programming, as well as concurrent models for message-passing systems and shared state.
The course provides a broad understanding of Computer Systems, starting with an emphasis on a programmer’s view of computer hardware, and leading into system-level hardware and software components. We will explore how a line of code in high level language is translated through layers of software to the target language of the machine. The course will then provide practical treatment of how best a programmer may leverage the machine hardware features for performance, power, security through good software practices. The course will also provide a general understanding of the system software involved for an application program to run, both on a single node and over a network, and how this system software is to be used. In support of this objective, the course will prepare students to do system-level programming. This course will show how to “use” (as opposed to “design”) system components, such as memory, file systems, process control, inter-process communication, and networking. By the end of this course students are expected to have an understanding of the problems and pitfalls typically encountered in the design and implementation of multi-threaded and networked applications and systems. By the end of this course students will have also acquired basic knowledge and skills to write performant code, recognize code optimization, and make full use of the services provided by the underlying operating system by programming directly at the operating system interface level.
The Application Domain Tracks are a series of 1 credit modules that help students inculcate skills and mindsets related to research and entrepreneurship. Through these tracks, students will contribute to ongoing research projects in Plaksha’s flagship grand challenge research centers, and may work with faculty on their research or on approved external projects in industry/government or startups. Across semesters, students will have the option to work across different disciplinary areas or focus on one area but the purpose is for them to appreciate the relevance of their coursework to a variety of challenges and areas.