CS565 Machine Learning
The goal of the course is to help students master the application of machine learning techniques by using the Python programming language and the specialized code library ThensorFlow in a simple way. The course was created for students who are involved in programming and software development, and who want to learn how to develop software using machine learning methods. Therefore, the course does not delve deeper into the mathematical interpretation of applied machine learning concepts which is more difficult for them to understand. In the first part of the course, the focus is on the applications of Python without using specialized libraries, which will allow students to better understand the essence of the concepts behind machine learning methods. The second part uses the specialized TensorFlow library, which enables faster and easier development of intelligent software systems. After passing the exam in this subject, the student will be able to: Understand how single-layer and multi-layer neural networks work; Apply the Python programming language without specialized libraries with the goal of having a better understanding of how neural networks work, i.e., understanding the essence of learning methods and deep learning; Apply the TensorFlow library in Python when developing more complex intelligent software systems that utilize single-layer or multi-layer neural networks and use it in the areas of image classification, face detection and recognition in images, object and pose detection, natural language processing, and data analysis; Choose techniques based on the type, nature, and complexity of the real-world problem, implement the appropriate technique using the Python programming language and the TensorFlow library, and thus solve the observed problem, or draw conclusions about the phenomenon in question that corresponds with real conditions in the industry.
CS520 Applied Deep Learning
The development of intelligent software systems that apply the so-called deep learning models has recently been experiencing rapid development and application in various fields, such as: Visual recognition of objects, natural language processing, information processing for the purpose of intelligent system learning, autonomous vehicle management, etc. The goal of this course is to introduce students to deep learning methods using the TensorFlow library of Python routines, the use of which greatly facilitates the understanding and application of various deep learning methods. These methods will be studied through examples throughout the course. Therefore, the use of complex mathematical apparatus, which is often used in textbooks and in papers on deep learning, has been reduced to a minimum, and in this way the course is adapted to the needs of software engineering and IT students. Upon completion of the course, the student will be able to: Apply Python and TensorFlow in the development of intelligent software that applies deep learning methods; Understand and use methods of convolutional neural networks to recognize objects, images, etc.; Understand and use Recurrent Neural Networks (RNN) and Convolutional Neural Networks (CNN) in order to process and understand natural language; Understand and use autoencoder and Generative Adversarial Networks (GAN); Understand the application of deep learning methods, which are applied in the driving of autonomous vehicles..
SE535 Intelligent agents
Agents are autonomous computer programs, robots, humans, etc. Agents operate in an environment that they can observe and in which they can achieve goals by performing certain actions. This course studies the problem of optimal operation of the software agent in order to realize its set goals. The goal of the course is to provide students with a broad introduction to the new and rapidly growing field of agent-based computing. The course introduces students to key concepts and models in this field and deals both with individual agents and their interactions. The topics covered in the course are: Agent to agent communication, automated negotiation and argumentation in cooperative and competitive environments, learning and planning with multiple agents, automated decision-making based on mechanisms such as voting and auction, and systems development and engineering based on agents. Upon successful completion of this course, the student will be able to demonstrate knowledge and understanding of: The main agent models used today and their foundation in artificial intelligence research; Motivation for appropriate use of agent-based computing; Main frameworks for agent decision-making for cooperative and competitive environments; Subject-specific intellectual and research skills. After successful completion of this course, the student will be able to: Analyze and criticize the performance of the deployed agent, place the agent in a simulated environment, in accordance with the given task.
CS525 Computer Vision
The aim of the course is to introduce students with the principles, methods of implementation and application of convolutional neural networks for visual recognition. Computer vision has become ubiquitous in our society with applications for browsing, image classification, mapping, and is applied in the piloting of drones and autonomous vehicles. The basis of these applications are visual recognition tasks such as image classification, localization and detection. In this course, special emphasis will be placed on deep learning for computer vision. Students will be able to solve visual recognition problems using convolutional neural networks in the Python programming language using the TensorFlow library. Upon completion of the course, students will be able to: Understand, implement and apply convolutional neural networks for visual recognition; Understand the latest research in visual recognition and computer vision; Implement and develop their own neural networks; Understand and apply known solutions to real-world computer vision problems.
SE560 Semantic Web Technologies
The subject discusses the Semantic Web technologies recommended by the W3C consortium and which are already being applied for the development of innovative multilingual products and services in the public sector, bioinformatics, energy, transport, etc. The goal is to introduce students to innovative methods of data presentation and processing, tools for the development of semantic web services and the current state of semantic web research. After the course, students will fully understand the principle of the Semantic Web and have the ability to apply standard W3C vocabularies and existing free and open-source tools. Additionally, they will master techniques for designing and developing semantic web solutions (XML/RDF/OWL/SPARQL).
CS541 Intelligent e-learning systems
The goal of the course is to enable the student to be able to design an intelligent system for electronic learning and to be able to apply such a system in the creation of an online course on a suitable platform for e-learning. An intelligent e-learning system here refers to a system capable of adapting to the specific needs and abilities of each individual student, thereby ensuring their satisfaction and enhancing the effectiveness of the teaching process by applying the principles of personalized learning. This approach provides students with instruction and learning “tailored to their needs,” i.e., aligned with their interests and abilities. The course program includes the application of intelligent agents, and especially the development of intelligent tutors that provide the student with personalized teaching materials and an appropriate learning style. After successful completion of this course, the student will be able to: Understand various methods and techniques of personalized e-learning; Develop, with the help of a suitable development platform, a prototype of an e-learning system that uses a tutor system.
SE520 Applied distributed systems
The goal of the course is to provide a high level of understanding and application of advanced concepts of distributed computing systems. The course provides a comprehensive set of thematic topics: Heterogeneity, security, transparency, competitiveness, fault tolerance; Principles of networking; Request-response protocol; Remote procedure calls; Distributed objects; Middleware architectures; Security and authentication protocols; Distributed file system; Naming services; Global states in distributed systems; Coordination and agreement; Control of transactions and competition; Distributed transactions; Replication. These topics form a solid basis for further advancements and applications aligned with the further development of the application of distributed systems, which are more specifically studied in other subjects within the study program. Upon completing course, students will be able to: Understand, design and develop architectures for basic distributed systems and applications; Apply the basic principles of distributed systems development; Understand and use object-oriented distributed systems based on middleware and corresponding technological platforms; Understand, use and develop advanced API services for distributed systems; Detect issues, perform load balancing, recover from failures, and monitor metrics in distributed systems; Understand the properties of common elements used in the design of distributed systems; Understand the complexities of developing distributed systems, such as computer and network failures, competitiveness, consistency, failures, etc.
SE525 DevOps Software Development and Evolution
In the first part of the course, if they were not familiarized with it beforehand, students will be introduced to the basics of the infrastructure important for using DevOps tools (virtualization, networking, cloud and security infrastructures). In the second part of the course, students will learn the theory of basic DevOps concepts, such as: Infrastructure as code, configuration management, the implementation process, microservice architecture, configuration parameter management, what happens after service deployment, disaster recovery and development-oriented security. Several case studies related to specialized forms of DevOps are also analyzed: Machine learning and application of the main DevOps tools. Upon completion of the course, the student will be able to: Explain the basic concepts of cloud infrastructure and security infrastructure, state and explain the basic theory of DevOps, explain the basic classes of DevOps tools, use the Internet to learn how to install and use of the necessary tools.
SE540 Development of IoT applications
The goal of this course is to teach students the skills and tools for developing IoT applications and to take full advantage of IoT capabilities. The course introduces students to basic IoT concepts from a software development perspective. The course outlines the basic full-stack architecture for IoT, describes the various development technologies in each IoT layer, explains the application of machine learning models in Edge, describes machine learning and artificial intelligence models in IoT applications, presents Internet of Things (IoT) use cases from the agriculture sector, healthcare, mobile industry. It also explains the development of IoT solutions from a product management perspective, and extensively covers security and applicable threat models as part of the IoT stack. Upon completion of the course, students will have knowledge that allows them to: Acquire working knowledge of wireless sensor networks (WSN), including topologies, sensor data, and wireless technologies used in sensor nodes; Learn how to build a system around a sensor-based IoT device; Learn how to use MQTT as a sensor data recording component from the start; The applications of machine learning in Edge, as well as neural networks for sound classification, design, and implementation of fuzzy logic and support learning.
SE545 Agile methods of software development:
Agile development methods refer to the numerous software development approaches that do not apply the so-called plan-driven software development, such as the waterfall method. These methods focus on software development and not documentation, so new software versions are delivered at intervals of 3-4 weeks without project documentation. First, this course will introduce students to the principles of the so-called lean software development, and then with three well-known agile methods: Extreme programming, Scrum, and Kanban. After completing the course, students will be able to: Understand the principles of lean software development; apply the guidelines for implementing Extreme Programming methods; implement the core concepts of the Scrum agile software development method; and carry out all activities within a Kanban project for software development.
SE575 Software quality assurance
This course is about software quality assurance and control. The course introduces students to various quality assurance tools and techniques. The goal of this course is for students to understand that a high value of software quality is not achieved without the inclusion of other components, such as security, reliability, software inspection and auditing. The challenges of quality assurance of software systems of the future are also discussed. These are: Testing in the digital age, autonomous systems testing, artificial intelligence testing, DevOps testing, next-generation software testers, the future of testing, etc. Upon completion of the course, students will be able to: Understand software quality, that is, how to define, analyze and measure it; Choose the appropriate analytical tool/technique for the given situation and explore how to analyze the results; Understand the strengths and weaknesses of various quality assurance techniques, such as software testing, static analysis, code review, and demonstration; Learn to collect, manage and evaluate quality metrics; Analyze and verify various software properties including security, reliability and performance; Gain hands-on experience with real-world quality assurance tools including static analysis tools, software testing frameworks, and software quality measurement tools.
SE570 Software and Systems Requirements Engineering
OThis course aims to provide a comprehensive look at the theoretical and practical aspects of discovery, analysis, modeling, validation, testing and writing requirements for systems of all types, with a deliberate focus on software-intensive systems. This course also explores different formal methods, social models and contemporary requirements, as well as techniques for writing requirements that can be useful to the practicing engineer. Systematic determination of requirements is required in the case of large or critical software and information systems, which are most often developed with the so-called plan-driven development methods (e.g. waterfall method). Upon completing the course, students will be able to: Communicate with potential users to gather data about work contexts; analyze marketing and user data and incorporate it into system design solutions; identify requirement conflicts and resolve them using functional alternatives.
SE580 Scalable software systems
This course covers the design principles and strategies needed to design and implement scalable data-intensive distributed systems. In this field, engineers not only need to know how to design systems that are inherently scalable, but to do so in a way that also supports high availability, reliability, and performance. Given the highly distributed nature of these systems, the basic concepts of distributed systems such as consistency, timing, and synchronization are also important. These systems generally run around the clock, have components running on different nodes and platforms, therefore, the course will emphasize deployment and operational issues. Upon completion of the course, students will be able to: Upon completing the course, students will be able to: Apply HTTP services that are native to the cloud, with event-driven asynchronous communication and SQL and NoSQL data storage, through the development of systems with increasing expectations; Understand what is required to design system properties in data-intensive distributed systems, focusing on interoperability, scalability, availability, reliability, loose coupling, mutability, and distributed data, and effectively balance these aspects by applying various design patterns and technologies; Design and implement scalable data-intensive distributed systems.
SE573 Designing Application Programming Interfaces (APIs)
Application programming interfaces (APIs) are important components of modern software systems because they connect all their components as well as provide communication with system users. This course covers all the aspects of designing and developing software interfaces, from receiving the design requirements to delivering them to users. The goal of this course is to teach students how to design, implement, and later modify application programming interfaces (APIs). The lectures focus on designing programming interfaces, while the tutorials focus on their implementation in Java. Due to an increasing number of program interfaces in modern software systems which contain an increasing number of components being used, the job of a software designer who specializes in the design of program interfaces is becoming more and more in demand. This course is intended for students who want to become designers of programming interfaces, which are increasingly in demand on the market. Upon completion of the course, students will be able to: Understand the importance, need and requirement for programming interfaces; Design, test and implement applied programming interfaces (APIs); Refine and change existing programming interfaces in accordance with changes in the software system.
SE565 Software Development Project Management
Large-scale software development requires the ability to manage resources (human and computer) through development process control. This course has a wide scope, designed to help technically trained software engineers acquire the knowledge and skills necessary to lead a project team, understand the relationship between software development and overall project engineering, estimate time and cost, and understand the software process. The nature of software development is unique enough to require specialized management techniques, particularly in the areas of estimating and scheduling. The specificity of this course lies in its intention to cover not only the management of projects developed using classical methods, i.e., plan-driven approaches, but also the management of projects developed using agile methods. Upon completing the course, students will be able to: Analyze the elements of a software project to extract comprehensive project objectives; Use inherent and derived items extracted from project artifacts to create effective project plans; Acquire the skill of applying various project management techniques in the context of a software project.
OM545 Entrepreneurship and Innovation
Creating new businesses, conquering new markets, and increasing organizational effectiveness happens through innovation, process transformation – or both. New technologies, processes, market competition, and globalization force entrepreneurs and existing firms to distance themselves from what is familiar and foster innovation and agility. This course examines the successful strategies, business models, frameworks, financing, barriers and risks for introducing innovative products and services. Topics include business model innovation, strategic leadership, people-centered and design-based innovation, knowledge and change management. Upon completing the course, students will be able to: Develop skills and insights for evaluating, articulating, refining, and presenting a new product or service, either as a start-up business or as a new initiative within an existing company and apply the knowledge necessary to introduce new technology to the market.