About
The course teaches students comprehensive and specialised subjects in computer science; it teaches students cutting edge engineering skills to solve real-world problems using computational thinking and tools, as well as soft skills in communication, collaboration, and project management that enable students to succeed in real-world business environments. Most of this program is case (or) project-based where students learn by solving real-world problems end to end. This program has core courses that focus on computational thinking and problems solving from first principles. The core courses are followed by specialization courses that teach various aspects of building real-world systems. This is followed by more advanced courses that focus on research level topics, which cover state of the art methods. The program also has a capstone project at the end, wherein students can either work on building end to end solutions to real world problems (or) work on a research topic. The program also focuses on teaching the students the “ability to learn” so that they can be lifelong learners constantly upgrading their skills. Students can choose from a spectrum of courses to specialize in a specific sub-area of Computer Science like Artificial Intelligence and Machine Learning, Cloud Computing, Software Engineering, or Data Science, etc.
How students have found success through Woolf
Course Structure
About
This course helps students translate advanced mathematical/ statistical/ scientific concepts into code. This is a module for writing code to solve real-world problems. It introduces programming concepts (such as control structures, recursion, classes and objects) assuming no prior programming knowledge, to make this course accessible to advanced professionals from scientific fields like Biology, Physics, Medicine, Chemistry, Civil & Mechanical Engineering etc. After building a strong foundation for converting scientific knowledge into programming concepts, the course advances to dive deeply into Object-Oriented Programming and its methodologies. It also covers when and how to use inbuilt-data structures like 1-Dimensional and 2-Dimensional Arrays before introducing the concepts of computational complexity to help students write optimised code using appropriate data structures and algorithmic design methods. The module can be taught to allow students to learn these concepts using a modern programming language such as Java or Python. The course offers students the ability to identify and solve computer programming problems in scientific fields at a graduate level. The course prepares students to handle advanced data structures and algorithm design methods in the separate module, ‘Data Structures’.
Teachers




Intended learning outcomes
- Develop a critical understanding of a modern programming language such as Java or Python.
- Acquire knowledge of various methods for structuring data.
- Critically assess the relevance of theories for business applications in the domain of technology.
- Critically evaluate diverse scholarly views on computational complexity.
- Develop a specialised knowledge of key strategies related to Object-Oriented Programming.
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
- Autonomously gather material and organise it into a coherent presentation or essay.
- Apply an in-depth domain-specific knowledge and understanding to computer programming.
- Creatively apply various programming methods to develop critical and original solutions to computational problems.
- Act autonomously in identifying research problems and solutions related to Object-Oriented programming
- Create synthetic contextualised discussions of key issues related to converting scientific knowledge into programming concepts, and how to instantiate these using Object-Oriented methods
- Apply a professional and scholarly approach to research problems pertaining to computational complexity
- Efficiently manage interdisciplinary issues that arise in connection to data structured in 1- and 2-dimensional arrays
- Demonstrate self-direction in research and originality in solutions developed for modern programming languages
- Solve problems and be prepared to take leadership decisions related to the methods and principles of computer programming
About
Mathematics and computer science are closely related fields. Problems in computer science are often formalized and solved with mathematical methods. It is likely that many important problems currently facing computer scientists will be solved by researchers skilled in algebra, analysis, combinatorics, logic and/or probability theory, as well as computer science. This course covers discrete mathematics for computer science and engineering. Topics may include asymptotic notation and growth of functions; permutations and combinations; counting principles; discrete probability. Further selected topics may also be covered, such as recursive definition and structural induction; state machines and invariants; recurrences; generating functions. Students will be able to explain and apply the basic methods of discrete(noncontinuous) mathematics in computer science. They will be able to use these methods in subsequent courses in the design and analysis of algorithms, computability theory, software engineering, and computer systems. The focus of the course is real-world problems and applications often found in business and industry.
Teachers



Intended learning outcomes
- Develop a specialised knowledge of evaluating and describing algorithmic performance using tools from discrete mathematics.
- Develop a critical knowledge of discrete mathematics as a tool in software development.
- Critically assess the relevance of theories of recursivity and induction for business applications in the domain of computational problem-solving.
- Acquire knowledge of various methods for optimizing algorithm design.
- Critically evaluate diverse scholarly views on the appropriateness of various mathematical approaches to software development problems.
- Autonomously gather material and organise it into a coherent presentation or essay.
- Apply an in-depth domain-specific knowledge and understanding of discrete mathematics to algorithmic designs.
- Creatively apply various programming methods to most efficiently implement state machines in algorithmic design.
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
- Efficiently manage interdisciplinary issues that arise in connection to permutations and combinations in algorithm design.
- Apply a professional and scholarly approach to research problems pertaining to the growth of functions.
- Act autonomously in identifying research problems and solutions related to the real-world application of discrete mathematics.
- Create synthetic contextualised discussions of key issues related to applications of discrete mathematics in computer science.
- Solve problems and be prepared to take leadership decisions related to applying discrete mathematics to optimizing algorithms.
- Demonstrate self-direction in research and originality in solutions developed for solving problems related to discrete probability.
About
The ability to solve problems is a skill, and just like any other skill, the more one practices, the better one gets. So how exactly does one practice problem solving? Learning about different problem-solving strategies and when to use them will give a good start. Problem solving is a process. Most strategies provide steps that help you identify the problem and choose the best solution.Building a toolbox of problem-solving strategies will improve problem solving skills.With practice, students will be able to recognize and choose among multiple strategies to find the most appropriate one to solve complex problems. The course will focus on developing problem-solving strategies such as abstraction, modularity, recursion, iteration, bisection, and exhaustive enumeration. The course will also introduce arrays and some of their real-world applications, such as prefix sum, carry forward, subarrays, and 2-dimensional matrices. Examples will include industry-relevant problems and dive deeply into building their solutions with various approaches, recognizing each’s limitations (i.e when to use a data structure and when not to use a data structure). By the end of this course a student can come up with the best strategy which can optimize both time and space complexities by choosing the best data structure suitable for a given problem.
Teachers




Intended learning outcomes
- Develop a critical understanding of problem-solving strategies in computing
- Critically evaluate diverse scholarly views on the appropriateness of various problem-solving strategies
- Critically assess the relevance of theories of problem-solving for business applications in the domain of software developmen
- Acquire knowledge of various methods for hashing and recursion
- Develop a specialised knowledge of key strategies related to optimising algorithms
- Creatively apply various programming methods to develop critical and original solutions to computational problems
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Autonomously gather material and organise it into a coherent presentation or essay
- Apply an in-depth domain-specific knowledge and understanding to problem solving
- Solve problems and be prepared to take leadership decisions related to applying problem-solving heuristics
- Demonstrate self-direction in research and originality in solutions developed for solving problems related to data structures
- Create synthetic contextualised discussions of key issues related to problem- solving, especially around optimising time and space complexities
- Act autonomously in identifying research problems and solutions related to the real-world applications of optimising strategies
- Apply a professional and scholarly approach to research problems pertaining to hashing techniques, recursion, and subset problems
- Efficiently manage interdisciplinary issues that arise in connection to problem solving
About
This course builds upon the introductory JavaScript course to acquaint students of popular and modern frameworks to build the front end. We focus on three very popular frameworks/libraries in use: React.js, jQuery and AngularJS. We start with React.js, one of the most popular and advanced ones amongst the three. Students learn various components and data flow to learn to architect real world front end using React.js. This would be achieved via multiple code examples and code- walkthroughs from scratch. We would also dive into React Native which is a cross platform Framework to build native mobile and smart-TV apps using JavaScript. This helps students to build applications for various platforms using only JavaScript. jQuery is one of the oldest and most widely used JavaScript libraries, which students cover in detail. Students specifically focus on how jQuery can simplify event handling, AJAX, HTML DOM tree manipulation and create CSS animations. We also provide a hands-on introduction to AngularJS to architect model-view-controller (MVC) based dynamic web pages.
Teachers




Intended learning outcomes
- Critically assess the relevance of theories for business applications in the domain of technology.
- Develop a critical knowledge of front end development.
- Acquire knowledge of popular frameworks/libraries in use: React.js, jQuery and AngularJS.
- Critically evaluate diverse scholarly views on front end development.
- Develop a specialised knowledge of key strategies related to front end development.
- Autonomously gather material and organise it into coherent problem sets or presentations.
- Creatively apply front end development applications to develop critical and original solutions for computational problems.
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
- Apply an in-depth domain-specific knowledge and understanding to front end development solutions.
- Solve problems and be prepared to take leadership decisions related to the methods and principles of front end development.
- Create synthetic contextualised discussions of key issues related to front end development.
- Apply a professional and scholarly approach to research problems pertaining to front end development.
- Demonstrate self-direction in research and originality in solutions developed for front end development.
- Act autonomously in identifying research problems and solutions related to front end development.
- Efficiently manage interdisciplinary issues that arise in connection to front end development.
About
This is a foundational course on building server-side (or backend) applications using popular JavaScript runtime environments like Node.js. Students will learn event driven programming for building scalable backend for web applications. The module teaches various aspects of Node.js like setup, package manager, client- server programming and connecting to various databases and REST APIs. Most of these concepts would be covered in a hands-on manner with real world examples and applications built from scratch using Node.js on Linux servers. This course also provides an introduction to Linux server administration and scripting with special focus on web-development and networking. Students learn to use Linux monitoring tools (like Monit) to track the health of the servers. The module also provides an introduction to Express.js which is a popular light-weight framework for Node.js applications. Given the practical nature of this course, this would involve building actual website backends via assignments/projects for ecommerce, online learning and/or photo-sharing.
Teachers




Intended learning outcomes
- Acquire knowledge of key aspects of Node.js like setup, package manager, client- server programming and connecting to various databases and REST
- Develop a specialised knowledge of key strategies related to Back End Development
- Critically assess the relevance of theories for business applications in the domain of technology
- Critically evaluate diverse scholarly views on Back End Development
- Develop a critical knowledge of Back End Development
- Apply an in-depth domain-specific knowledge and understanding to Back End Development applications
- Autonomously gather material and organise it into coherent problem sets or presentations
- Creatively apply Back End Development tools to develop critical and original solutions for computational problems
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Apply a professional and scholarly approach to research problems pertaining to Back End Development
- Act autonomously in identifying research problems and solutions related to Back End Development
- Create synthetic contextualised discussions of key issues related to Back End Development
- Demonstrate self-direction in research and originality in solutions developed for Back End Development
- Solve problems and be prepared to take leadership decisions related to the methods and principles of Back End Development
- Efficiently manage interdisciplinary issues that arise in connection to Back End Development
About
This module covers general approaches to the construction of efficient solutions to problems. Such methods are of interest because: a) They provide templates suited to solving a broad range of diverse problems, b) they can be translated into common control and data structures provided by most high-level languages, c) the temporal and spatial requirements of the algorithms which result can be precisely analyzed.
This course will provide a solid foundation and background to design and analysis of algorithms. In particular, upon successful completion of this course, students will be able to understand, explain and apply key algorithmic concepts and principles, which might include: Greedy algorithms (Activity Selection, 0-1 Knapsack Problem, Fractional Knapsack Problem), Dynamic programming (Longest Common Subsequence, 0-1 Knapsack Problem),Minimum Spanning Trees (Prim’s Algorithm, Kruskal’s Algorithm), Graph Algorithms (Dijkstra’s Shortest Path Algorithm, Bipartite Graphs, Minimum Vertex Cover). Although more than one technique may be applicable to a specific problem, it is often the case that an algorithm constructed by one approach is clearly superior to equivalent solutions built using alternative techniques. This module will help students assess these choices.
Teachers

Intended learning outcomes
- Develop a specialised knowledge of describing, analysing, and evaluating algorithmic performance in time and space
- Acquire knowledge of various methods for optimizing algorithm design
- Develop a critical understanding of important algorithmic concepts and principles, such as greedy algorithms, dynamic programming, minimum spanning trees, and graph algorithms
- Critically evaluate diverse scholarly views on the appropriateness of various algorithmic concepts to software development problems
- Critically assess the relevance of theories of algorithmic performance for business applications in the domain of software engineering
- Autonomously gather material and organise it into a coherent presentation or essay
- Creatively apply various programming methods to most efficiently design algorithms for specified time and space constraints
- Apply an in-depth domain-specific knowledge and understanding of efficiency to algorithmic designs
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Solve problems and be prepared to take leadership decisions related to selecting the most appropriate algorithm for a software engineering problem
- Create synthetic contextualised discussions of key issues related to the efficient construction of algorithms
- Demonstrate self-direction in research and originality in solutions developed for solving problems related to algorithmic design
- Apply a professional and scholarly approach to research problems pertaining to the comparative performance of algorithms
- Efficiently manage interdisciplinary issues that arise in connection to the performance of algorithms and data structures in time and space
- Act autonomously in identifying research problems and solutions related to the real-world application of common controls and data structures in high-level programming languages
About
This core course equips the student with knowledge of database management systems, operating systems and computer networks. At the end of the course, students will have a critical understanding of the architecture of computers and networks, as well has how programs interact with these. Students begin with mapping data storage problems (as they had done in Relational Databases) to understand how data is stored in a distributed network, and related issues such as concurrency. Subsequently, students cover operating systems with an overview of process scheduling, process synchronisation and memory management techniques with disk scheduling. The module concludes with computer networks, where we will be discussing all of the computer network layers and their protocols in detail.
Teachers

Intended learning outcomes
- Critically assess the relevance of theories of database design for business applications in the domain of software engineering
- Develop a critical understanding of relational database strategies, process and memory management in operating systems, and computer network protocols
- Develop a specialised knowledge of optimising relational database performance in low-latency environments
- Critically evaluate diverse scholarly views on the appropriateness of various approaches to memory management in operating systems
- Acquire knowledge of various methods for troubleshooting computer network layers
- Apply an in-depth domain-specific knowledge and understanding of the importance of relational databases in modern software engineering
- Autonomously gather material and organise it into a coherent presentation or essay
- Creatively apply various programming methods to most efficiently design databases that perform well under specified constraints
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Solve problems and be prepared to take leadership decisions related to relational database design to solve computational and business problems
- Apply a professional and scholarly approach to research problems pertaining to the design of databases in low-latency environments
- Demonstrate self-direction in research and originality in solutions developed for optimising performance of computer networks
- Create synthetic contextualised discussions of key issues related to the optimal design and use of databases, operating systems, and computer networks
- Efficiently manage interdisciplinary issues that arise in connection to process management in operating systems
- Act autonomously in identifying research problems and solutions related to the real-world application of relational databases
About
Data is the fuel driving all major organisations. This course helps you understand how to process data at scale. From understanding the fundamentals of distributed processing to designing data warehousing and writing ETL (Extract Transform Load) pipelines to process batch and streaming data. Students will learn a comprehensive view of the complete Data Engineering lifecycle.
Teachers

Intended learning outcomes
- Critically assess the relevance of theories of data modeling for efficient pipeline creation
- Develop a critical understanding of data engineering.
- Critically evaluate diverse scholarly views on best practices in developing data- intensive applications
- Acquire knowledge of various methods for warehousing data
- Develop a specialised knowledge of standard tools for data processing, such as Apache Kafka, Airflow, and Spark (with PySpark), and the Hadoop Ecosystem.
- Apply an in-depth domain-specific knowledge and understanding of orchestrating complete ETL pipelines.
- Creatively apply various visual and written methods for dashboarding data with Grafana/Tableau
- Autonomously gather material and organise it into a coherent presentation or essay
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Demonstrate self-direction in research and originality in creating advanced SQL queries.
- Efficiently manage interdisciplinary issues that arise in connection to developing cloud solutions for data engineering problems
- Apply a professional and scholarly approach to research problems pertaining to data warehousing and modeling
- Solve problems and be prepared to take leadership decisions related to developing pipelines to handle massive datasets for engineering purposes
- Act autonomously in identifying research problems and solutions related to developing for data at scale.
- Create synthetic contextualised discussions of key issues related to the data engineering lifecycle.
About
Low-Level Design & Design Patterns focuses on modularity and reusability in software design, common design vocabularies, refactoring and how to reduce it, and how to incorporate design patterns into iterative development processes. The course pays significant attention to the interaction between system architecture and components, including data organisation. The course begins with Object-Oriented Analysis (OOA), which is a problems-solving technique that includes: modelling an information design; representing behaviour; describing functions; dividing data, functional, and behavioural models to uncover detail; moving from abstraction to implementation details. The course then turns to Object-Oriented Design (OOD), which reduces the analysis model into a modular design for software creation, with subsystems, components, and objects. The iteration of analysis and implementation will be covered in detail with real-world industry examples.
Teachers

Intended learning outcomes
- Develop a specialised knowledge of modelling data, behaviour, and function in software
- Critically evaluate diverse scholarly views on the appropriateness of various approaches to design patterns for object-oriented design
- Critically assess the relevance of theories of reusable design for business applications in the domain of software engineering
- Develop a critical understanding of object-oriented analysis and design
- Acquire knowledge of various methods for specifying modular elements in a software subsystem
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Apply an in-depth domain-specific knowledge and understanding of the importance of object-oriented design in software engineering
- Autonomously gather material and organise it into a coherent presentation or essay
- Creatively apply various design patterns to most efficiently design software that meets specified criteria
- Demonstrate self-direction in research and originality in solutions developed for designing reusable software elements
- Efficiently manage interdisciplinary issues that arise in connection to modelling data, behaviour, and function
- Create synthetic contextualised discussions of key issues related to Object- Oriented Analysis and Design
- Solve problems and be prepared to take leadership decisions related to developing design patterns to solve problems in software design
- Apply a professional and scholarly approach to research problems pertaining to building software with reusable elements
- Act autonomously in identifying research problems and solutions related to the modular, procedural software design
About
A distributed system is an application that executes a collection of protocols to coordinate the actions of multiple processes on a network, such that all components cooperate together to perform a single or small set of related tasks. Goals of a Distributed System:
● Transparency -> End user does not know what lies behind and how the system is working internally.
● Scalability - > Refers to the growth of the system.
● Availability -> Refers to the system's uptime.
The module will carefully examine three case studies, with attention to such topics as:
● Basics of High Level System Design and consistent Hashing
● Caching
● CAP Theorem
● Replication and Master-Slave
● NoSQL
● Differences between SQL and NoSQL
● Multi Master
● Apache Zookeeper & Apache Kafka
● Case Study on ElasticSearch
● AWS S3 and Quad Trees
● Design Distributed Crawler
● Microservices and Containerisation● Hotstar & IRCTC System design
Teachers

Intended learning outcomes
- Critically evaluate diverse scholarly views on containerisation as a system architecture strategy
- Develop a specialised knowledge of hashing and caching strategies in distributed systems
- Develop a critical understanding of software architecture design
- Critically assess the relevance of theories of distributed system design for business applications in the realm of software engineerin
- Acquire knowledge of various methods for optimising the tradeoffs between consistency and availability in the presence of partitions
- Creatively apply various visual and written methods for developing high-level system architecture designs
- Autonomously gather material and organise it into a coherent presentation or essay
- Apply an in-depth domain-specific knowledge and understanding of the importance of scalability in software engineering
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Apply a professional and scholarly approach to research problems pertaining to tradeoffs between consistency and availability when distributed systems are partitioned
- Solve problems and be prepared to take leadership decisions related to designing distributed systems that can scale
- Efficiently manage interdisciplinary issues that arise in connection to microservices and containerisation
- Demonstrate self-direction in research and originality in solutions developed for search across distributed environments
- Create synthetic contextualised discussions of key issues related to designing system architecture that is capable of scaling
- Act autonomously in identifying research problems and solutions related to implementing SQL and NoSQL designs
About
Every organisation is building products to solve the pain points of its customers. Product managers are a critical part of an organisation, who make sure that evolving customer needs, and market trends are observed and converted into delightful solutions which help businesses get its outcomes. In this course, students will get a fundamental understanding of product management practices. This will give them a comprehensive view of the complete product management life cycle.
Teachers




Intended learning outcomes
- Critically evaluate diverse scholarly views on assessing user behaviours
- Critically assess the relevance of theories of user behaviour for product development
- Develop a critical understanding of product design and development
- Develop a specialised knowledge of frameworks for measuring user engagement, such as diagnostics, key performance indicators (KPI), and other metrics
- Acquire knowledge of various methods for testing hypotheses about the viability of a product and about how users engage with i
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Creatively apply various visual and written methods for proposing a technical solution to a real-world problem to other technical and managerial-level audiences, and for documenting that solution
- Autonomously gather material and organise it into a coherent presentation or essay
- Apply an in-depth domain-specific knowledge and understanding of product roadmaps and lifecycles in business
- Solve problems and be prepared to take leadership decisions related to developing data-informed business cases about bringing products to market and iterating upon them.
- Demonstrate self-direction in research and originality in testing and validating hypotheses about a product and its users.
- Efficiently manage interdisciplinary issues that arise in connection to designing a product and bringing it to market.
- Apply a professional and scholarly approach to research problems pertaining to measuring user engagement.
- Act autonomously in identifying research problems and solutions related to product analytics
- Create synthetic contextualised discussions of key issues related to product sense, and how to tell whether a product is worth bringing to market
About
This course is aimed to build a strong foundational knowledge of data structures (DS) used extensively in computing. The module starts with introducing time and space complexity notations and estimation for code snippets. This helps students be able to make trade-offs between various Data Structures while solving real world computational problems. The module introduces most widely used basic data structures like Dynamic arrays, multi-dimensional arrays, Lists, Strings, Hash Tables, Binary Trees, Balanced Binary Trees, Priority Queues and Graphs. The module discusses multiple implementation variations for each of the above data-structures along with trade-offs in space and time for each implementation. In this course, students implement these data-structures from scratch to gain a solid understanding of their inner workings. Students are also introduced to how to use the built-in data-structures available in various programming languages / libraries like Python/NumPy/C++ STL/Java/JavaScript. Students solve real-world problems where they must use an optimal DS to solve a computational problem at hand.
Teachers

Intended learning outcomes
- Critically assess the relevance of theories for business applications in the domain of technology
- Develop a specialized knowledge of key strategies related to Data Structures and their usage in computer science
- Critically evaluate diverse scholarly views on data structures
- Acquire knowledge widely used basic data structures like Dynamic arrays, multi- dimensional arrays, Lists, Strings, Hash Tables, Binary Trees, Balanced Binary Trees, Priority Queues and Graphs
- Develop a critical knowledge of Data Structures and their implementation
- Apply an in-depth domain-specific knowledge and understanding of Data Structures
- Apply data structures in a creative way to develop original, critical solutions to real world problems.
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Autonomously gather material and organize it into coherent data structures
- Apply a professional and scholarly approach to research problems pertaining to Data Structures and their implementatio
- Efficiently manage interdisciplinary issues that arise in connection to Data Structures and their implementation
- Demonstrate self-direction in research and originality in solutions developed for Data Structures and their implementation
- Act autonomously in identifying research problems and solutions related to Data Structures and their implementation
- Solve problems and be prepared to take leadership decisions related to the methods and principles of Data Structures and their implementation
- Create synthetic contextualized discussions of key issues related to Data Structures and the different approaches to their implementation
About
This course gives the detailed overview on how to approach Low Level Design problems with real-world case studies discussed such as Designing a Pen (Mac/Windows), TicTacToe, BookMyShow (most used event booking app, manages millions of users), Email campaign Management System and detailed design of Splitwise.
Teachers
Intended learning outcomes
- Critically assess the relevance of theories of software design processes for business applications in the realm of software engineering
- Develop a critical understanding of software design and refinement processes
- Acquire knowledge of various methods for specifying the logical and functional design of a system
- Critically evaluate diverse scholarly views on the appropriateness of various approaches to converting high-level or architectural software design to low-level, component-oriented design
- Develop a specialised knowledge of Process Design Languages and flowchart methods for describing desired functions and behaviours
- Autonomously gather material and organise it into a coherent presentation or essay
- Creatively apply various visual and written methods for converting architectural/high-level designs to component-oriented, low-level designs
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Apply an in-depth domain-specific knowledge and understanding of the importance of refinement in software design processes
- Act autonomously in identifying research problems and solutions related to refining software designs
- Solve problems and be prepared to take leadership decisions related to developing code-ready low-level design documents
- Efficiently manage interdisciplinary issues that arise in connection to developing hierarchical input process output (HIPO) models
- Create synthetic contextualised discussions of key issues related to specifying the internal logic of software
- Apply a professional and scholarly approach to research problems pertaining to logical and functional design of software components
- Demonstrate self-direction in research and originality in solutions developed for using Program Design Languages
About
Advanced Applied Computer Science is a capstone project, an end-to-end deployable solution to a real-world computational problem that students build in the last phase of the programme. Its objective is to help students rigorously solve a technically challenging problem where they would apply all of the concepts, techniques and tools learned in the programme. Students typically pick a problem from their specialisation after discussing it with the course instructor(s). Students also have the option of working on a real-world problem in their company/ organization/ institution. They can be mentored by an expert supervisor from their organization along with an academic supervisor from Woolf. All external expert-supervisors and projects need to be approved by the instructor(s) to ensure that the project is technically challenging and the solution being built is rigorous
and of high quality. Students start with identifying a technically challenging problem. Once approved by the instructor(s), they start the literature survey to read research papers and technical reports of prior related work. Then, they build the system design and write a design document to solve the problem. This would be followed by designing and implementing individual modules and testing them. This would be followed by deploying the solution and making it available to end users while satisfying the problem’s real-world constraints and objectives. Students then document their work into a detailed technical report.
Teachers



Intended learning outcomes
- Critically assess the relevance of theories for business applications in the domain of technology
- Acquire knowledge of an end-to-end deployable solution to a real-world computational problem
- Develop a specialised knowledge of key strategies related to modern computational applications
- Develop a critical knowledge of modern computational applications
- Critically evaluate diverse scholarly views on modern computational applications
- Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
- Creatively apply computational applications to develop critical and original solutions for computational problems
- Autonomously gather material and organise it into coherent problem sets or presentations
- Apply an in-depth domain-specific knowledge and understanding of modern day computational applications
- Efficiently manage interdisciplinary issues that arise in connection to modern day computational methods and principles
- Demonstrate self-direction in research and originality in solutions developed for robust and reliable systems using interacting modules
- Create synthetic contextualised discussions of key issues related to real-world computational problems
- Act autonomously in identifying research problems and solutions related to modern computational tools and methods
- Apply a professional and scholarly approach to research problems pertaining to real-world modern computational complexities
- Solve problems and be prepared to take leadership decisions related to the methods and principles of modern computational applications
Entry Requirements
Application Process
Submit initial Application
Complete the online application form with your personal information
Documentation Review
Submit required transcripts, certificates, and supporting documents
Assessment
Your application will be evaluated against program requirements
Interview
Selected candidates may be invited for an interview
Decision
Receive an admission decision
Enrollment
Complete registration and prepare to begin your studies
.avif)