Posts

Week 61: CST370 - Design and Analysis of Algorithms

  WK02: Weekly Reflection This week's module focused on asymptotic notation and the analysis of algorithms, which helped me understand how computer scientists compare solutions beyond just whether they work. I learned that asymptotic notations such as Big O, Big Omega, and Big Theta describe how an algorithm's running time grows as input size increases. This gave me a clearer way to talk about efficiency when comparing algorithms that solve the same problem. One thing that went well this week was learning the difference between informal and formal definitions of time efficiency. The examples made me realize that Big O is not just about counting every single step, but about understanding the overall growth pattern. I also found the exercises helpful because they gave me practice recognizing whether an algorithm grows linearly, quadratically, logarithmically, or differently.  I learned how to analyze loops, nested loops, and basic operations to estimate running time. The Big The...

Week 60: CST370 - Design and Analysis of Algorithms

  WK01: Weekly Reflection This week's module introduced important foundations in algorithms and data structures. I learned what an algorithm is, how algorithms solve problems step by step, and how pseudocode can be used to plan a solution before writing actual code. The videos on Euclid's algorithm for GCD calculation helped me understand how a simple repeated process can solve a mathematical problem efficiently. One thing that went well this week was learning how to break problems into smaller steps. The pseudocode examples made it easier to think logically about a problem without worrying too much about programming syntax. I also learned about important problem types such as sorting, searching, graph problems, and the Traveling Salesperson Problem. These topics showed me that many computer science problems can be grouped into common categories. The data structures materials were also useful, especially the introduction to graphs and trees. I learned that graphs can represent ...
  WK58: CST462S -  Race Gender & Class in Digital World Service Learning Final Reflection My service learning project was a meaningful experience because it gave me a chance to work on a real website for a real organization. During this project, I worked on improving the site layout, navigation menu, mobile and tablet views, footer, page sections, colors, spacing, and general visual style. I also communicated with the site supervisor to understand what changes were needed and to make sure the website matched the organization's goals. One thing that went well was that I learned how to solve real design problems. Some parts looked simple at first, but they became more complicated when I tested them on different screen sizes. For example, the navigation menu needed a lot of CSS work to look good on desktop, tablet, and mobile. I also learned that small changes, like padding, colors, and alignment, can make a big difference in how professional a website feels. If I could impro...

Week 31: CST 334 - Operating Systems

WK07: Weekly Learning Reflection This week we covered several connected topics related to storage and input/output in operating systems. The main topics were I/O devices, hard disk drives, files and directories, and file system implementation. These topics helped explain how the operating system communicates with hardware and how data is stored and organized on disk. I/O devices focused on how the OS interacts with devices like disks and keyboards. We learned about programmed I/O, interrupts, and DMA, and how each method affects CPU usage and performance. Hard disk drives built on this by explaining how physical disks work, including seek time, rotational delay, and transfer time. This helped me better understand why disk access is much slower than memory access and why performance optimizations matter. The interlude on files and directories explained how files are organized and accessed. We learned that files are made up of data and metadata, and that directories are special files tha...

Week 30: CST 334 - Operating Systems

WK06: Weekly Learning Reflection This week's material focused heavily on thread synchronization, and I found that the topics connected more tightly than I expected. We covered condition variables, the bounded buffer implementation, the Anderson/Dahlin method for transforming ordinary classes into thread-safe ones, semaphores, and synchronization barriers. Although each topic introduced a new primitive or pattern, they all centered on the challenge of coordinating multiple threads correctly and avoiding issues like races, deadlock, or inconsistent shared state. In my own words, condition variables provide a way for a thread to sleep until some condition becomes true, while the lock protects shared data the condition depends on. Coding the bounded buffer helped me see why both the lock and the condition variable are essential; without the while loops, spurious wakeups or reordered scheduling would break correctness. The Anderson/Dahlin method made this even more procedural by giving ...

Week 29: CST 334 - Operating Systems

WK05: Weekly Learning Reflection This week we covered four main topics: Concurrency, Thread API, Locks, and Lock-based Data Structures. Concurrency introduced the idea that multiple tasks can overlap in time, even if only one runs at a time on a single CPU. I learned how unpredictable a program can become when threads share data without proper control, and how race conditions appear when two threads access the same data at the same time. The Thread API section helped me understand how threads are created, joined, and managed in code. I liked seeing how these functions make it possible for a single process to do many things at once, as long as we handle synchronization carefully. Locks were one of the most interesting topics. A lock prevents multiple threads from entering the same critical section at the same time, which helps avoid corrupted data. However, it also made me realize that using locks correctly is not always simple. We must think about fairness, performance, and what happen...

Week 28: CST 334 - Operating Systems

WK04: Weekly Learning Reflection This week's material covered four major topics in memory management: Free Space Management, Translation Lookaside Buffers (TLBs), Multi-level Paging, and Swapping. Each of these concepts plays an important role in how operating systems efficiently manage memory, and together they form a larger picture of how virtual memory systems function. Free Space Management was the most straightforward topic for me. The core ideas- how memory allocators track free blocks, split them, merge them, and choose which space to reuse- felt familiar and intuitive. Concepts like first-fit, best-fit, and worst-fit echo topics from previous programming courses and even some of the work I've done in C. TLBs also made sense because they resemble other caches in computer architecture. It helps to think of a TLB as a small, specialized 'shortcut' the CPU uses to speed up address translation. Because I already understood how caches work, this topic did not feel ove...