Irrespective of whether you think that blockchain represents the future of informatics or just another fad, the blockchain way of computation is maturing rapidly and its potential benefits span beyond the support of cryptocurrencies.
As much as it has taken the technology world by surprise, the inner workings of blockchain are firmly anchored in well-known computer science building blocks that have existed for decades. Distributed data structures, decentralized systems with shared state, consensus protocols with byzantine fault tolerance based on cryptographic primitives, virtual machine and programming language design, computer clusters, and system security.
It is only natural that computer science graduates interested in this new world will find that the required skill-set: smart contract programming, distributed web application (dapp) development, administration of blockchain nodes and their communication protocols; is within close reach. As part of their dissertation students can join research efforts dealing with: smart contract verification and digital investigation, virtual machine and programming language design for blockchain and distributed ledger technology in general.
Software that meets real-world requirements cannot be limited to a single processor running a single thread of execution on a single machine. Today, soft ware developers are faced with strict performance requirements that scale to thousands of users, along with having to learn programming languages and computer architectures, as well as deploy their artifacts on the cloud in order to make all this possible.
Computer science prepares today’s engineers with the following foundational skills:
And if all this still does not quench your thirst for bleeding edge soft ware development you can have a go at: The development of languages, type systems, logics and other formalisms to assist in correct and efficient development of concurrent programs and algorithms, and their integration into current technologies such as Go and Erlang, high-fidelity graphics for dynamically generated environments using distributed and cloud computing, resource scheduling at grid and cluster levels, as well as using virtual machine introspection for cloud security.
Nowadays every business is becoming a software business. This is so due to the sheer number of software components automating business processes, as well as controlling the functionality of vehicles, aircraft, and machinery of all sorts ranging from chemical plants to power stations.
Yet, developing industry-scale software is not exactly similar to programming your personal web-site or your own stock-keeping database on a pc. Nowadays, the average software project is of the six-figure kind, with an army of developers involved, and which in turn are expected to produce software systems that perform reliably once deployed. Central to computer science are the fields of software engineering, design patterns, testability, formal specification and verification of software through mathematical logic.
Equipped with these skills, computer science graduates will be able to fill in roles where the employment of test automation, automated test case generation, formal methods for engineering critical subsystems from specification and design phases till runtime verification is essential.
Ongoing research open to student contribution includes: employment of Human Computer Interaction (HCI) and machine learning in testing, real-world case studies involving the runtime verification of financial transactional systems, automatic code generation for verification monitors, formulation of novel temporal and deontic logics for expressing and monitoring formal system properties as well as service contracts for distributed computing components, and the development of proof systems for reasoning and comparing temporal logics for runtime verification.
There is nothing that captures the idea of what futuristic life may look like more than autonomous machines that display an intelligence of their own.
Underneath the hood it is really an ingenious composition of mathematical and computer science concepts - if you want to delve deeper beyond making use of stock artificial intelligence components that is. The design and application of deep neural networks, supervised/unsupervised as well as instance based machine learning, statistical/probabilistic classification models and regression is what runs the show.
Furthermore, this area is blending with the domain of big data due to sheer amount of data triggering the learning process of these artificially intelligent components. In this respect, the domain of distributed and high performance computing also finds a natural application.
The challenge would expose you to all these intriguing subjects and will have the opportunity to apply them in diverse areas such as: intelligent computer resource schedulers, computer vision, image understanding, explanation of the learning process of deep learning networks, leveraging natural language processing and machine learning for intelligent legal search and intelligent automated support for legal document editors.
Today’s information technology landscape is best described as everything connected to anything: Cyberspace, Social Media, Internet-of-Things, Cloud Computing, E-commerce, Bring-Your-Own-Device and so forth.
Combine this with the critical information processed by these computing platforms, privacy concerns and data protection regulations. Finally, bring into the picture resourceful attackers that know the inside-out of all that code tucked inside operating system kernels and drivers, application servers, network protocol stacks and ciphers and embedded device soft ware, and the result is that of illusionary security. If there was an area where shying away from any technicality of computer soft ware and systems wasn’t an option, then this is cyber security.
This is good news for computer science graduates given that their information technology discipline is the one that delves into the heart of these technical challenges. Computer operating systems and networking, cryptography, formal verification of security properties, security testing, and compiled code analysis and transformation, are all covered, preparing graduates to fill in roles spanning secure soft ware development, design and enforcement of access control policies, penetration testing, malware analysis, and running entire security operations centres.
Our academics are currently exploring new methods for: digital investigation and response to cyber security incidents using memory forensics, automated security assurance and social media monitoring tools, and secure distributed programming development through behavioural types.
If you were to compare an 80’s computer game to a recent one, you would be going from a boxed monochrome environment to one that is sharper than reality.
That is the result of the shift from programming general purpose processors to programming graphics rendering co-processors upon stacks of physics and game engines and virtual reality headsets that take the gaming experience to a level of realism that was unthinkable back in the day. The benefit of this level of realistic rendering spans beyond gaming, with virtual tours of museums and heritage locations as well as time-lapse simulations representing just a small number of use cases that is only bounded by your imagination. Computer science contributes the algorithmic aspects of rasterisation, ray tracing, physically based rendering, multi media and GPU programming, necessary for all this to happen.
A specialisation in this area provides you with a strong foundation in computer graphics and prepares you for a career in any graphics-related field including game programming and game engine development.
The Internet-of-Things (IoT) promises to smarten up homes, offices, care homes and hospitals, entire cities, motor ways and what not. Behind this promise lies the programming of resource constrained and embedded devices.
The implication is that programmers have to suddenly do without the stacks of ready-made libraries and frameworks that they have been accustomed to in recent years and go back to programming the bare metal.
The computer science approach to software development never abandoned this hardware-oriented and very direct type of programming, and includes:
The IoT reserves no mysteries for our graduates willing to create this promised smart living. Moreover they may be willing to extend the state-of-the-art and venture in the exploration avenues of lightweight virtual machine, operating system and programming language design for embedded devices under the supervision of our academics.
Choosing the right programming language for the task at hand is crucial for the successful delivery of software systems. Today’s software engineers are not just required to be proficient in multiple programming languages but must occasionally create new ones or design development frameworks for existing ones.
Accomplishing these tasks requires a foundational understanding of programming languages, that is covered in the following modules: programming paradigms, compiler construction, static and dynamic semantics of programs, type systems, models for concurrency and verification techniques.
Our academics are also offering research projects for augmenting API based programming with tool support for behavioural properties, as well as projects on the design of logics and domain specific languages to assist program construction in distributed/embedded systems and novel software development life cycles.