Reflecting on the first year of Uni
Published: Aug. 30, 2020, 12:57 p.m.
In summary, it has been quite a ride, no, but for real, first year of University was amazing! This post goes into detail about that.
Shocking introduction, and less shocking reality
On our welcome week we had a few introductory lectures by Mark Lee - a very cool looking guy high up in the school's ranks. He told us quite a bit about the realities of university and "primed" us for what was to come: endless projects, long study hours, sleepless nights, so called "work weeks" (other courses have "reading weeks"). Safe to say almost everyone tensed up a bit. But don't get me wrong, his lectures were awesome, he also told us so much of the cool stuff.
Eventually the week passed and then came the regular lectures - on the first semester we had CS oriented Maths (split into 2 parts), and programming in Java. The Java part was a kid's game - we got through the basic programming constructs. And maths, well, was quite challenging at first, but after a month or so of getting into it, things got not too bad. The first part by Achim was super interesting, mostly due to how well he would convey the information. We learned quite a bit about numbers and their fundamental laws, different bases, then moved to more complex stuff like vectors and matrices, and finally learned a bit about sets and relations. The module was quite challenging, but Achim made it very easy to digest. So much so for the Computer Science student's reality Mark warned us about. But of course, I knew this was just the very start and things would get harder. For those unaware of UK's universities, most of the times the first year is both quite easy, and also the results don't count on the diploma, as long as you pass the modules. And sure did things get harder in the second term...
Everything is AI
So maybe everything is logic?
Also there were parties somewhere in the mix
I started 2020 with a bang. Our student's union "Guild of Students" holds a club night every week called "Fab". Being occupied with other activities, I never really went there in the first term, but as I waited for the second term to begin, decided to try it out. Turns out that once you start, it's hard to stop. So I didn't stop going, for like 5 weeks in a row, until the assignments hit hard. Let's talk about that part...
There was this Data Structures and Algorithms module, but in reality it was "Java 2: the monotonic lullaby". Content was great, the lecturer's insight was useful, assignments were interesting, but not gonna lie - the lecture delivery was god awful. I was surprised when a friend told me that as a personal tutor, the lecturer was great and very captivating. But oh well.
Then there was a module called "Logic and Computation". That was by far the most difficult one. It's about proving abstract things using a very limited set of fundamental logic rules. It was very difficult to get a hang of it, and honestly, I don't think I could have got it if not for our personal tutor deciding to teach us just that in the first term. The module was split into 2 parts: the first part taught us all about logic, and the second one was about applying the learned knowledge using a computer proof assistant called "Lean". I think I eventually got a hang of it. Will know for sure in the next year's functional programming module.
And finally, AI. It was the very meat of the term. It was lots of different things mashed together into one single module. Theory part started off with search algorithms, like DFS, BFS, Best First Search (Dijkstra's algorithm). Not really AI if you ask me. Then came more interesting part which was hill climbing, and ant-colony optimization. The latter was really interesting since it showed how you could create order out of very tiny and chaotic things. And then came actual machine learning. The lecturers were varying and we had such a shock when the ML part lecturer just got stuck on 1.5x playback speed :D ("It was fast and hard, and his accent was weird" - a student who shall remain unnamed). Needless to say, the module was cool af. But oh wait! I didn't tell you about robotics, did I?
In addition to this changing mix of modules, we had something very consistent - both theoretical, and a practical part about robotics. We were split into teams, and were given a Lego EV3 robot for each of the teams, with some sensors. Now I know you say "pff Lego robots", wait for the worst part - we needed to use this OpenRoberta system which was a scratch like interface. It contained a emulator to test the code on, but a very limited one. We were given a task to make a robot follow this black track on white surface, it could have had gaps, and there could be some intersections which we needed to pass. There was also some object detection that needed to take place. And we had to do it all on freaking scratch interface! But you know what, it was cool. It was cool to work with such stupid constrains, because then your skills of adapting to circumstances get tested. The interface was horrible, it would keep crashing, and as the project grew, the project files would corrupt! We didn't have much time to test on the real hardware, and emulator had only one colour sensor to follow the line with, while the most effective way to do it was using 2 of them. So with my most on brand move ever - I hacked together the emulator to add 2 extra colour sensors on the sides of the robot, and injected some behavioral switches in the bytecode interpreter to switch between the colour sensors, as the system only supported one of them. I ended up learning more about OpenRoberta's flawed code interpreter (using some boolean expressions you can determine whether the code is running on the emulator, or the robot), than the actual robotics itself. As file sizes grew, and deadline approached, everyone soon realized that the sensory information was horribly wrong. So, in addition to dealing with scratch interface, we needed to somehow calibrate the sensors. That means writing, I mean dragging and dropping more code in to account for that. Many teams opted to hardcode ranges of RGB values to pass certain cases with. Meanwhile, I opted for the most over the top solution out there - normalizing RGB values at the start, then converting the readings to HSV, and only then try to convert the HSV values back to one of the 8 or so built-in colours.
All in all, I think that is prepping us for work in the enterprise. The task I passed with flying colours. I'm pretty sure it was the fastest robot out of the bunch. For the second task we had to sweep across the square arena and detect various mines, bombs, and also avoid obstacles. It was really challenging once again, since the bombs used horrible reflective texture, thus most of purpose based sensors just didn't work. This is where no sleep really kicked in. It was quite a lifestyle while it lasted - 2 PM lectures finish, go to the lab, sit down, eat overpriced snacks, then 2AM comes, have some Uber Eats (I accept sponsorships, Uber), go back to work, then go back home when the sun is about to rise. But hey it was really cool! I ended up making some monstrocity that looked like Thomas the tank engine. I used totally the wrong sensors, but they worked better than the ones used for distance measuring! Anyways, this module summed up in a few images:
Anyways, as stupid as some of the restrictions were, I loved the module. I loved tinkering to make the robot I was building as good as it could possibly be. It was very fun to come up with some totally bizarre solutions to the problems we were facing, and that is something I would expect more of in the years ahead.
All in all, it was an incredible year for me. What started off as simple things looking hard, ended with hard things that looked simple, yet were incredibly fun to tackle. I do look forward to the next academic year, and that is something to discuss in another post :)