Posts

Week 63: CST370 - Design and Analysis of Algorithms

  WK04: Weekly Reflection This week's module focused on merge sort and preparation for the midterm exam. Since there is only one lecture this week, most of my time is being spent reviewing past topics and practicing problems for the upcoming test. The merge sort lecture helped me better understand the divide and conquer strategy. I learned that merge sort works by dividing a list into smaller parts, sorting those parts, and then merging them back together in order. This made recursion easier to understand because I could see how smaller problems combine to solve a larger problem. One thing that stood out to me was the merging step. Splitting the list is important, but the algorithm depends on carefully combining the sorted parts. This showed me that divide and conquer is not just about breaking a problem apart, but also about having a clear method for putting the solution back together. The rest of the week is focused on midterm review. I am going back over topics such as brute for...

Week 62: CST370 - Design and Analysis of Algorithms

WK03: Weekly Reflection This week's module focused on brute force string matching, exhaustive search, depth-first search, breadth-first search, and the introduction to divide and conquer algorithm design. These topics helped me understand different ways algorithms solve problems, from simple direct methods to more organized search and problem-solving strategies. One thing that stood out to me was brute force string matching. I learned that brute force approaches are often easy to understand because they try possible solutions directly, but they may not always be efficient for large inputs. The examples with string matching helped me see how an algorithm can compare characters step by step and still become expensive as the input grows. The exhaustive search topics were also useful because they showed how some problems can be solved by checking every possible option. The lectures on the traveling salesperson problem, knapsack problem, and assignment problem helped me understand why e...

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 ...