The past couple of decades has witnessed technological development at a pace unmatched in the history of mankind primarily enabled by rapid advances in computational technologies. There is no aspect of modern life which is untouched by computers. From medical procedures to stocking the fridge, computers are ubiquitous in their presence. As artificial intelligence makes rapid inroads and threatens to govern every aspect of our lives, it becomes imperative that the study of computer science requires not just understanding of the mathematical and physical aspect of computation but also builds a strong foundation in other disciplines to understand the limitations and ramifications of the adoption of newer methods of computation. This requires that the new generation of computer scientists are trained not only in the core area of computer sciences but also are aware of the disciplines that informs it and the areas it influences while having the design sensibilities and entrepreneurial energy to build truly great products and make an indelible impact on society.
The Computer Science* program at FLAME is situated within the broad context of liberal education. While it provides a strong foundation in the theoretical and practical aspects of the discipline, the approach is inter-disciplinary with a heavy focus on the understanding and solution of computational problems that arise in the social sciences, humanities, business, Design, or the physical and natural sciences.
The computer science curriculum is composed of four broad requirements that includes the core, breadth, depth and a project. While the core lays a strong foundation, the breadth shall survey the areas in which computing plays a role. The depth shall include specialised courses in data mining, artificial intelligence, computer security in addition to other applications. The program culminates in the graduation project which provides a platform for applying the learnings to solve a problem of practical interest.
[*Computer Science major is offered as a B.Sc. (Hons) program. Minors are not available in the Honours program.]
The Computer Science program intends to:
- Equip students with a strong technical foundation to creatively apply computational technologies to solve problems of practical interest.
- Expose students to a wide range of problems from diverse areas and the computational methods employed to solve them.
- Provide skills to succeed and advance in professional careers related to computing or software.
- Provide the basis for advanced studies in the field.
- Develop an entrepreneurial orientation.
- Develop communication and soft skills to function effectively in their profession.
- Inculcate the habit of life-long learning and development to keep pace with the advances made in the field.
37 MAJOR COURSES
|1. Introduction to Programming||14. Design and Analysis of Algorithms||27. Fundamentals of User Interaction and Experience|
|2. Introduction to Discrete Mathematics||15. Principles of Software Engineering||28. Entrepreneurship, Digital Marketing, Design, or Psychology course|
|3. Elements of Probability||16. Fundamental of Database Systems||29. Advanced Algorithms|
|4. Elements of Calculus||17. Introduction to Object Oriented and Functional Programming||30. Advanced Database Systems|
|5. Introduction to Internet of Things||18. Web and Mobile App Development||31. Natural language Processing|
|6. Introduction to Computational Modelling||19. Entrepreneurship and Creativity||32. Fundamentals of Computer Graphics|
|7. Fundamentals of Computer Architecture||20. An Introduction to Probability and Statistics||33. Advanced Machine Learning|
|8. Fundamentals of Data Structures and Algorithms||21. Entrepreneurship, Digital Marketing, Design, or Psychology course||34. Applied Probability and Simulation|
|9. Principles of Operating Systems||22. Fundamentals of Computer Security||35. Entrepreneurship, Digital Marketing, Design, or Psychology course|
|10. Theory of Computation||23. Principles of Programming Languages||36. Honours Seminar|
|11. Calculus of One variable||24. Numerical Methods||37. Honours Thesis/Project|
|12. Linear Algebra||25. Principles of Machine Learning|
|13. Entrepreneurship, Digital Marketing, Design, or Psychology course||26. Fundamentals of Distributed Systems|
1. Introduction to Programming
This is a first course in computer programming for those with little or no previous programming experience. It equips the student with basic tools to efficiently solve problems on the computer. Programming places considerable emphasis on algorithms and requires you to specify every step of the solution process. By doing so, it hones your analytical and logical skills and makes you a better problem solver.
2. Introduction to Discrete Mathematics
This course aims to cover the basics of discrete mathematics. Discrete mathematics is the sturdy of discrete mathematical structures which do not rely on the notion of continuity. It introduces fundamental mathematical structures and various proof techniques and methods for solving different kind of problems. This course prepares the student to do advanced courses in applied mathematics and computer science.
3. Elements of Probability
This course is about chance and uncertainty. Probability provides us a measure of how certain we are about uncertainty. It is aimed at the first or second year college student as an introduction to the rudiments of probabilistic thinking and demands no more mathematical maturity than the ability to count and familiarity with elementary high school algebra. The emphasis will be on problem solving and applications of simple probability concepts to the real world.
4. Introduction to the Internet of Things
Computers are increasingly used not merely to process data, but to interact with things in the real world. This ranges from basics like RFID to significant achievements like real time tracking of moving vehicles via cellular and GPS systems. This course familiarises students with programming principles used to treat real world entities as programmable devices, especially the ubiquity of error and uncertainty in contrast with ordinary data processing. The emphasis will be on using and programming using devices such as drones that use sensors and motors to sense and manipulate the world.
5. Introduction to Computational modelling
Computation is a way to understand the world by building executable models. This course introduces a view of mathematics and computation as a language to capture the essential elements of a phenomenon. Using computer algebra systems and agent-based modelling, students will learn to appreciate the tremendous ability of simple mathematical and computational models to clarify our understanding and help predict the behaviour of systems.
6. Fundamental of Data Structures and Algorithms
This course builds on the programming skills acquired in Introduction to Programming. It introduces program design, analysis, and verification in relation to the study of data structures. Data structures are common constructs to store and manipulate data, and they are important in the construction of sophisticated computer programs. Students are introduced to some of the most important and frequently used data structures and their algorithms: lists, stacks, queues, trees, hash tables, graphs, and files. This course is programming intensive where students are expected to write a variety of programs ranging from simple to build more elaborate structures. The emphasis of programming component will be to write clear, modular programs that are easy to read, debug, verify, analyze, and modify.
7. Introduction to Computer Architecture
This course studies the basic instruction set architecture and organization of a modern computer. It adopts a programmer’s perspective of computer systems to execute programs, store information, and communicate. During the course the student is exposed to the fundamentals of translating higher level languages into assembly language, and the interpretation of machine languages by hardware. While concurrently, the role of the fundamental constituents of a computer, the gate, to build the final computing device is emphasized.
8. Introduction to Object-Oriented and Functional Programming
This course introduces and provides an in-depth coverage of object-oriented programming concepts to students who have exposed to basic programming techniques. Topics include elements of object oriented design, including classes, data abstraction, encapsulation, and polymorphism. Aspects of functional programming include first-class functions, combinators, and abstract data types. Data typing in OO languages is also considered. It also introduces UML as well as software design and reuse in functional and OO languages. The course material engages with the latest language standards with numerous examples.
9. Principles of Operating Systems
This course explores the design and implementation of computer operating systems. Topics include historical aspects of operating systems development, systems programming, process scheduling, synchronization of concurrent processes, virtual machines, memory management and virtual memory, I/O and file systems, system security, Operating system and architecture interaction, and an introduction to distributed operating systems.
10. Linear Algebra
This course emphasizes matrix and vector calculations and applications. It delves deeply into the theory of Matrices and other algebraic constructs such as Vector spaces, Determinants and Linear Transformations with particular emphasis on understanding the underlying theory and develop the analytical skills to prove theorems.
11. Design and Analysis of Algorithms
This course explores the methods for the design of efficient and reliable algorithms. It introduces common techniques to decrease computational resources to find solutions to problems. It will also introduce the mathematical framework for evaluating the correctness, running time and space requirements of algorithms. It will review common data structures and their applications and introduce a range of approaches and established algorithms for solving common classes of problems. It will cover common programming paradigms like Divide and Conquer, Greedy algorithms, Dynamic Programming to solve a wide class of problems. Some common Graph algorithms will also be covered.
12. Principles of Software Engineering
Modern software systems are complex and building a reliable, efficient system is not an easy task. Given the scale of coding involved, it is extremely important to follow a principles-based approach to software design, implementation, and testing. This course explores those methods. Specific topics include: software processes; specifying requirements and verifying correctness; software architectures; concurrent, parallel, and scalable systems design; testing and debugging; and performance evaluation.
13. Introduction to Probability and Statistics
This course provides an elementary introduction to probability theory and its application to statistics with emphasis on the theorems and proofs of univariate statistics. Addressed to a beginning Mathematics Major, it provides a foundation for advanced courses in probability and statistics.
14. Fundamentals of Computer Security
It is very rare to come across programs which has no flaws. These flaws, mainly in production code, lead to vulnerabilities that lead to malicious attacks that can change the behavior of the system. Discovering these and plugging them is extremely critical in todays interconnected world. The programmer not only has to ensure that the program works but also that it is secure. This course explores common vulnerabilities in computer systems, how attackers exploit them and the common ways to mitigate these attacks. A good programmer should be able to recognize potential risks in one’s design and prepare a defense against attacks. This course will involve intensive coding to inspect and modify the low-level operation of running programs.
15. Entrepreneurship and Creativity
The 21st century has dawned with entrepreneurship as major force shaping the global economy. In today’s knowledge economy India is emerging as an ‘Entrepreneurial nation on a global map. At the heart of this entrepreneurial manifestation is the entrepreneurial mind set. Those who possess the spirit of enterprise have led, and will continue to lead, the economic revolution that has proved repeatedly to raise the standard of living for people everywhere. This course is broadly designed to help you join this revolution to bring about lasting, positive changes in your community, organization and around the world.
This interdisciplinary and integrated course thus tries to address two sets of students.
i) Those desirous of building entrepreneurial attitudes and behaviors which can be applied across careers and work setting leading to creative & innovative solutions within community and organizational environment;
ii) Those having immediate entrepreneurial aspirations or considering being involved in starting an entrepreneurial venture at some point of his or her career.
16. Principles of Programming Languages
This course introduces the concepts and structures governing the design and implementation of programming languages. It presents an introduction to the concepts behind compilers and run-time representations of programming languages; features of programming languages such as abstraction and polymorphism with study of the procedural, functional, object-oriented, and concurrent programming paradigms. It takes a practical approach through coding in various to illustrate the concepts.
17. Theory of Computation
This course introduces a formal framework for investigating both the computability and complexity of problems. It introduced various models of computation including finite automata, regular languages, context-free grammars, and Turing machines. These models provide a mathematical basis for the study of computability theory—the examination of what problems can be solved and what problems cannot be solved—and the study of complexity theory—the examination of how efficiently problems can be solved, including the P versus NP problem.
18. Advanced Algorithms
This course builds upon design and analysis of algorithms course to explore advanced concepts in algorithm design, algorithm analysis and data structures. Areas of study include algorithmic complexity, randomized and approximation algorithms, geometric algorithms, and advanced data structures. Topics will include combinatorial algorithms for packing, and covering problems, algorithms for proximity and visibility problems, linear programming algorithms, approximation schemes, hardness of approximation, search, and hashing.
19. Fundamentals of Distributed Systems
This course studies the key design principles of distributed systems, which are collections of independent networked computers that function as single coherent systems. Covered topics include communication protocols, processes and threads, naming, synchronization, consistency and replication, fault tolerance, and security. Students also examine some specific real-world distributed systems case studies, including Google and Amazon. Class discussion is based on readings from the textbook and research papers.
The goals of this course are to understand how large-scale computational systems are built, and to provide students with the tools necessary to evaluate new technologies after the course ends.
20. Natural Language Processing
Natural language processing studies methods for analysing and creating spoken languages. It has evolved rapidly and is an integral part of many applications such as search engines, speech recognition, chat-bots, generate predictive text etc. Core topics will include information retrieval and extraction, language models etc. This course will place emphasis on an in-depth understanding of the core techniques rather than the
21. Advanced Database Systems
The last few years have seen new types of database management systems becoming popular. Such systems have diverse applications and differ significantly from transactional database systems in terms of applications and architectures. This course builds on the first course in database systems by exploring management of semi and unstructured data, it will introduce parallel and distributed database systems and discuss their strengths and limitations. It will also cover the need for enabling advanced analytics, stream processing systems and main memory data processing.
22. Computer Graphics
Special effects are ubiquitous in today’s world where images are manipulated and also programmatically created. This course introduces the fundamental methods behind the tools used to manipulate and create images. Beginning with the models of interaction of light/electromagnetic radiation with sensors, and it moves on to study the data structures and processor architectures that allow us to efficiently evaluate that physical model. Topics covered includes Topics covered in the course include: projective geometry, ray tracing, bidirectional surface scattering functions, binary space partition trees, matting and compositing, shadow maps, cache management, and parallel processing on GPUs. It is a hands-on course which requires programming using open graphics libraries for the image creation and rendering.
23. Numerical Methods
This course introduces the basic techniques for solving problems in science and engineering using numerical methods. It provides students with an understanding of the concepts and knowledge of the theory and practical application of numerical methods.
24. Fundamentals of Distributed Systems
Distributed systems use huge computer networks to construct highly available and scalable services. Most of the applications and services we interact with today are distributed, some at enormous scales. This course introduces design and implementation techniques that enable the building of fast, scalable, fault-tolerant distributed systems. The topics covered includes distributed communication models, distributed synchronization, distributed file systems, replication, consistency models, fault tolerance, distributed transactions, MapReduce infrastructures, scalable distributed databases.
25. Principles of Machine Learning
This course explores the design, implementation, and analysis of machine learning algorithms. This course will introduce supervised learning algorithms such as decision tree learning, support vector machines, and neural networks, unsupervised learning algorithms including k-means and expectation maximization, and reinforcement learning algorithms. It will also introduce methods for the evaluation of learning algorithms, as well as topics in computational learning theory.
26. Advanced Machine Learning
Deep learning techniques work well on problems like computer vision and speech. This course studies Convolutional networks, RNNs, LSTM and other topics. Other algorithms like reinforcement learning approaches including policy gradient, Q-function learning etc. will also be studied. Hands-on practical experience in the latest machine learning technologies such as TensorFlow will be provided.