Skills

Here I will elaborate on practical skills I have picked up during my studies.


Portfolio items

App logo icon for Figma.

Figma

Samples of some of my prototyping and hi-fi design work.

App logo icon for Behance.

Behance

A handful of my research and design case studies, UML diagrams and other works.

App logo icon for GitHub.

GitHub

My version control repository showcasing a portion of my practical programming ability.


UX/UI

Skills I picked up during my post-graduate advanced diploma at Red & Yellow. I gained a plethora of practical experience and perfected my flow within a team.

Researching & Data Collection

I learned how to properly identify a client's needs through evaluating their behaviour. One is able to learn more from observing how a client interacts with a product than from merely interviewing them. During this academic year, we were tasked with a research project on a topic of our choosing. Part 1, the research portion, of this document can be viewed here.

I made avid use of the following methods to conduct my user research and collect my findings:

User Observation

Background research

Interviews

Competitive analysis

Personas

Heuristics of current solve

Journey mapping

Surveys

Designing & Prototyping

The second portion of my postgraduate studies concerns the design and creation of prototypes. This is where we learned the value in iterative prototyping to ensure a product will be well-received by users. I have learned how to design ergonomic and user-friendly interfaces that are simple yet unique - accomplishing their goals and keeping users happy and well-informed. The the practical aspect of my year-long case study can be read here.

I use a mixture of the following principles to refine my prototypes:

Card sorting

Rainbow charts

Sitemap evaluation

Insight-grouping

A/B testing

Iterative prototyping

Sitemap analysis

User journeys

Use cases


Systems Design

Design Patterns

My Computer Science undergraduate ensured I would be familiar with common design patterns. This means I am considerate of safe, efficent and reusable ways to implement code. We focused on the Gang of Four (GoF) patterns in particular. I am situationally aware of when to draw inspiration from each design pattern, and what the strengths and weaknesses of certain design systems are. I am aware of the necessity to abstract responsibilities in order to increaase the longevity of code.

Some of the GoF design patterns I am familiar with are:

Singleton

Factory

Observer

State

Architectural Patterns

In addition to understanding design pattern theory, I was also taught the impostance of architectural patterns: the blueprint of a piece of software's architecture. This skill has allowed me to understand the reasoning behind certain builds as well as identify common architectural solution types to recurring problems. During my undergraduate, I became familiar with:

Layered architectural

Model-View-Controller

Client-Server

Pipe-Filter

Event-Driven

Unified Modelling Language (UML)

In my undergraduate at University of Cape Town, I took a module in Information Systems. Here I learned how to design functional systems as well as how to communicate this design to fellow developers and the UX/UI team. I learned several key diagram schematics, when to use them, why they're useful and what they're best used for. This means I am able to accurately communicate design suggestions, as well as accurately understand design solutions suggested by team members. Additionally, this has made me aware of the importance of elegantly designed solutions and the importance of clear communication between members of a development team, those in different departments as well as the client. A few of UML diagrams I created during this course can be viewed here.

I became well-versed in creating and interpreting:

Class diagrams

Package diagrams

User experience maps

Use case diagrams

State-Machine diagrams

Site maps

Activity flows

Information architecture

Class diagrams

Value propositions

Sequence diagrams

Composition diagrams


Back-end Development

Java

Threading

I am familiar with threading implementation, as well as several methods used to prevent deadlock such as semophores, wait() and hold() methods, mutual exclusion, etc. Additionally, I am aware of the threat of deadlock and attempt to code in a way that actively avoids it. I am also familair with resource allocation and related theory.

Encapsulation, SOLID and Security

With reference to design patterns, I am aware of the necessity to ensure code is reusable. I am familiar with SOILD principles and strive to create classes with single-responsibilities that can be switched in and out as needed, and worked on as required. Additionally, I am aware of Code Smell and security hazzards as a result of poor coding practise.

Data structures

I learned several key methods of data storing as well as their computational complexity. I learned the pros and cons of several key data structures, as well as how to implement them. This includes, but is not limited to:

AVL, Binary, Red-Black, etc Trees.

Hash tables and Hash maps

Arrays and ArrayLists

SQL and Query operations

Text files and String manipulation

Theoretical structures of physical machines

Efficency

I am aware of the importance of computational complexity and aim to make my code as resource effective as possible. I am aware of different possible solutions and their numeral Big O complexities. I know when it is important to prioritise speed and when it may not be needed. Additionally, I have experience working with popular sorting algorithms such as:

Mergesort

Bubblesort

Binary search

Quicksort

Insertion sort

Breadth-first sort


Front-end Development

Although my undergraduate degree focused largely on back-end principles, I took it upon myself to learn front-end languages to align myself and my career with my passion for creation and design. However, I am still a beginner: but I believe I hold great potential to excel in this feild.

HTML & CSS

Although still in the fundamental phase of front-end knowledge, I ensure I stick to conventionl practise in order to make my code readable and expandable. I ensure my HTML is purely for structure, allowing for easy updating of style within the dedicated CSS file. In doing so, I ensure that updates only need to be made in one area - thereby minimising the risk of inconsistency.