What's ahead in the second year?
Published: Aug. 30, 2020, 12:58 p.m.
This will be a short and sweet one. With the second year of University approaching so fast it is probably a good idea to think about what to expect.
Term one, and the different circumstances
Term one is definitely going to be far different from the usual, as most of the learning is going to be moved online. It is going to make things far more flexible, but also will bring more strain on figuring things out on our own, as there no longer is any daily schedule. But given this is something I have been dealing with quite a lot over the past few years while working on various projects, fingers crossed, it won't be much of a challenge to me. Now, onto the modules
Systems Programming in C/C++
According to our uni, these are the learning outcomes (vagueposting 100, I know):
demonstrate understanding of computer architecture
program in C/C++
use pointers and memory management in C/C++
write code that interacts with the OS kernel
Okay, safe to say I'm not very fond of moving back to C++, but the alternative (so far only had Java), is, well, even worse. What I am looking forward in the module, though, is the part about interaction with kernel. Although I kinda just expect it to mostly be a filler module for me, giving more time to study other modules, working on other projects, or plain just helping others to succeed in this module.
These are the expected learning outcomes:
Write programs involving infinite data structures.
Write functional programs using advanced features such as type classes and monads.
Write formal proofs of correctness of programs using dependent type theory.
Understand the Curry-Howard correspondence between logic and type theory.
Now this is more like it! The module builds on the Logic and Computation module from the last year. Infinite data structures, monads, type theory - that does seem quite a lot like Haskell to me. Not that I know it, but that makes things even more interesting! Now, the last 2 points is something I expect to struggle with the most, it's something I expect almost everyone to struggle with the most. Regardless, this module will definitely broaden my horizons.
Software Engineering and Professional Practice
Expected learning outcomes:
Describe and apply techniques for systematically engineering requirements, designing, architecting and testing software systems along with the technical, economical, legal and ethical trade-offs involved.
Describe and apply the basic principles of software project management, metrication and quality assurance.
Understand advances in industrial software engineering
Now this is really interesting. It seems like one of the things you'd go to university for. It is very easy to learn coding online. But all the testing, quality assurance, all the ways one would work on a large project? That is something less often taught. It may be one of the reasons lots of companies require a degree. And I am glad this is coming up sooner, rather than later.
Those are all the modules for term one. It does look rather exciting. Now, let's have a look at term 2.
Term 2, and the new horizons
Artificial Intelligence 2
Here are the learning outcomes:
Demonstrate a sound understanding of logic and probability and their role in artificial intelligence.
Formulate decision making problems using probabilistic and logic-based methods
Apply randomized methods for decision making such as Monte Carlo, MCMC, and Monte Carlo Tree Search
Model and analyse complex data using probabilistic graphical models
Now the second part of AI is pretty interesting. It does seem to still be mostly focused on hardcoded algorithms, hardcoded decision trees, and so on. But this whole formulation part is something I am less familiar with, so it will definitely be interesting to have a dig at that. Also, the data analysis part sounds pretty interesting. It can be quite hard to get a sense of the data one deals with. Definitely a module I will look forward to!
Security and Networks
Understand basic concepts of cryptography and SQL
Understand basic concepts of cloud services, in particular storage
Demonstrate an understanding of the threats to data stored on a computer, locally or in the cloud
Demonstrate an understanding of the threats to data sent on the network
Identify risks and use techniques to eliminate or mitigate them.
Cybersecurity is really cool, and this module builds up on the C/C++ module. It is going to be one of my favourites, I'm calling it right now. Especially the cryptography bit, I never really learned how RSA works, or how would one implement such algorithm. Data threats, uhm, well, not exactly sure, but I'm sure it will come in handy when needing to secure information at work.
Now this is the most interesting part, not gonna list the learning outcomes, but it's basically teamwork, and good coding practices. From the bits and pieces I heard and from the older students it, the most common project to do is a video game, without actually using any game engine. That's cool, because it means there is a lot of work to do for different kinds of interest groups. There are engine plumbers, there are feature designers, there are front-end people. It is something I am looking forward to experiencing, especially as teamwork is something really important to be able to successfully work in the industry.
So those were all the modules. They all sound really interesting, some will be easy, while others will pose a lot of challenge. I am looking forward for what's to come in the next academic year, especially given the present circumstances.