My name is Phillip Smith, and I am a student at the University of Newcastle, currently undertaking a double degree bachelor’s programme in mathematics and computer science.

Brief history

From the years following my graduation from highschool in 2014, I tried a variety of interesting fields including electronics, animation, and film and media.

I worked through to achieve a Cert IV in Film & Media, and eventually entered university to study communications, with desires to enter the media industry as an audio engineer. I spend a semester studying the course, which I honestly found incredible; however, I spent much time thinking about how my future would unfold, the kinds of realistic goals I can achieve, and the concept of “where will I be in 10 years?”.

I felt too uncomfortable with the uncertainty that I had to push through, and decided I would much more prefer and enjoy something that I was already doing as a hobby, which, at the time, I was already skilled enough to be a junior dev.

The following year included making two degree transfers from my BA Communication to BA Software Engineering (Honours), and then finally to my current double degree in Mathematics and Computer Science. The reason for an additional degree change was not out of disliking my choice, but rather that I felt I was not maximizing my potential at university. Software Engineering is not simple, but it can be learnt and self taught by a dedicated individual, which I feel I am.

Doing a degree in Software Engineering would have only exposed me to the various areas of the field, which I personally felt can be learnt outside of an academic environment. Thus, I made the change to something that sated my thirst for theoretical knowledge and skill that will allow me to enter the industry.

I am currently, at the time of writing this, about half way through my programme, and every semester has been better than the last.


In terms of programming, I am proficient in C#, having a wide understanding of many tools and features such as LINQ, Enumerables, extension methods, etc. I aim to follow SOLID design to reduce the instance of smelly code. Furthermore, I enjoy learning about design patterns - they are often simple to implement in C#.

Within the .NET space, I have spent a large amount of time working and playing with WPF, using the MVVM pattern. I admit that I have never used a framework to implement this pattern on my behalf, since I have never felt I couldn’t do something unless I used such a framework.

Python is another language I use a lot when working in data science or some mathematics applications. In terms of experience, I am less educated in the deeper workings that C#; however, I can work with the language to implement a design that is clean, efficient, and well-written. I have two instance of having done paid work with the language for data transformation and mathematical analysis of a particular theoretical concept; the latter of which having been work for the University of Newcastle as an assistant researcher for Dr Judy-Anne Osborn.

Finally, in terms of skills, it would be a waste to not include my experience in the media field. Having studying animation, film, audio, location scouting, and video and image editing, I have an insight into the process of other fields, giving me a somewhat creative way of thinking at times. Primarily, editing and audio production are things I still do in my spare time.

Personal Interests

At current, my biggest interest is in functional programming and abstract algebra (and especially how they relate!). I starting with F# and moved into Haskell once I learnt just how magical the programming paradigm can be. That being said, it is a rather complex set or interests, and so my progressing is rather slow due to requiring a large amount of time an energy to learn and digest.

Another interest of mine, if it can be called such, is my passion of exploring mathematical concepts and ideas I somehow constructed. There are two models that I have, currently, which in brief are involved with the optimization of pathfinding in a video game environment (see: Tool-Assisted Speedrunning), and how a narrative or story for something such as D&D can be built and constructed with logical and algebraic structures to form a self-validating model where players can traverse the narrative and elements experienced/encountered are then contained and not forgotten; that is, it is a model that ensures no loose ends.

Currently, I do not have the mathematical understanding to tackle these ideas as they involve concepts from automata and theoretical computer science and topics of abstract algebra.

$$ \begin{gather} \text{Injectivity of a function $f$ is defined:}
\forall s_1, s_2 \in S,\; f(s_1)=f(s_2) \implies s_1 = s_2\
\text{Then, the map $S\xmapsto{\alpha}T$ is injective if and only if:}
\exists\, T\xmapsto{\beta}S : \beta\alpha = \mathtt{id}_S \end{gather
} $$

Software Engineering

I have been working in Python and C# since 2014, developing my skills to understand various design patterns, principles, and frameworks. Using C#, I have mostly worked within WPF, using MVVM to implement modular and extendible applications in design. In the Python environment, I have worked on applications for:
  • Mathematics visualisations involving relationship mapping of higher degree matrices,
  • Problems involving coprimality between integer pairs in n-dimensional spaces, and
  • Built a few tools for online communities as a proof-of-concept optimisation tools that assists in optimising movement speed within a particular video-game context, given some specific constraints.
GZIP visualisation of "Alice in Wonderland". The first image is the raw data, and the second is the compressed. Red regions are sections of denser 1-values in the binary data, with black being denser sections of 0-values.


Since graduating high school in 2014, mathematics has long since been a hobby of mine. Now, I study doing a mathematics combined degree and continue to build my skill set within mathematics. After completing my first year of university, I was offered a position as a research assistant (RA) for Dr Judy-Anne Osborn, studying and creating visualisations of a particular mathematical configuration of matrix relations in 3-dimensions.

Looking ahead, I have much interest in machine learning, having begun self-study of the theory and mathematics involved.

A fun coding example

Have you ever need to validate a console-command dice role? Need to roll two 20-sided dice with a -3 modifier? That will be a simple “2d20-3” command! I have worked on this subject in an application, and this is a lovely section of validation code:
/// <summary>
///   Class which validates dice syntax
/// </summary>
public static class DiceRollValidator
  private static readonly Lazy<Regex> DiceFormatRegex = new Lazy<Regex>(() =>
    new Regex(@"^(?<DiceCount>\d+)d(?<SideCount>\d+)(?<ModGroup>(?<ModSign>[+-])(?<ModValue>\d+))?$",

  public static bool ValidateDiceRule(this string diceFormat)
    if (diceFormat is null)
      throw new ArgumentNullException(nameof(diceFormat));

    return DiceFormatRegex.Value.IsMatch(diceFormat.RemoveWhitespace());

  public static IDictionary<string, string> ProcessDice(this string diceFormat)
    if (diceFormat is null)
      throw new ArgumentNullException(nameof(diceFormat));

    var match = DiceFormatRegex.Value.Match(diceFormat.RemoveWhitespace());
    return match.Groups
      .Where(x => x.Value.Any())
      .ToDictionary(m => m.Name, m => m.Value);


I love $\LaTeX$. It’s a lot of fun building up a document in a way that feels a lot like coding. Although it is stressful, using PGF/Tikz is always an… experience. After using it throughout university (including on assignments where I could have used anything else), I comfortably default to $\LaTeX$.