Relevant Masters Degree in computer science or ICT field.
5+ years of software development or programming experience.
In-depth understanding of C#, Java and Python.
A thorough understanding of computer science fundamentals, including object-orientated design and data structures and algorithms.
A thorough understanding of programming, including built-in and abstract data types, parameterised methods, enumeration, collections, procedures, application programming interfaces, and libraries.
A thorough understanding of object-orientated programming, including classes, objects, methods, messages, classification, generalization, specialization, inheritance, interfaces, inner classes, polymorphism, abstraction, events, delegates, concurrency and exception handling.
A thorough understanding of programming, including advanced file I/O, advanced ADO.NET application and version control with Git.
A thorough understanding of software engineering, including software development lifecycle; modelling, abstraction, standards, and specification; systems and architecture; layering and separation of concern.
A thorough understanding of software engineering, including application layering; the data layer; databases; data topologies; relational databases; data normalisation (0NF, 1NF, 2NF, 3NF, 3½NF); distributed heterogeneous data stores; transactions; database integrity rules; logs and journals; coordinators and participants.
A thorough understanding of software engineering, including the data access layer, data access technologies, data providers, dataset components; the user interface layer, graphical user interfaces, data binding in UI components, rich vs. thin clients, interfaces and channels.
A thorough understanding of software engineering, including business logic, business rules, inference engines, backward vs. forward chaining, workflow management, state machines, code-based vs. data-based specification, tight binding and loose coupling for reusability.
A thorough understanding of software engineering, including concurrency and consensus; thread-safe programming; distributed applications. Linear data structures (stacks, queues, lists).
A thorough understanding of software engineering, including non-linear data structures, associative arrays (dictionaries, hash maps, graphs, trees, tries, priority queues).
A thorough understanding of software engineering, including ordered data structures (binary trees, heaps); specialised data structures (sets, bags).
A strong knowledge of the subject area combined with a broad subject background enabling contributions to teaching programmes.
Excellent interpersonal, oral and written communication skills.
Proven record of ability to manage time and work to strict deadlines.
Commitment to high-quality teaching and fostering a positive learning environment for students.
Commitment to continuous professional development.
Commitment to academic research.