Posts

CST 438 - Week 4

 Hey everyone,      While reading Software Engineering at Google , the most interesting and impactful idea I encountered is the concept that software engineering is fundamentally about managing complexity over time , not just writing code that works today. Google frames software engineering as the discipline of building software that continues to be understandable, maintainable, and scalable as systems, teams, and lifespans grow. This long-term perspective reframed how I think about engineering work.      What stood out most is Google’s idea of “time as the primary scaling factor.” Google’s codebases are expected to outlive individual engineers, teams, and even products. Because of this, Google optimizes for practices that reduce long-term friction—such as code readability, consistency, and maintainability—sometimes even at the expense of short-term productivity. The emphasis on making code easy for someone else to understand years later was striking...

CST438 - Week 3

 Hey everyone, This week’s lessons focused on two essential aspects of software engineering — testing and version control with Git . Through the readings, videos, and labs, I learned how both areas are crucial for building reliable software and working effectively in a team. The testing materials emphasized the importance of having a strong suite of automated tests to ensure that code works as expected and can be changed safely over time. The Git labs and videos helped me understand how developers collaborate on code, manage changes, and prevent conflicts in shared projects. From the testing labs and readings, I learned that testing isn’t just something done at the end of development; it’s an ongoing process that supports every stage of building software. The concept of the testing pyramid stood out — most tests should be unit tests (around 80%), followed by integration tests (15%) and a small number of end-to-end tests (5%). I also learned that small tests are limited to a singl...

CST 438 - Week 2

 Hey everyone, This week, I learned more about React, a popular JavaScript library used for building user interfaces. I explored how React uses components to create reusable and modular pieces of UI, which makes development more organized and efficient. I also learned about JSX, the syntax extension that allows developers to write HTML directly within JavaScript, and how React’s virtual DOM helps improve performance by updating only the parts of the page that change instead of reloading the entire page. In my opinion, one of React’s biggest strengths is its component-based architecture, which promotes reusability and easier maintenance. Its strong community support and wide range of libraries and tools also make it very flexible for different kinds of projects. However, one weakness is that the learning curve can be steep for beginners, especially when integrating with other technologies like Redux or understanding hooks. Additionally, React changes frequently, so staying up to dat...

CST 438 - Week 1

Hey everyone,       This week, I learned a lot about what software engineering really means and how it’s different from just programming. The reading from SAG Chapter 1: What is Software Engineering? explained that software engineering is not just about writing code—it’s about creating software in a structured, organized, and maintainable way. It involves planning, designing, testing, and thinking about how the software will be used and maintained over time.      In Lab 1 , I learned about REST APIs and how they let different systems communicate using HTTP methods like GET, POST, PUT, and DELETE. The lab videos walked through how to build and test an API step by step, which helped me understand how the backend of web applications works. The bonus reading on REST API best practices was also helpful—it explained things like keeping endpoint names consistent and using the correct status codes when returning responses.      In Lab 2 , I...

CST 370 - Week 7

 Hey everyone, This week’s learning journey took me through several important algorithmic techniques and problem-solving strategies, expanding both my theoretical knowledge and my practical skills. I began with Non-Comparison Sorting , where I explored Counting Sort and Radix Sort . Unlike traditional comparison-based methods like Merge Sort or Quick Sort, these algorithms leverage properties of the input data to achieve better-than- O(n log n) performance in certain cases. Counting Sort uses frequency counting to sort integers efficiently, while Radix Sort applies a digit-by-digit sorting approach (often using Counting Sort as a subroutine), making it especially useful for fixed-length integers or strings. The visualizations helped me understand how these algorithms maintain stability and avoid element comparisons altogether. Next, I dove into Dynamic Programming (DP) . The key takeaway was that DP is all about solving complex problems by breaking them into overlapping subproble...

CST 370 - Week 6

 Hey everyone, This week, I explored several fundamental data structures and algorithms that are essential for efficient data organization and manipulation. I started with AVL Trees , where I learned how self-balancing binary search trees maintain their height through rotations. From the lecture and exercises, I practiced identifying whether a tree is AVL and performed left and right rotations to restore balance. The AVL tree visualization tool was especially helpful in understanding how the tree structure changes dynamically during insertions. Additionally, I shared about my experience in comparing test cases in our homework assignments with my classmates on Discord. I shared how to add the "a.out" file and use the manual commands provided by the professor. I also studied 2-3 Trees , a type of balanced search tree where nodes can contain two or three children. I learned how values are inserted and how nodes split when they become overfull. The video introduction and exercise...

CST 370 - Week 5

 Hey everyone! This week, I explored several important algorithm design techniques and deepened my understanding of how they are applied in solving complex problems efficiently. One of the key highlights was learning about Quick Sort , a widely used sorting algorithm that relies on the Divide-and-Conquer strategy. I now understand how Quick Sort works by dividing the array into smaller parts around a pivot, sorting those parts recursively, and then combining the results. I also learned about its efficiency and how its performance depends on the choice of the pivot. I also studied Binary Tree traversal methods, such as inorder, preorder, and postorder, and how each serves a specific purpose when working with hierarchical data. Alongside traversal, I learned how to calculate the height of a binary tree , which is a foundational concept for evaluating the balance and efficiency of tree-based data structures. I even added my insights on the class Discord group, explaining an easy calc...