An introduction to programming using Java, covering OOP principles and good programming practices.
Object-Oriented ProgrammingTesting and DebuggingVersion ControlJavaGitIntelliJ
/EDUCATION
I study Computer Science with Artificial Intelligence on the integrated MEng programme at the University of Southampton. I am currently preparing to enter my 4th year and expect to graduate with a first class honours (currently averaging ~80%).
An introduction to programming using Java, covering OOP principles and good programming practices.
Object-Oriented ProgrammingTesting and DebuggingVersion ControlJavaGitIntelliJ
An introduction to computer hardware and low-level programming, with assembly labs on a Raspberry Pi.
Computer ArchitectureLow-level ProgrammingOperating SystemsAssemblyRaspberry PiUnix
Research, academic writing, and presenting technical information through a literature review and group presentation.
Professional PracticesAcademic WritingResearch SkillsTeXZotero
A foundational module covering the mathematical underpinnings of computer science.
Discrete MathematicsProblem SolvingLogical ReasoningTheory
Algorithm design and complexity analysis, with a focus on choosing and implementing suitable data structures.
Problem SolvingTime Complexity AnalysisData StructuresTheory
Relational database design, SQL, and practical data management in a Unix environment.
Database DesignOperating SystemsSQLSQLiteUnixDocker
Event-driven Java applications, testing, and software design, with a JavaFX game project and an introduction to C.
Object-Oriented ProgrammingTesting and DebuggingVersion ControlGUI ProgrammingUnit TestingSoftware Design PatternsJavaJavaFXMavenJUnitGitC
Requirements analysis, UML, and formal modelling with Event-B, applied to a dental appointment system.
Software ModellingRequirements GatheringFormal MethodsUMLEvent-BLaTeX
AI problem-solving through search, planning, constraint satisfaction, and probabilistic reasoning.
Search AlgorithmsProblem FormulationConstraint SatisfactionProbabilistic ReasoningTheory
Functional programming in Haskell, including higher-order functions, lambda calculus, and property-based testing.
Functional ProgrammingProperty-Based TestingParsingPerformance ProfilingHaskellGHCHUnitQuickCheck
Formal languages, automata, computability, and the time and space complexity of computational problems.
Formal ReasoningAutomata TheoryComplexity AnalysisProof TechniquesTheory
User-centred design through research, prototyping, and evaluation, applied to household energy management.
User ResearchThematic AnalysisPrototypingUsability EvaluationCollaborative DesignFigma
Computer networks and distributed coordination, applied to a replicated file-storage system in Java.
Network ProgrammingConcurrencyDistributed CoordinationProtocol DesignJavaTCPSockets
Building an advertising analytics dashboard in a team, from requirements and sprint planning to testing and delivery.
Agile DevelopmentTeam CollaborationSoftware DesignData VisualisationSoftware TestingJavaJavaFXMavenJUnitMockitoGit
Language syntax, type systems, and semantics, with a team project building a CSV query language and interpreter.
Language DesignLexing and ParsingInterpreter DevelopmentType SystemsHaskellAlexHappyStack
Security principles, attacker behaviour, and defensive controls, with a structured analysis of a multi-stage attack scenario.
Threat AnalysisSecurity ReasoningAttack ModellingTechnical WritingCyber Kill Chain
An independent comparison of classical and deep learning segmentation for cell microscopy, with a modular framework and desktop app.
Research DesignImage SegmentationDeep LearningDataset AnnotationExperimental EvaluationSoftware ArchitecturePythonPyTorchOpenCVNumPyPyQt5
Image processing, feature extraction, and recognition, with coursework on hybrid images and scene classification.
Image ProcessingFeature EngineeringImage ClassificationNumerical ProgrammingModel EvaluationPythonNumPyOpenCVscikit-learn
Machine learning models and experimental evaluation, with a study of ensemble classifiers on categorical data.
Machine LearningEnsemble MethodsExperimental DesignStatistical EvaluationClassifier ImplementationPythonNumPyscikit-learnSciPyaeon
Web architecture, HTTP, and hypertext, with coursework exploring, critiquing, and extending a university REST API.
Web ArchitectureAPI DesignHTTP AnalysisTechnical DocumentationHTMLCSSJavaScriptFetch APIJSONXML
Database internals, query optimisation, and transaction processing, with a Java query-plan optimiser.
Query OptimisationRelational AlgebraCost EstimationTransaction ProcessingJavaSQLSJDB
Linear and nonlinear optimisation, with a group study of electricity dispatch, resource limits, and emissions constraints.
Mathematical ModellingLinear ProgrammingConvex OptimisationSensitivity AnalysisJuliaJuMPHiGHSGurobiJupyter