Reflections on Fall 2023

02 Apr 2024

Over the past semester, I learned a variety of foundational technical computer science concepts, and most importantly I was able to use technical concepts to explore my passion for cybersecurity. Leveraging courses such as ICS312, ICS332, and EE406, I laid a solid groundwork to tackle various lab projects found in Computer Security: A Hands-on Approach. Due to extenuating circumstances, I was not able to fully complete ICS332 that semester but what I learned was extremely useful. These courses provided invaluable insights, equipping me with a robust understanding of essential tools such as the command line, Linux, and Docker. Moreover, they fostered significant enhancement of my problem-solving abilities and my understanding of abstraction.

With ICS312 I gained a greater appreciation for higher-level languages and understanding assembly allowed me to understand the system at the lowest level. Something extremely important for going into the cybersecurity field. Unbeknownst to me at that time, I would also use assembly in my Reverse Software Engineering Class and gain a greater understanding of directly accessing control over the system and resources. ICS332 also allowed me to understand the mechanisms and policies that all operating systems have which allowed me to have an even greater understanding of the systems and resources that I use daily. And most importantly I learned “the kernel is code and data that always resides in RAM” from ICS332.

ICS321 was the black sheep of the computer classes I took during the Fall 2023 semester. ICS321 was an SQL database class where I gained a profound understanding of database design principles, SQL syntax, and commands for data retrieval, modification, and administration. The course equipped me with invaluable skills in transaction management, store procedures, and triggers. Not only has this class provided me with a solid foundation of real-world- applications in database management, but since ICS321 was an asynchronous class I also learned to efficiently manage my time when it came to projects.

In conclusion, studying assembly language not only deepened my understanding of low-level programming and optimized code execution but also fostered a great appreciation for the abstractions provided by higher-level languages. Exploring operating systems illuminated the intricate management of system resources, from process scheduling to memory allocation, while emphasizing the crucial balance between efficient low-level resource management and the convenience of higher-level abstractions.