First Year

Introduction to Software Engineering

The module was an introduction to the Software Engineering concepts and principles. During the first semester I studied the software life cycle, the software engineering methodologies (such as Waterfall, Agile, XP, Spiral and Scrum) and software project management. I was also introduced to ethics and legal issues related to Software Engineering. Most of the work I had to do the first semester was related to requirements capture about a software that had to be built during the Spring semester. As a team, we had to write user stories, to design an acceptance criteria and to do estimation and prioritization. At the end of the semester I participated in the Global Engineering Challenge project. Through the Spring semester I had to work on a group project which involved building a dynamic web application using Ruby and Sinatra.

Tweet A Pie

Group Project: Tweet A Pie

The planning of the project started during the Autumn semester when we were assigned to different teams and had to meet a client who provided us with the requirements for the system. Apart from the requirements given to us initially, we offered additional features for better customer experience.

The implementation started in February. I was mainly responsible for the graphical user interface which was praised several times in the feedback. Apart from that, I was actively supporting and motivating the team members, so that we could do as well as possible.

HTML5, CSS, JavaScript, Sinatra, SQLite and Ruby were used. GitHub was used for version control and Slack for team communication. Twitter API was used as well, as ordering of the pies was meant to be done via Twitter. The software supports two stores, each one with different menu and different users. Apart from the user accounts, there are admins, who can change the menu, assign offers and delete users.

The testing was done using Cucumber and manual tests. SimpleCov was used for test coverage. A server-side verification was implemented, so that the system accepts only details that are valid.

I really enjoyed working on the project, as I got experience building apps using the MVC framework and further developed my teamwork skills. The team mark achieved was 88% and the individual one - 94%.

Global Engineering Challenge

The cross-faculty group project is about improving participants' soft skills while working on real-world problems from a global perspective. The issues different teams had to work on were related to Kibera - Kenya’s largest informal urban settlement.
Ability to use sophisticated software is the problem my team had to develop a solution to. PESTLE and SMART analysis were used so that we could better understand the context of the problem. Based on that, a research was conducted, ball park estimation was done and several design concepts were evaluated. The we developed the final design and produced a report and a presentation.
As a result, I gained more experience in properly assessing given engineering problem, analyzing it and coming up with suitable solutions while working in a team.

GCE

Java Programming

The module introduces programming concepts through Java. Emphasis is placed on writing well-structured and maintainable code. The Autumn semester covered the primitive data types, arrays, enums, choices and selection, repetition and graphics. Classes and objects, packages, object composition and abstract data types were also taught.

Advanced programming topics, such as information hiding, refactoring, test-driven development with JUnit, exception handling, threading and recursion were covered during the Spring semester.

Chess Game

Assignment: Chess

The overall aim of the assignment was to produce a Java program that allows a human player to play a game of chess either against a fellow human or a simple AI. A set of classes were provided to restrict the number of possible solutions. Concepts such as inheritance, exception handling and threading were used while building the software.

The game can be played either on a console, as a text display, or in a graphical user interface. The option to play against a computer has two modes - easy and "aggressive". While the game continues, it requests move from each player in turn. If the move is available and the "to" position is occupied - the piece is taken from the opponent. If the move requested is not legal, the player is asked to supply a new one. The game finishes when a King is taken.

Assignment: Read information for a file and display the picture

A text file, containing 32,400 capital letters, was provided. The letters were representing an encrypted version of a drawing of a camel. The task was to read from the file, decrypt the data, store the new values, and print the output on a graphic windows. Additional elements, such as a horizon and stars, had to be added.

The assignment tested the ability to use arrays, loops and the "EasyGraphics" class from the Sheffield package. The appropriate usage of constants, variables and types were also part of the marking scheme, as well as the readability of the code.

Camels Assignment
Lego Mindstorm

Assignment: Programming Lego Mindstorm Robot

The assignment was to program a Lego Mindstorm robot to follow a black line on its own. Then, with a manual control, it had to take a ball and transport it back to the starting point where it had to dance. The assignment had to be done in groups of 4 students. The centre of the arena, where the robot had to stop, was blue. Since the light sensor sometimes recognised blue on the black line, we had to further improve our algorithm. Although each team member was focused on a specific task, we were really supportive and helped each other in order to provide an efficient solution.


Web and Internet Technology

The module covered the basics of network and networking, the principles of website design and development. I got knowledge of information security, protocols, technologies of browsers and search engines. HTML, CSS and JavaScript were used for both of the assignments I had to do.

Assignment: Mobile first responsive website

The assignment was about building a mobile first responsive website, following given requirements. HTML, CSS and JavaScript were used. Accompanying documentation was created - a document, written before the implementation, including a statement how the planned design matches the requirements, the site map, legal issues, description of how accessibility issues will be addressed, design mock-ups and information about the menu system. The development and testing document was about the changes made during the implementation process, description of the organization of the file structure and menu implementation, optimization of loading time, usage of debugging tools, more details on how security concerns were addressed, as well as more information about testing.

The grade received was one of the highest among the students from the course. The feedback pointed out the efforts I had put into the project and the exceptional quality of the code and the documentation.

The Diamond Website Assignment
Java Script Assignment

Assignment: Graphical application using JavaScript and HTML5 canvas element

The assignment tested the ability to use JavaScript and the HTML5 Canvas element to develop a graphical application, showing a drawing of a face, running on a web page. Different expression could be produced using the buttons on the page - "Happy", "Angry", "Annoyed". Additional effects were implemented - if the nose is clicked, face smiles; if the area around the eyes is clicked, a tear with random size and colour appears at the mouse position.


Machines and Intelligence

During the Autumn semester of the module I was introduced to the Artificial Intelligence and the key concepts in the field. I was introduced to robotics, machine learning, machine vision, speech and language understanding and processing, knowledge representation and reasoning. An overview of some ethical issues related to AI were presented at the end of the semester.

The Spring semester covered a number of computer-based problem solving methods developed for AI. Experiments and tasks, related to research programming, were implemented in Java.

Assignment: The Warrior's Problem

"In a computer game a warrior at point W has the goal of seizing a treasure chest T which is at the bottom of a pit at point P. The warrior may move from place to place on the surface and carry a single object from place to place.

The warrior can reach the treasure by moving a ladder at point L to the pit, lowering it into the pit and climbing down the ladder. However, there may be a poisonous snake S in the pit. In this case the warrior can safely achieve his goal by attaching a hook at point H to a rope at point R, lowering the rope into the pit, hooking the treasure and hauling it up. If both methods are possible, the warrior should prefer to use the ladder." - taken from the assignment brief.

In this assignment we had to write and test STRIPS operators for planning a solution to the warrior’s problem.

The Warrior's Problem
The Rambler's Problem

Assignment: The Rambler's Problem

The problem was to work out the best walking route from a start point to a goal point, given a terrain map for the walking area. A terrain map specifies the height of each point in the area. For a rambler, the best route is the one which involves the least effort, which is a combination of how far you walk and how much climbing you do.

In the assignment I had to experiment with different search strategies for solving the problem.


Devices and Networks

The module ran throughout the academic year and was divided into two part. The first consisted of gates and circuits, implementing logic, sequential circuits, computer arithmetic, instruction set architecture, the structure of the CPU, assembly language programming, accelerating performance and computer memory.

The second part of the module covered the connected and wireless networks, routing algorithms, layered protocols, error detection and correction and algorithms for reliable transition.


Introduction to Algorithms and Data Structures

The module was an introduction to the design and analysis of efficient algorithms and data structures. The topics covered were efficiency of algorithms, design and analysis of algorithms for sorting, data structures, design and analysis of graph algorithms and algorithmic design paradigms.


Foundation of Computer Science

The module aimed to develop mathematical concepts and techniques that are of foundational importance to computing. The first semester covered propositional logic, sets, boolean algebras, predicate logic, proof strategies, function and relations, induction and recursion.

The second semester was about integers, modular arithmetic, matrices and systems of linear equations, matrix algebra, probability, variables and processes.