On the first day of class, our professor told us that this would be a very challenging course, and boy did it live up to those expectations. Completing this project, and the course in general proved to be quite demanding but more importantly, it forced to me to think about programming in a way I never did before.
I had always heard that assembly language was very difficult, but when we were first actually tasked with constructing a simple for loop, it was completely different than what I was normally used to. So already I could tell I was in for a ride. But as weeks progressed and our tasks got more complex, it became easier and easier. And yet the thought that we had to actually go and optimize a function in glibc, did not fill me with ease.
I would say picking a function was just as hard as optimizing itself. As stated in my previous entries, looking at the assembly file for strcpy was very unnerving. But I sat down with my professor and we realized that there was actually a lot that could be done, especially with null detection and the usage of vector registers. Although in the end I wasn’t able to optimize my function, more important though, was the thinking that was involved in such a task. All of the sudden coding became more than just making the program run, but rather making the program run efficiently. And in fact this thinking was in line with a lot of my other courses as well. This semester I learned about data structures and picking the most appropriate one to use based on your needs, as well as basic parallel programming where we learned to use the GPU and the CUDA api to perform simpler operations much faster than on a CPU.
So although it was at times a very frustrating experience, I definitely feel like I came out from this project with a whole new understanding of what it means to write well written code. Definitely not an easy course, but I would highly recommend it to all future students.