Logo Norton Andreev

Introduction to Software Engineering

The module is an introduction to Software Engineering concepts and principles. During the first semester, I learnt more about 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 during the first semester was related to requirements capture for a software product that had to be built during the Spring semester. As a team, we had to write user stories, design acceptance criteria and do estimation and prioritisation. At the end of the semester, I participated in the Global Engineering Challenge week. Throughout the Spring semester, I had to work on a group project which involved building a dynamic web application using Ruby and Sinatra.

Achieved Result: First (84%)

Group Project: Tweet A Pie

Tweet A Pie is a dynamic web application that allows clients to order pies from a pastry shop chain via Twitter. The system supports two different locations, each with a distinct menu, clients, and order handlers. Clients create a customer account that contains personal information, such as the client’s Twitter handle, delivery address and phone number. Once someone tweets the pastry shop an order, it appears on the website. The Tweet is colour-coded in red in case the Twitter handle does not belong to a registered user. The order handlers are responsible for taking orders and interacting with the customers via the system’s UI. Admins can change the menus and assign special offers to customers. They can also remove customers from the system.

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 a better customer experience.

The implementation started in February. Although my main responsibility was the user interface (which was praised several times in the feedback), I took part in the development of all aspects of the software. Apart from that, I was actively supporting and motivating the team members, so that we could do as well as possible.

The key technologies used were HTML5, CSS, JavaScript, Sinatra, SQLite, and Ruby. GitHub and Slack were used for version control and team communication, respectively. As ordering of the pies was meant to be done via Twitter, Twitter API was utilised. The testing was performed with a combination of automated tests, using Cucumber, as well as manual tests. SimpleCov was used for computing the test coverage. A server-side verification was implemented so that the system accepts only sensible input and also for the prevention of SQL injections.

I enjoyed working on the project, as I learnt a lot of things in terms of Software Engineering in a short period. 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.

The Ability to use sophisticated software was 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. Then research was conducted, ballpark estimation was used and several design concepts were evaluated. In the end, 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, analysing it and coming up with suitable solutions while working in a team.

Java Programming

The module gave me a broad understanding of objected-oriented programming and Java's features. Emphasis was 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.

Achieved Result: First (73%)

Assignment: Chess

The overall aim of the assignment was to produce a Java program that would allow 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 interaction with the user can be either via the console, as a text display, or using a graphical user interface. The option to play against a computer has two modes — easy and "aggressive". While the game continues, it requests a 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.

The assignment was awarded a first-class grade.

Assignment: Decrypt Image

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 draw the graphic. Additional elements, such as a horizon and stars, had to be added. The assignment tested the ability to use arrays, loops and graphics.

The assignment was awarded a first-class grade.

Assignment: Programming Lego Mindstorms Robot

The assignment was to program a Lego Mindstorms robot to follow a black line on its own. Then, via 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 of the robot sometimes recognises 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 come up with an efficient solution.

The assignment was awarded a first-class grade.

Web and Internet Technology

The module covers the basics of network and networking and 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 assignments I had to do.

Achieved Result: First (85%)

The Diamond Website Assignment

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. This included a statement of how the planned design matches the requirements, a site map, how legal and accessibility issues will be addressed, design mock-ups, as well as information about the menu system. The development and testing document was about the changes made during the implementation process, description of the organisation of the file structure and the menu implementation, optimisation of loading time, usage of debugging tools, more details on how security concerns were addressed, as well as more information about the testing performed.

The grade received was one of the highest in the course. The feedback pointed out the great effort put into the project and the exceptional quality of the code and the documentation.

Java Script Assignment

Assignment: Graphical application using JavaScript and the 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 expressions had to be produced using the buttons on the page — "Happy", "Angry", and "Annoyed". Additional effects were implemented. When the nose is clicked, the face smiles. Furthermore, when the area around the eyes is clicked, a tear with a random size and colour appears at the mouse position.

The assignment was awarded a first-class grade.

Machines and Intelligence

During the Autumn semester of the module, I was introduced to Artificial Intelligence (AI) and the key concepts in the field. This includes robotics, machine learning, machine vision, speech and language understanding and processing, knowledge representation and reasoning. An overview of some ethical issues related to AI was 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.

Achieved Result: First (74%)

Mini Labs: Essay writing and NAO robots programming

During the Autumn Semester, we had to participate in five labs. The first two were related to essay writing on topics related to machine intelligence, whereas the others focused on experimenting with the NAO robot.

The first report was based on Alan Turing’s Imitation Game. The lab was executed similar to what Turning’s rules are, however, all roles were performed by students. Based on the typescript produced, each individual in the group had to write a report based on the assumptions, mistakes, and conclusions made. The second report was about machine intelligence in our lives. Two popular chatbots — Eliza and Mitsuku (now known as Kuki) — had to be compared and experimented with.

The next labs were about programming the NAO robot. They explored many of the robot’s features. Some of the tasks were creating a stimulus-response agent, as well as using various pre-built libraries within the Choregraphe suite, provided by the manufacturer of the robot. Finally, the last lab required us to do some basic programming on Python, instead of using Choregraphe‘s GUI utilised for the previous labs.

The labs deliveries were awarded first-class grades.

Assignment: The Warrior's Problem

In a computer game, a warrior has the goal of seizing a treasure chest that is at the bottom of a pit. The warrior may move from place to place on the surface while carrying a single object. The warrior can reach the treasure by moving a ladder to the pit, lowering it into the pit and climbing down the ladder. However, there may be a poisonous snake in the pit. In this case, the warrior can safely achieve his goal by attaching a hook to a rope, 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. For this assignment, I had to write and test Stanford Research Institute Problem Solver (STRIPS) operators for planning a solution to the warrior’s problem.

The assignment was awarded a first-class grade.

Gradient vector created by freepik

Assignment: The Rambler's Problem

The task 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 that involves the least effort, which is a combination of how far you walk and how much climbing you do. I had to experiment with different search algorithms, including Branch and Bound and A* with different estimations, for solving the problem. During the experiment stage, I concluded that, in the given problem domain, with random inputs, the efficiency of A* was 2.5 times higher than the efficiency of Branch and Bound when Manhattan 3D is used for calculating the estimated distance.

The assignment was awarded a first-class grade.

3D-Art created by Marcel Hansen

Introduction to Algorithms and Data Structures

The module introduced me 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.

Achieved Result: First (75%)

Devices and Networks

The first part of the module 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 covered connected and wireless networks, routing algorithms, layered protocols, error detection and correction and algorithms for reliable transmission.

Achieved Result: 2:1 (68%)

Foundation of Computer Science

The module aims 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.

Achieved Result: 2:2 (56%)