Java
Java was the third language that I picked up at Imperial College London, developing multiple small scale projects ranging from picture processing to spreadsheet construction. I believe that this is currently the language that I am most proficient in, having a vast understanding of object-oriented programming as well as functional programming and concurrency using java.

Disclaimer: Some of my code for the projects I developed in Imperial will not be hosted on github, however, it is available upon request. This is to ensure the academic integrity of programming assignments since first year students may also be viewing this site.

The list of projects that I cannot show publicly are described below in further detail.
1. Picture Processor
This was the one of the first projects that I had developed in Java. The purpose of this program was to take in an image and apply various operations to this in order to generate a new image. Some of the operations included, but were not limited to: inverting an image, greyscaling an image, rotating and flipping images as well as blending and blurring images. These operations were achieved by working directly with the pixels in an image through iteration in most cases. Some of the more challenging transformations (such as blur) required the creation of a new object to prevent neighboring cells affecting the blur value.

By the end of the project, I gained familiarity with the use of packages in java as well as creating and designing classes in Java.
2. Spreadsheet software
In this project, I was asked to create spreadsheet software, similar to that of Microsoft Excel, but with limited functionality. One of the trickier parts of this project was with updating cells that are dependent on a changed cell, this was achieved using an abstract syntax tree. This project also required more advanced usage of object oriented programming as the project delved into concepts such as inheritance as well as the usage of generics.

By the end of this project, I had more familiarity with object oriented programming as well as the wide variety of collections pre-built into Java.
3. Concurrency project with museum simulations
In this project, I was asked to write a concurrent program that simulates a museum site with several consumers concurrently visiting different exhibits. Each exhibit could be capped to a certain number of visitors, so it was essential to find a way to deal with race conditions, this was achieved through the usage of locks. It was also essential to create threads for each visitor so that they are able to actually run concurrently, this was achieved through Java's pre-existing thread class.

By the end of this project, I had stronger knowledge of abstract classes and inheritance. I also gained more familiarity with concurrency, specifically with synchronization, locks and race conditions.
4. Social media replication
The main objective of this project was to implement a social network, this to be achieved using a user-defined linear data structure, and was to involve the use of threads to allow for concurrent execution of the program. The project was able allow multiple users to send and receive messages concurrently, this was achieved through the implementation of a backlog to store a collection of tasks that are to be executed by workers. In this project, we opted for a fine-grained locking strategy in order to allow the program to have a shorter runtime.

By the end of this project, I had a better understanding of concurrency as well as the different ways to deal with race conditions.