The programme is heavily geared towards developing students’ professional skills needed for employment, while being able to adapt to rapidly changing technology, to work effectively, professionally and ethically in computing-related professions, as demonstrated by their communications, teamwork and leadership skills. It also motivates and engages students in life-long learning, including entering graduate programmes in Computer Science and related fields.
You will learn how to:
• Apply knowledge of computing and mathematics appropriate to the discipline
• Analyze a problem, and identify and define the computing requirements appropriate to its solution
• Design, implement, and evaluate a computer-based system, process, component, or programme to meet desired needs
• Function effectively on teams to accomplish a common goal
• Understand professional, ethical, legal, security and social issues and responsibilities
• Analyze the local and global impact of computing on individuals, organizations, and society
• Recognize the need for and an ability to engage in continuing professional development
• Use current techniques, skills, and tools necessary for computing practice
• Apply mathematical foundations, algorithmic principles, and computer science theory in the modeling and design of computer-based systems in a way that demonstrates comprehension of the tradeoffs involved in design choices
• Apply design and development principles in the construction of software systems of varying complexity.
As in all Harbour.Space programmes, computer science learning is problem-based. You should expect to work on many practical projects, such as programming a robot, which would help you develop strong problem-solving skills and quickly become experienced in multiple programming languages. All students should expect to roll out their real world projects to the market at the end of studies.
Throughout the programme students will continuously gain core knowledge and understanding of fundamental topics in Computer Science, including:
• Hardware and software architectures
• Software engineering principles and methodologies
• Operating systems and software tools
• Selected advanced topics to provide a deeper understanding of some aspects of the subject, such as hardware systems design, object-oriented analysis and design, e-commerce technologies, and artificial intelligence
• Research methodology and practice
• Personal responsibilities and professional codes of conduct
• Practical skills – students will be able to effectively apply software systems and tools under Unix/Windows, underpinned by a knowledge of how those systems work
• Implement hardware and/or software designs to provide working solutions, including use of appropriate programming languages, web-based systems and tools, design methodologies, and database systems.
In the first year, students obtain the foundational knowledge in mathematics and the basics of programming upon which students will develop understanding of programming and computer science during following years. The courses are mostly given in a form of lectures and takeaway coursework. By the end of this year, students will be able to write programmes and use primary computer science tools.
Students will also undertake Design and Interaction Foundation courses in their first year, which culminates in the submission of their First year final project. The first project is designed to open upa space for discussion, experimentation and debate about the relationship between design and technology.
The course offers the foundations of classical combinatorial and theoretic graph objects, concepts, and methods. The course introduces the notion of enumeration techniques with emphasis on permutations and combinations, generating functions, recurrence relations, inclusion and exclusion, and the pigeonhole principle.
This is an introductory course to the C++ programming language. By the end of this course, students should be able to understand and use the basic programming constructs of C/C++, manipulate various C/C++ datatypes, such as arrays, strings, and pointers, isolate and fix common errors in C++ programs, use memory appropriately, including proper allocation/deallocation procedures, apply object-oriented approaches to software problems in C++, write small-scale C++ programs using the above skills
The course offers the foundations of calculus including the introduction to real numbers and the notion of limits and derivatives. Students learn to solve simple limits and to use this skill in simplest applied problems
The course introduces students to the Unix/Linux ecosystem. We start with installation and configuration of the operating system and continue with a discussion of packages, file systems, etc. The majority of the course lectures are devoted to the extremely powerful set of tools available via the Unix/Linux command line. We cover grep, awk, regular expressions, popular editors, command line Perl, shell scripting, etc. We conclude the course with the discussion of git - the source control system.
This course introduces basic concepts of linear algebra including “planes” and “spaces”. Students will grasp the notion of space structure that lies at the foundation of the general concept of “linear space". Students will also study mathematical objects such as matrices, learn the rules of operations on matrices and will be encouraged to use them on the basis of practical examples of their application.
The course introduces basic data structures and algorithms. This includes combinatorial, graph, sorting and other algorithms. By the end of the course, students will grasp the utility of formalising procedures and structuring data for analysis as well as learn to use a range of basic instruments for such work.
In this course students will learn about important instruments such as the use of the method of generating functions in enumerative combinatorics, Möbius transforms, finite differences (solving linear recurrence relations with constant coefficients) etc. We will consider more complex classes of graphs compared to those introduced in the preceding course and prove formulas and asymptotic forms for a number of trees and other connected graphs.
In this course we introduce some of the core concepts of OOP. We will also focus on programming, in particular the object-oriented programming paradigm in Python. Topics include primitives, expressions, assignments, functions, environments, OOP, and inheritance.
In this course, students develop an understanding of the definite integral. Using practical examples, students learn about the origins of this concept and its importance. Students will also learn about series, the emergence of which is justified by the special case of the power series, which are known to arise from the methodological framework of moment-generating functions that determine the majority of important topics already discussed in courses of Combinatorics and Graphs. – 2. This section of the course will include Taylor series and asymptotes, which are essential for the study of future topics that require these or other assessments such as assessment of the algorithm complexity.
This course will build upon topics that students learned in Mathematical Foundations of Computing and Algorithms and Data Structures 1. The course assumes a significantly broader programming background and will introduce more advanced algorithms and data structures including Merge-Sort, Quick-Sort, Order Statistics, heaps, hashes, search trees, etc.
The course introduces the concept of a linear vector space. We provide many practical examples that explain it Students learn to accurately manipulate multidimensional objects with the understanding that they are dealing not with abstract concepts but with objects that have a natural impact on reality. Students will also be introduced to groups, fields and rings that are important notions for the following courses and their applications.
Introduction to the fundamental concepts of computer systems. Explores how computer systems execute programs and manipulate data, working from the C programming language down to the microprocessor. Topics covered include: the C programming language, data representation, machine-level code, computer arithmetic, elements of code compilation, memory organization and management, and performance evaluation and optimisation.
The course will expose students to the most cutting-edge directions of research in combinatorics and graphs and will introduce advanced algebraic, probabilistic and topological methods for analysis of combinatorial and graph theoretic problems. These methods are particularly important due to many applications in advanced network modeling, algorithm analysis, and other domains. We will also cover practical applications of these methods.
The objective of the Operating Systems course is to familiarise students with the basic organising principles and technologies used in modern computing platforms (the operating systems together with the computer hardware), as well as their place and role in the IT field. The course will offer ample practical exercises to strengthen the understanding of core topics and to prepare students to advance their knowledge of the modern means of parallel and distributed processes for their effective application in scientific research and computing.
This course explains and analyses multivariable functions and their derivatives and integrals. We also introduce Fourier transformation, a particularly important topic, with applications ranging from probability theory to image analysis. Finally, the course covers the concept of “measure” with a focus on the Jourdan and Lebesgue measures.
Students will begin work on the Capstone Project from the very beginning of the programme. They're guided by a mentor and regularly discuss their direction and progress. In the first year, students determine a detailed objective for their project, research existing alternatives, outline differentiators of their approach, work on identifying the approach for implementation of the project. This will include creation of a development plan and implementation of a prototype. At the end of the year students will submit an outline document detailing the progress, the results of the literature research and description of a prototype.
The university will offer regular open lectures by professors, experts, and key figured by technology field. Students in data science program are required to attend many of the lectures and submit a write up describing what they learned during the talk. Students of the first year will be required to describe the statement of the problem discussed and its significance.
Most courses require practical coursework and a course project enabling students to get a feel for the challenges and approaches used in this field. The students will also begin developing software for the Capstone project. By the end of this year, students will be able to write programmes and use primary computer science tools.
The course introduces the notion of randomness and its appropriate terminology. We start with a classical definition of probability – the frequency and the Bernoulli scheme – and guide students towards the continuous cases, in particular, basic geometric probability being a fundamental one. The course also covers random variables and their probability distributions, as we present theory and practical examples. We proceed to methods of characterising random values including expected values, variance, etc. Other topics include Chebyshev's inequality – with examples of practical applications, laws of large numbers and central limit theorems.
Students will get acquainted with basic statistical principles, concepts, and methods, including sampling, variational series, point and interval estimation of distribution parameters, hypothesis testing and regression. The course will explore methods of moments, maximum likelihood point estimates, central static methods for building confidence intervals, Minmax and Bayesian approaches to the study of risks, Student's T test, Fisher's test, chi-squared test, Kolmogorov test etc. to test hypotheses. Students will be able to build a good theoretical base, reinforced by a large number of practical examples.
In this course, we will introduce students to Java programming language and to the necessary skills to develop Java applications.
This course will give students an introduction to the aims and techniques of formal logic. The logic of truth functions and quantifiers. The concepts of validity and truth and their relation to formal deduction.
This course will expose students to the foundations of programming as well as teach basic skills in this area. This includes an introduction to the concept of the algorithm and provides the basis for algorithmic thinking. The course examples and homework will be done using C++ language. No programming experience is required for the course.
In this course, students will become familiar with the foundational principles of optimisation of functions with one of several variables. Students will learn about Lagrange equations and how to work with them. The course will also explore various simplex methods. Many method and algorithm illustrations will be reinforced by practical examples and computer modelling.
This course provides a broad introduction to machine learning and statistical pattern recognition. Topics include: supervised learning (generative/discriminative learning, parametric/non-parametric learning, neural networks, support vector machines); unsupervised learning (clustering, dimensionality reduction, kernel methods); learning theory (bias/variance tradeoffs; VC theory; large margins); reinforcement learning and adaptive control. The course will also discuss recent applications of machine learning, such as to robotic control, data mining, autonomous navigation, bioinformatics, speech recognition, and text and web data processing.
The course introduces the notion of egular expressions, grammars, finite automata, Turing machines, and NP-completeness
Principles and practices for design and implementation of compilers and interpreters. Topics: lexical analysis; parsing theory; symbol tables; type systems; scope; semantic analysis; intermediate representations; runtime environments; code generation; and basic program analysis and optimization. Students construct a compiler for a simple object-oriented language during course programming projects.
The course introduces students to the principles and practice of computer networking. Structure and components of computer networks, packet switching, layered architectures. Applications: web/http, voice-over-IP, p2p file sharing and socket programming. Reliable transport: TCP/IP, reliable transfer, flow control, and congestion control. The network layer: names and addresses, routing. Local area networks: ethernet and switches. Wireless networks and network security.
File organization and access, buffer management, performance analysis, and storage management. Database system architecture, query optimization, transaction management, recovery, concurrency control. Reliability, protection, and integrity. Design and management issues.
The course will introduce students to the methods of evaluating the complexity of different computations, as well as the limitations of mathematical algorithms and computers. The issues and challenges discussed in this course include computational models, complexity evaluation, polynomial computable problems, polynomial algorithms, theorem hierarchy and its use for evidence of computability, polynomial reductions, reducible NP, proof of NP completeness, NP-complete problems, approximate solution of optimisation problems, problems in the polynomial hierarchy and PSPACE, probabilistic polynomial algorithms, PSPACE completeness, circuit complexity, first-order complexity, interactive proofs, interactive protocols, one-way functions and their use in cryptography.
Cryptography has become an indispensable method of ensuring security and privacy in the modern computing system. This course covers the inner workings of cryptographic primitives and how they should be used to ensure data security and privacy of communication.
In this course, students will become familiar with the foundational principles of optimisation of functions with one of several variables. Students will learn about Lagrange equations and how to work with them. The course will also explore various simplex methods. Many method and algorithm illustrations will be reinforced by practical examples and computer modelling.
Concepts and techniques used in constructing interactive web applications. Browser-side web facilities such as HTML, cascading stylesheets, javascript, and the document object model. Server-side technologies such as sessions, templates, relational databases, and object-relational mapping. Issues in web security and application scalability. New models of web application deployment.
In the second year, students will focus on the implementation phase of the project. This includes development and validation of software, collection of data, data analysis, etc. At the end of the year students will submit a progress report including the status of key stages of the project and a description of the remaining work. Students will also rehearse a presentation for their mentor to practice for the end of programme presentation that will take place at the end of the third year.
The university will offer regular open lectures by professors, experts and key figured by technology field. Students in data science program are required to attend many of the lectures and submit a write up describing what they learned during the talk. During the second year, students will be required to describe the problem statement, its significance and outline the presented solution.
The practical side of the programme is focused on indepth understanding of parallel computing, databases, compilers. At the end of the third year, students will have sufficient theoretical and programming background to tackle computer science problems in professional real world scenarios. A significant amount of time will be dedicated to the development of the Capstone project.
The courses are taught by researchers and professionals who practice the courses they teach either academically or by sharing their professional experiences in their field. The goal of the final year is to expose students to a range of realworld applications of the material that they've learned to ensure seamless transition into a professional roles.
The many issues examined in this course, of importance both for theory and practice, include: Hartley function, topics on sorting, topics on communication protocols, application of the rectangle method, Shannon entropy, the logic of knowledge, conditional Shannon entropy and the amount of information, coding with a small average code length, information inequality, Shannon limit, text encryption, the use of Shannon entropy in statistics, forecasting, Kolmogorov complexity, conditional complexity, PAC learning, Vapnik-Chervonenkis (VC) dimension.
The purpose of the Parallel and Distributed Computing discipline is to acquaint students with the principles of organisation, technologies and the place and role of distributed and parallel computing in the field of information technology. Students will work with practical training elements to consolidate the information received, and to prepare for further studies in modern means of network computing and their effective application in research. There are many methods because modern analysis of big data is highly diverse. Therefore, the course is naturally divided into two modules. Previously gained knowledge is sufficient for adequate comprehension of the first part.
This is an introductory course on computational geometry and its applications. The main topics covered in the course include the following: Convex Hulls, Object Intersection, Polygon triangulation, Range Searching, Planar Point Location, Proximity and Voronoi Diagram, Delaunay Triangulation, Arrangements, Sampling and Epsilon Nets, Paradoxical behavior of Higher Dimensions, Metric Embeddings.
A continuation of Machine Learning - 1
The purpose of the Parallel and Distributed Computing discipline is to acquaint students with the principles of organisation, technologies and the place and role of distributed and parallel computing in the field of information technology. Students will work with practical training elements to consolidate the information received, and to prepare for further studies in modern means of network computing and their effective application in research. There are many methods because modern analysis of big data is highly diverse. Therefore, the course is naturally divided into two modules. Previously gained knowledge is sufficient for adequate comprehension of the first part.
The course offers training that builds a solid foundation in chemistry, biology, computer science, mathematics and statistics. This training will enable students to communicate fluently with experts across these disciplines, and to have the skills necessary to apply computing tools to address contemporary problems in biology and medicine. The training will enhance the professional opportunities for undergraduates to pursue careers in pure or applied research in academia, government, pharmaceutical, medical, or biotechnology sectors.
Reyes and advanced rasterization, including motion blur and depth of field; ray tracing and physically based rendering; Monte Carlo algorithms for rendering, including direct illumination and global illumination; path tracing and photon mapping; surface reflection and light source models; volume rendering and subsurface scattering; SIMD and multi-core parallelism for rendering. Written assignments and programming projects.
An introduction to the concepts and applications in computer vision. Topics include: cameras and projection models, low-level image processing methods such as filtering and edge detection; mid-level vision topics such as segmentation and clustering; shape reconstruction from stereo, as well as high-level vision tasks such as object recognition, scene recognition, face detection and human motion categorization.
Robotics foundations in modeling, design, planning, and control. Class covers relevant results from geometry, kinematics, statics, dynamics, motion planning, and control, providing the basic methodologies and tools in robotics research and applications. Concepts and models are illustrated through physical robot platforms, interactive robot simulations, and video segments relevant to historical research developments or to emerging application areas in the field.
Study of the principles and practices of software engineering. Topics include software quality concepts, process models, software requirements analysis, design methodologies, software testing and software maintenance. Hands-on experience building a software system using the waterfall life cycle model. Students work in teams to develop all life cycle deliverables: requirements document, specification and design documents, system code, test plan, and user manuals.
Applications of computer science to genomics, and concepts in genomics from a computer science point of view. Topics: dynamic programming, sequence alignments, hidden Markov models, Gibbs sampling, and probabilistic context-free grammars. Applications of these tools to sequence analysis: comparative genomics, DNA sequencing and assembly, genomic annotation of repeats, genes, and regulatory sequences, microarrays and gene expression, phylogeny and molecular evolution, and RNA structure. Prerequisites: familiarity with basic algorithmic concepts.
Introduction to building applications for Android platform and iOS. Examines key concepts of mobile programming: tool chain, application life-cycle, views, controls, intents, designing mobile UIs, networking, threading, and more.
Students learn about challenges often encountered during collaborative work on a large project. These challenges stem from the professional reality that involves frequently changing requirements, imperfect effort estimations, frequent direction changes to the execution of the project as well as lack of coordination between team members. The course introduces proven techniques to manage these challenges. Successful project management allows teams to control costs, manage risks and meet deadlines. Students will learn methods to structure technical projects, identify key stages and tasks, determine task dependencies, assess the level of effort and design project plan, etc. We introduce popular project management software and offer students an opportunity to design their course project.
For the analysis of character sequences that occur in a variety of practical problems, it's useful to apply the concept of bioinformatics, which essentially deals with the analysis of protein sequences in DNA. The various topics covered in this course include: introduction to the analysis of character sequences, dynamic programming in graphs, dynamic programming for hypergraphs, pairwise alignment of sequences, other methods of comparison sequences in general, search for local similarities, multiple sequence alignment, search for multiple local similarities, examples of multiple sequence comparisons, probabilistic model families of sequences, examples of the use of cell mixture model (CMM).
The course introduces popular data visualization packages. We discuss methods and approaches to ad-hoc data visualizations as well as factors that make visualization clear, informative and attractive.
Study of the principles and practices of software engineering. Topics include software quality concepts, process models, software requirements analysis, design methodologies, software testing and software maintenance. Hands-on experience building a software system using the waterfall life cycle model. Students work in teams to develop all life cycle deliverables: requirements document, specification and design documents, system code, test plan, and user manuals.
The course introduces students to practical aspects of working within a group of peers. We discuss ways of splitting the tasks, facilitating productive meetings in a situation of professional disagreement and different styles and personalities. The course is heavily centered around discussions and exploration of practical examples. Students are split into groups and given an opportunity to observe the described phenomena.
The course covers basics of efficient, structured and organised technical writing. It introduces common structures and formats for technical documents ranging from workplace email communication to software requirements and API documentation. Students are taught to recognise audience of the documents and to build documents that meet their needs. Students will be introduced to professional writing instruments and will gain introductory experience using such tools through extensive exercises. Additionally course focuses on the creation of visual materials including diagrams and charts.
Computational methods for numerical solution of non-linear equations, differential equations, approximations, iterations, methods of least squares, and other topics.
Students will complete the project in their final year. By the end of year, they will finish the development of software, testing, deployment, data acquisition and analysis, preparation of their project report and documentation and the final presentation. The project will be presented to peers, mentors, the programme director, academic and industrial partners as well as venture capital organisations.
The university will offer regular open lectures by professors, experts, and key figures in the technology field. Students in the data science programme are required to attend a significant quantity of the lectures and submit a reports describing what they learned. During the final year, students will be required to describe the problem, its context and significance, the high-level summary of the solution as well as the future steps in development.