Here I will elaborate on practical skills I have picked up during my studies.
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.
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
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
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
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
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
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.
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.
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
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
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.
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.